N log(N)或N澄清

时间:2014-04-17 19:26:04

标签: performance big-o time-complexity

执行O(log N)算法N次给O(N log(N))?或者是O(N)?

e.g。将N个元素插入自平衡树中。

int i = 0;
while (i++ < N) {
    insert(itemsToInsert[i]);
}

4 个答案:

答案 0 :(得分:3)

绝对是O(N log(N))。它也可以是O(N),如果你可以证明调用序列总数增长得足够慢(因为当一些调用是O(log N)时,其他足够快就足够了,比如O(1),把总数降下来。)

记住:O(f)表示算法不比f更低,但它可以更快(即使只是在某些情况下)。

答案 1 :(得分:1)

N次O(log(N))导致O(N log(N))。

答案 2 :(得分:1)

Big-O表示法表示算法的渐近行为。每个额外步骤的成本为O(log N);我们知道,对于O(N)算法,每个附加步骤的成本为O(1),渐近地,成本函数边界是一条直线。

因此O(N)太低了; O(N log N)似乎是正确的。

答案 3 :(得分:1)

是和否。

微积分真的有帮助。第一次迭代是复杂度log(1),第二次迭代是log(2),&amp; ct直到第N次迭代,即log(N)。而不是将问题视为乘法,而是将其视为一个整体......

enter image description here

这恰好是O(N log(N)),但这有点巧合。