最小的L2损失

小张用某种仪器获得了一组观测值A,A长度为n,A中每一个数都是0-255之间的整数。但是观测值A存在一定的误差,现在小张想求得最可能的真实值B,使得:

  • B中的每一个数都是0-255的整数且与A长度相同
  • 0< = B(i+1) -B(i) <= 3( 0 <= i < n-1)
  • A和B之间的L2损失最小(A(i)和B(i)差的平方的和最小)
    要求返回最小的L2损失。

输入第一行是数据长度n(0 第二行是n个0-255之间的整数
返回一个整数表示L2损失

例子:

输入:
5
1 2 3 6 10

返回
1

c++实现

#include
#include
#include
#include
#include 

using namespace std;

int minLoss(int n, vector A)
{
    int sumLoss = 0;
    vector B(n, 0);//初始化B
    B[0] = A[0];
    for (int i = 1; i < A.size(); i++)
    {
        if (A[i] - B[i - 1] > 3)
        {
            B[i] = B[i-1] + 3;
            sumLoss += pow(A[i] - B[i],2);
        }
        else if (A[i] - B[i - 1] < 0)
        {
            B[i] = B[i - 1];
            sumLoss += pow(A[i] - B[i], 2);
        }
        else
        {
            B[i] = A[i];
        }
    }
    return sumLoss;
}

int main()
{
    int n;
    cin >> n;//第一个输入是数据长度n

    vector A;
    for (int i = 0; i < n; i++)
    {
        int temp;
        scanf_s("%d", &temp);//依次输入观测值A
        A.push_back(temp);
    }

    int res = minLoss(n, A);
    printf("min L2 loss is : %d", res);

    system("pause");
    return 0;
}
示例1

运行结果
示例2

运行结果
示例3
运行结果

你可能感兴趣的:(最小的L2损失)