如果我有以下代码:
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)的整体性能?
答案 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)。
欢呼声