我該怎麼去告訴我的代碼是在O(N)時間(線性時間?)還是O(N^2)時間或其他東西上運行?練習測試在線碼頭點以計算需要很長時間的代碼。Python腳本:如何判斷在O(N)或O(N^2)時間?
據我所知,最好有一個腳本,其中運行所需的時間只與輸入數據的長度成正比(O(N)時間),而且我想知道如果這是我的代碼是什麼這樣做。怎麼能說出代碼的運行速度?
下面我包括了一個我寫的我關心的腳本。它來自練習考試問題,在這個練習題中給你一系列'a'和'b',你將計算迴文。所以如果你給s =「baababa」,有6個迴文:'aa','baab','aba','bab','ababa',&'aba'。
def palindrome(s):
length = len(s)
last = len(s)-1
count = 0
for index, i in enumerate(s):
left=1
right=1
left2=1
right2=1
for j in range(0,index+1): #+1 because exclusive
if index-left2+1>=0 and index+right2<=last and s[index-left2+1]==s[index+right2]:
print s[index-left2+1:index+right2+1] #+1 because exclusive
left2 +=1
right2 +=1
count +=1
elif index-left>=0 and index+right<=last and s[index-left] == s[index+right]:
print s[index-left:index+right+1] #+1 because exclusive
left += 1
right +=1
count += 1
return count
這是O(N)時間嗎?我只遍歷整個列表一次,但有一個更小的循環以及...
對不起,羅馬,我不明白你的圖。請提供簡短的解釋嗎? –
稍微改了一個答案,如果還不夠,我會盡力在後面寫更詳細的解釋 –
謝謝!現在有很多意義! –