这个函数的大O符号是什么?

时间:2016-12-09 09:04:02

标签: python big-o

 result = 0
 i = 0
 while i < 2**n:
      result = result + i
      i += 1
 # end while

我假设O(2 ^ n)。 Python代码。

2 个答案:

答案 0 :(得分:1)

时间复杂度为O(2 n ×n)。

原因是大小为2 O(n)的数字需要O(n)位来表示为int对象。如果算术运算的结果占用O(n)个位,那么它不可能在O(n)个时间之内完成,因为Python的int对象是不可变的。

所以:

  • 加法result = result + i花费O(n)的时间,因为result使用O(n)位。
  • 加法i += 1花费O(n)的时间,因为i使用O(n)位。
  • 出于同样的原因,计算2**n也需要O(n)时间:此运算的结果使用O(n)位。幂运算仅执行O(log n)乘法,但时间由最后的乘法控制,例如2 n / 2 * 2 n / 2 。 / li>
  • 当然,比较i < 2**n花费O(n)时间,因为两个数字都使用O(n)位。

因此,循环迭代O(2 n )次,并在每次迭代中进行O(n)工作,从而得出结果。

答案 1 :(得分:0)

我认为您的代码的时间复杂度为O(2^n log n),因为您计算的2^n2^n次。
a^b可以在O(log b)中为exponentiation by squaring计算,我认为python中的指数算法是O(log n)算法。
因此,时间复杂度为O(2^n log n)