[英]Understanding runtime of this python function
def loopy_loop(n):
for i in range(n):
for j in range(i):
if j*j > i:
break
其中 n 是一個正整數。
假設我取 n=10
外循環肯定會運行 n 次(n=10 次) 內循環將根據這些值運行。
n = 0,內循環運行0次
n=1,內循環運行一次
n=2,內循環運行3次
n=3,內循環運行4次(直到j=3,並且9>3)
n=4,內循環也運行4次
依此類推,直到 n=9,它將運行 5 次
我很難將所有內容放在一起以使用大 O 表示法來表達運行時。 是否有一套算法可以幫助我處理這個特定的代碼片段?
外循環運行n
次。
內部循環運行sqrt(i)
次(因為當給定i
時,它會在j**2
達到i
時停止)但i
增長(大致)像n
( n//2
平均值)
復雜性是O(n**1.5)
n
次平方根n
)
更准確的估計:
def loopy_loop(n):
counter=0
for i in range(n):
for j in range(i):
counter+=1
if j*j > i:
break
return counter,int((n)*(n//2)**0.5)
print(loopy_loop(5))
print(loopy_loop(10))
print(loopy_loop(100))
print(loopy_loop(1000))
print(loopy_loop(15000))
結果(計數與估計):
(10, 7)
(31, 22)
(810, 707)
(22579, 22360)
(1247250, 1299038)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.