美文网首页
最小的L2损失

最小的L2损失

作者: huim | 来源:发表于2019-08-09 17:58 被阅读0次

小张用某种仪器获得了一组观测值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<1000)
第二行是n个0-255之间的整数
返回一个整数表示L2损失

例子:

输入:
5
1 2 3 6 10

返回
1

c++实现

#include<vector>
#include<stdlib.h>
#include<stdio.h>
#include<iostream>
#include <math.h>

using namespace std;

int minLoss(int n, vector<int> A)
{
    int sumLoss = 0;
    vector<int> 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<int> 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损失

      本文链接:https://www.haomeiwen.com/subject/vxghjctx.html