私はGalil Ruleについて学んだときに、Pythonで部分文字列検索のためにBoyer-Moore Algorithmを実装していました。私はガリルルールのためにオンラインを見回しましたが、何種類もの文章が見つかりませんでした。元の論文にアクセスできません。これを現在のアルゴリズムに実装するにはどうすればよいですか?Boyer-Moore Galil Rule
i = 0
while i < (N - M + 1):
skip = 0
for j in reversed(range(0, M)):
if pattern[j] != text[i + j]:
skip = max(1, j - offsets[text[i+j]])
break
if skip == 0:
return i
i += skip
return -1
注
- オフセット[C] = -1 cがパターンにない場合
- オフセットパターン
におけるcの[C] =最後のインデックス例: aaabcb
- offsets [a] = 2つの
- オフセット[B] = 5
- オフセット[C] = 4つの
- オフセット[D] = -1
私は発見したいくつかの文章はときに最初のトラックを維持すると述べています私の内部ループ(内側ループ内のif文がTrueの場合はj)と比較を開始した位置(私の場合はi + j)で不一致が発生します。私はそれらの間のすべての指標を既にチェックしているという直感を理解しているので、再びその比較を行う必要はありません。私はちょうどドットを接続し、実装に到達する方法を理解していない。
http://thirdworld.nl/on-improving-the-worst-case-running-time-of-the-boyer-moore-string-matching-algorithm –