执行O(log N)算法N次给O(N log(N))?或者是O(N)?
e.g。将N个元素插入自平衡树中。
int i = 0;
while (i++ < N) {
insert(itemsToInsert[i]);
}
答案 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)。而不是将问题视为乘法,而是将其视为一个整体......
这恰好是O(N log(N)),但这有点巧合。