繁体   English   中英

大 O 符号(算法)

[英]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) (从n0 )。 因此,它也在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM