Big-O Sigma表示法

时间:2014-07-09 21:32:56

标签: big-o complexity-theory time-complexity

如果someWork(..)完成i次操作,此循环的Big-O是多少?随着someWork(..)增加,算法 i会更有效。如何用sigma表示法表示解决方案?

i <--2
while (i < n)
   someWork (..)
   i <-- power (i,2)
done

首先,i <-- power (i,2) O(log n)someWork (..)似乎也是O(log n),因为随着i的增加,它会更有效。将这两种复杂性相乘以获得O((log n)²)。确认?

1 个答案:

答案 0 :(得分:3)

在循环的每一轮中,2的指数将加倍。因此,在k周期内,数字i将为22k。 只要22k < n成立,循环就会继续,这相当于
k < log log n。确切地说它是log₂ log₂ n,但是由于所有logarthms对于常数因子都是相等的,所以我只写log log n

如果someWork()O(22k)轮次中进行了k次操作,您将获得完全复杂的

O( 2 + 22 + 222 + 223 + ... + 22log log n ) 

这简化为O(2 ⋅ 22log log n ) = O(n)

要查看简化,请查看以下内容:
数字2 + 2² + 2⁴ + 2⁸可以二进制形式写成 100 010 110。所以你可以看到

2 + 221 + 222 + ... + 22k < 2 ⋅ 22k

成立,因为它等于100 010 110 < 1 000 000 000

修改
enter image description here