我将如何判断我的代码是否在 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) 时间吗?我只遍历整个列表一次,但也有一个较小的循环......