使用java计算增量平均值

时间:2017-04-20 13:30:40

标签: java arrays average

我有2个数组,我想计算增量平均值并将其再次存储在数组中。我举了一个例子。

int[] arr1 = {1,1,2,3,4,4,4,4,5,6};
int[] arr2 = {8,9,2,4,5,7,1,8,3,6};

计算后我想输出为

int[] arr1 = {1,2,3,4,5,6}
double[] average = {8.5,6.3333,5.75,5.5,5.222,5.3}

平均值是这样的, 对于arr1中的1,平均值为8 + 9/2

2,平均值为8 + 9 + 2/3等

我已经编写了一个for循环,但是我想做一些更快的计算,因为我的原始数据大小为800,其值为1400000且已经排序。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

您可以使用DP。如果使用嵌套循环,则可能意味着您正在计算循环中每个元素的平均值。为了让你的代码运行得更快,你可以使用这样一个循环:

int[] input = {1,1,2,3,4,4,4,4,5,6};
double[]average = new double[input.length];
double ave = 0;
for(int i = 0 ; i< input.length ; i++)
{
    ave = (input[i] + ave * i)/(i+1);
    average[i] = ave;
}

PS :您的答案错误正确答案是:

{1.0 , 1.0 , 1.3333333333333333 , 1.75 , 2.2 , 2.5 , 2.7142857142857144 , 2.875 , 3.111111111111111 , 3.4}

{8.0 , 8.5 , 6.333333333333333 , 5.75 , 5.6 , 5.833333333333333 , 5.142857142857143 , 5.5 , 5.222222222222222 , 5.3}

答案 1 :(得分:0)

您可以利用递归来避免重新计算增量总和:

Avg(a,b,c) = (a + b + c) / 3

Avg(a,b,c,d) = (a + b + c + d) / 4
             = (a + b + c) / 4 + d/4
             = ((a + b + c) / 3) * 4/3 + d/4
             = Avg(a,b,c) * 4/3 + d/4

=> Avg (x1->xn+1) = Avg(x1->xn) * (n+1)/n + xn+1/(n+1)