线性前缀平均方法比二次前缀平均方法更好吗?

时间:2014-06-07 00:49:03

标签: java array-algorithms

我已经创建了一种方法(基于我在网上找到的伪代码)来计算阵列的前缀平均值,但我不确定我是否满足要求。

要求是:

  

给定n个数的[1 ... n]数组,计算另一个数组b [1 ... n]   长度为n,使得b [i]是a [0] ... a [i]的平均值,0 <= i <=   ñ。

我环顾四周,发现前缀平均方法的线性和二次版本的伪代码,并创建了我自己的每个实现。

以下是线性版本:

public static double[] prefixAverages1 (double[] n) {
        double b[] = new double[n.length]; 
        double s = 0;    
        for (int i = 0; i < n.length; i++) {
            s += n[i]; 
            b[i] = s/(i+1);
        }
        return b; 
}

以下是二次版本:

public static double[] prefixAverages2 (double[] n) {
        double b[] = new double[n.length];  
        for (int i = 0; i < n.length; i++) {
            double t = 0;
            for (int j = 0; j <= i; j++) {
                t += n[j];
            }
            b[i] = t/(i+1);
        }
        return b;
}

我的问题:

这两个功能是否满足要求?如果是,哪个更好?

2 个答案:

答案 0 :(得分:1)

线性更好,因为它需要更少的执行时间 -O(n) 而二次方需要更多时间 - O(n^2)

答案 1 :(得分:0)

是的,我认为这两个功能都满足要求。在这个问题中,我无法找到任何理由选择线性解的二次解。