计算原始操作&计算Big-O表示法

时间:2014-11-12 22:45:29

标签: java algorithm primitive counting operations

我编写了一段java代码,当给定一个数组(arrayX)时,计算出该数组的前缀平均值,并将它们输出到另一个数组(arrayA)中。我应该计算原始操作并计算Big-O表示法(我猜测的是计算的总数)。我已经包含了java代码和我认为是每行旁边的原始操作的数量,但我不确定我是否正确计算它们。提前谢谢,抱歉我的经验不足,我发现这很难理解:)

double [] arrayA = new double [arrayX.length]; *(3 Operations)*

    for (int i = 0; i < arrayX.length; ++i) *(4n + 2 Operations)* 
    {
        double sum = arrayX[i]; *(3n Operations)*

        for (int j = 0; j < i; ++j) *(4n^2 + 2n Operations)*
        {
            sum = sum + arrayX[j]; *(5n^2 Operations)*
        }
        arrayA[i] = sum/(i+1); *(6n Operations)*
    }
    return arrayA; *(1 Operation)*

总操作数: 9n ^ 2 + 15n + 6

1 个答案:

答案 0 :(得分:2)

我认为“什么构成原始操作”没有任何标准定义。我假设这是一个课堂作业;如果您的导师已经向您提供了有关哪些操作被视为原始操作的详细信息,那么请继续执行,否则我认为只要您有合理的解释,他就不会以任何方式对您进行过错。

关于内循环:

for (int j = 0; j < i; ++j)

请注意,循环执行的总次数不是 n 2 ,而是0 + 1 + 2 + ... +( n -1)= n n -1)/ 2。所以你的计算可能不正确。

Big-O符号实际上不是“计算总数”;粗略地说,这是一种估算当 n 增长时计算数量增长的方式,通过说计算的数量大致与 n 的某个函数成比例。如果任何常量 K 的计算次数 Kn 2 ,我们说计算次数 O(n 2 无论常数 K 是什么。因此,您认为原始操作并不完全重要。你可能得到9 2 ,其他有不同操作的人可能得到7 2 或3 n 2 ,但没关系 - 它都是 O(n 2 。并且低阶项(15 n +6)根本不计,因为它们比 Kn 2 项增长更慢。因此,它们与确定适当的大O公式无关。