當我瞭解到Galil Rule時,我正在實施Boyer-Moore Algorithm用於Python中的子字符串搜索。我在網上查了一下Galil規則,但我沒有發現任何東西,只有幾句話,我無法訪問原始論文。我怎樣才能將其實現到我目前的算法?Boyer-Moore Galil規則
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
- 偏移[a] = 2個
- 偏移並[b] = 5
- 偏移並[c] = 4個
- 偏移並[d] = -1
我發現的幾個句子所說保持跟蹤,當第一在我的內部循環(j,如果內部循環內的if語句爲True)和我開始比較的位置(在我的情況下爲i + j)中發生不匹配。我理解我已經檢查過所有這些指數的直覺,所以我不應該再次進行這些比較。我只是不明白如何連接點並達成實現。
http://thirdworld.nl/on-improving-the-worst-case-running-time-of-the-boyer-moore-string-matching-algorithm –