我想找到以下算法的时间复杂度
for i=1 to n do
j=i
while j<n do
j=2*j
我做了我的计算,发现T(n) = log(n^n/n!)
。
但正确的答案应该是T(n) = Θ(n)
。
我错了吗?或者也许是log(n^n/n!) = Θ(n)
?
答案 0 :(得分:10)
答案 1 :(得分:2)
答案 2 :(得分:1)
复杂性为Θ(n)
。确切的运行时间是2n
检查出来:
import math
def get_complexity(n):
counter = 0
for i in range(1,n):
j = i
while j < n:
j = 2 * j
counter += 1
print('n: %16d\niterations: %6d\n2n: %14d \n' % (n, counter, 2*n))
for ten in range(1,5):
get_complexity(10 ** ten)
输出:
n: 10
counter: 16
2n: 20
n: 100
counter: 194
2n: 200
n: 1000
counter: 1990
2n: 2000
n: 10000
counter: 19990
2n: 20000
n: 100000
counter: 199988
2n: 200000