Big O表示法,添加不同意义的循环

时间:2013-01-25 03:16:05

标签: java loops big-o nested-loops

我保证这是最后一个大问题

以下循环的大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表示法总是正确的,以删除不太重要的术语?

2 个答案:

答案 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,我们知道我们可以忽略一个不太重要的术语。