快速算法复杂度计算

时间:2015-10-14 13:42:44

标签: algorithm big-o

我熟悉Big O的东西,并且通常知道如何使用关键部分来计算复杂性。这个给了我一些作品,所以我喜欢一个答案和一个小解释:

i = 1;
while(i<= n){
   if(i%2 == 0)(
   System.out.println(i);
   }
   i++;
}

根据我的理解,if的主体将运行n / 2次,因为只有偶数我会打印出来。整体复杂性如此: 1+(n / 2)使得大O O(n)?`

3 个答案:

答案 0 :(得分:1)

总体复杂度为n + n / 2 *(System.out.println(i);的复杂度)。在这种情况下,我认为你可以假设调用System.out.println的复杂性是不变的,因此总体复杂度是O(N)。值得注意的是,你不能忽视迭代的复杂性。

答案 1 :(得分:0)

整体复杂性仍然是O(n),因为检查i%2的值并递增i它仍然算作工作。执行if次的n/2语句的正文只会增加额外的O(n)工作量。

答案 2 :(得分:0)

您误解了代码的 body 究竟是什么(而不是循环体)。这是代码的主体(/ loop):

if (i%2 == 0) {
   System.out.println(i);
}
i++;

即使if条件失败的一半时间,此正文也会被执行 n 次。