以下情况的最坏情况时间复杂度是什么:
def fun(n):
count=0
i=n
while i>0:
for j in range(0,i):
count+=1
i/=2
return count
答案 0 :(得分:0)
如果n是一个非常大的整数,则情况时间复杂度最差。
O(log(n)* n)(猜测)。
以下是我的结论。
while i>0:
...
i/=2
这将运行log(n)次,因为它每次运行时都会减半。
for j in range(0,i):
这将首先运行n次,第二次运行n / 2次,依此类推。因此,该行的总运行时间为n + n / 2 + n / 4 .... 1 =(2n-1)
count+=1
这是一个便宜的操作,所以是O(1)。
因此,如果n是整数,则使该函数的总运行时间 O(log(n))* O(2n-1)。简化变为 O(log(n)*(n))。