与えられた文字列が回文かどうかをチェックする最も効率的な方法を見つけようとしています。
まず、私はオーダーO(N)のランニングタイムを持つブルートフォースを試みました。次に、nの代わりにn/2の比較だけを行うことで、コードを少し最適化しました。ここPythonの低レベルと高水準のパフォーマンス(回文関数の実行時間解析)
コードである:
def palindrome(a):
length=len(a)
iterator=0
while iterator <= length/2:
if a[iterator]==a[length-iterator-1]:
iterator+=1
else:
return False
return True
これは強引に比べて半分の時間を要するが、それは、(N)Oを注文依然としてあります。
一方、私はスライス演算子を使用する解も考えました。ここ
はコードです:
def palindrome_py(a):
return a==a[::-1]
それから私は、両方の時間分析を実行しました。私が使用したコードはここにアクセスすることができ Running time
Length of string used is 50
Length multiplier indicates length of new string(50*multiplier)
Running time for 100000 iterations
For palindrome For palindrome_py Length Multiplier
0.6559998989 0.5309998989 1
1.2970001698 0.5939998627 2
3.5149998665 0.7820000648 3
13.4249999523 1.5310001373 4
65.5319998264 5.2660000324 5
は今、私はスライス演算子(palindrome_py)の時間を実行している間に差がある理由を知りたいと回文ここでの結果でありますなぜ私はこのタイプのランニングタイムを取得していますか?
なぜスライス演算子が回文関数と比較して効率が良いのですか?舞台裏で何が起こっていますか?
私の所見: 実行時間は乗数に比例します。 case(n-1)の実行時間を乗算することにより、乗数が2のときの走行時間を得ることができる。 (n)は、乗算、我々は(N-1)*乗数に(n)の上映時間=時間を走らie.2
一般化することによって、この場合の第一
大きな説明! +1 –
@EliKorvigo逆アセンブラとバイトコードの詳細を知ることができるリンクを教えてください。 – Divyanshu
@Divyanshu確かに、[dis](https://docs.python.org/2/library/dis.html)のドキュメントはこちらです。 –