我想找出下面算法的时间复杂度
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)
?
我想找出下面算法的时间复杂度
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)
?
ceiling{ log(n^n/n!) } - 1
次。没有关于此的大O符号说明。 - Da MikeΘ(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
for i in range(1,n)
更改为 for i in range(1,n+1)
。因为如果我没记错的话,range(1, n)
会给出 [1, 2, 3, .. n-1]
。 - Da Mike
O(log(n-i))
пјҢеҰӮжһңдҪ жІЎжңүиҜҙи§ЈеҶіж–№жЎҲжҳҜO(n)
пјҢжҲ‘зҡ„第дёҖдёӘжғіжі•е°ұжҳҜO(n*log(n))
гҖӮ - KeiwanO(log(n/i))
,而不是O(log(n-i))
。 - user2357112