我该怎么去告诉我的代码是在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)时间吗?我只遍历整个列表一次,但有一个更小的循环以及...
对不起,罗马,我不明白你的图。请提供简短的解释吗? –
稍微改了一个答案,如果还不够,我会尽力在后面写更详细的解释 –
谢谢!现在有很多意义! –