我熟悉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)?`
答案 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 次。