我保证这是最后一个大问题
以下循环的大O表示法......
for (int i = n; i > 0; i = i / 2){
for (int j = 0; j < n; j++){
count++;
}
}
for (int k = 0; k < n; k++){
for (int m = 0; m < n; m++){
count++;
}
}
这是我认为的确定。
第一组嵌套循环具有O(n*log2(n))
,第二组嵌套循环为O(n^2)
。添加这些是否正确删除第一个术语?并说整体大O是O(n^2)
?
第二个问题,当为系列循环添加Big O表示法总是正确的,以删除不太重要的术语?
答案 0 :(得分:4)
你的两个问题的答案都是肯定的。你总是删除较小的术语,因为它们由足够大的n
的较大术语控制,并且在进行大O分析时你只关心大n
。
答案 1 :(得分:1)
原因是n*log2(n)
由{/ 1>} n^2
渐近占据主导:对于足够大的n
,|n * log2(n)| < |n^2|
。
如果您不明白为什么这意味着您可以放弃n*log2(n)
字词,请尝试向两边添加n^2
:
n^2 + n*log2(n) < n^2 + n^2
n^2 + n*log2(n) < 2 * n^2
因此,如果我们知道我们可以忽略常数因子k
,我们知道我们可以忽略一个不太重要的术语。