Big O:是`IterateArray` O(n)还是O(n log n)的整体性能?

时间:2009-07-09 19:49:56

标签: performance big-o

如果我有以下代码:

IterateArray(object[] array)
{
    for(int i=0; i<array.length; i++)
    {
        Dosomething(array[i]);
    }
}

并且Dosomething(object)方法的时间性能为O(log n),是IterateArray O(n)还是O(n log n)的整体性能?

5 个答案:

答案 0 :(得分:14)

简短&amp;有点错误的答案是O(n log n)。

答案很长:把它写成O(n log m )会更准确。

除非DoSomething真的依赖于整个阵列,否则看起来它在单个元素上运行。所以我们用“m”分开区分它。

答案 1 :(得分:12)

这将是O(n log n)

你正在执行O(log n)性能操作n次,并且乘法与Big O一致,所以O(n)* O(log n)= O(n log n)

重要的是要注意,如果您正在查看两个不同大小的数组,那么m和n之间确实不需要有任何区别。原因是m和n都是常数,如果要绘制它们的增长率,它们是渐近等价的。

答案 2 :(得分:10)

O(n log n)

考虑一下 - 你正在进行n次操作。

答案 3 :(得分:4)

对于每个m个对象,如果DoSomething()的性能为O(log n),那么所有m个对象的总性能将为O(m log n)。

答案 4 :(得分:1)

由于'for'循环迭代n(比如数组长度为n)次,并且在每次迭代中执行'Dosomething',整体性能将为O(n logn)。

欢呼声