簡體   English   中英

了解此 python 函數的運行時

[英]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增長(大致)像nn//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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM