特定のi(LPS配列のセル)に対してkmp algorithmcomputeLPSArray
フェーズを何度もバックトラック(以下のコメントを参照)する必要がある例を構築しようとしています。 。KMPアルゴリズムが複数回バックトラックする必要がある場合の例を構築する
'AAACAAA'
のために、それはあなたが私はそれが特定のi
のためにバックトラックセクション3-4回を訪問する文字列を構築助けることができる二回i = 3
ため、一度i = 7
のためのバックトラックセクションを訪問しますか? 'AAAACAA'
で
def computeLPSArray(pat, M, lps):
len = 0 # length of the previous longest prefix suffix
lps[0]=0 # lps[0] is always 0
i = 1
while i < M:
if pat[i]==pat[len]:
len+=1
lps[i] = len
i+=1
else:
if len!=0:
# backtrack section - When will we get here 3-4 times for the same i???
len = lps[len-1]
else:
lps[i] = 0
i+=1
大変です。バックトラックが数回起こるがlenが0にならない例を作る方法を教えてもらえますか? (私はここで多くのことを尋ねていることは分かっていますが、私はこのアルゴリズムの周りを頭で覆い、例を探して明確にすることはできません)。ありがとう!! – ihadanny
@hadanny: '' ABAABABAABABAABABAABAAA''では 'i = 21'で3回バックトラックしますが、lenは0ではなく3になります(16から始まり、11に戻って6、そして3)。 'pat [3]'は 'A 'で、' pat [21] 'と一致しているので、3で始まります。 – Kundor