私のコードが O(N) 時間 (線形時間?) または O(N^2) 時間またはその他の時間で実行されるかどうかをどのように判断しますか? 演習では、計算に時間がかかるコードのオンライン ドック ポイントをテストします。
実行にかかる時間が入力データの長さにのみ比例するスクリプト ( O(N) time ) を用意するのが最善であることを理解しています。また、コードの実行速度をどのように判断できますか?
以下に、私が書いた、私が懸念しているスクリプトを含めます。これは、一連の「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) 時間ですか? リスト全体を1回だけループしますが、小さなループもあります...