result = 0
i = 0
while i < 2**n:
result = result + i
i += 1
# end while
我假设O(2 ^ n)。 Python代码。
答案 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^n
为2^n
次。
a^b
可以在O(log b)
中为exponentiation by squaring计算,我认为python中的指数算法是O(log n)
算法。
因此,时间复杂度为O(2^n log n)
。