[英]Big O notation (Algorithms)
嗨,我是 Big O Notation 的新手,如果有人可以向我解释如何解决,则无法为以下指定大 O
int sum=1;
for(int count=n; count>0; count/=2) {
sum=sum*count;
}
由于每次count
除以 2,它将是Theta(log n)
(从n
到0
)。 因此,它也在O(log(n))
中。
在第一行,代码将运行一次,因此对于它,复杂度为 O(1)。 在第二行中,for 循环将运行直到 count > 0,我们可以看到每次循环运行时它将被除以 2,因此它将持续无限次。 所以基本上,你不能在无限循环上应用大 O 表示法。 因此,您也不能将大 O 应用于循环内的代码。 所以如果存在任何 O(infinite) 那么它可能是一个答案,但它不会存在。 因此,除非 n<=0,否则您无法定义时间复杂度。 如果 n<=0,那么只有代码会运行一次,复杂度为 O(1)。
每次迭代计数减半。 如果n = 64
:
step1 => count = 64
step2 => count = 32
step3 => count = 16
...
因此,其最坏情况的时间复杂度为O(log n)
。
但是,在这种情况下,您的循环主体具有恒定数量的操作,因此,最佳、最差和平均情况是相同的,并且:
Ω(log n) = Θ(log n) = O(log n)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.