Ich implementierte die Boyer-Moore Algorithm für Teilstringsuche in Python, als ich über die Galil Rule erfuhr. Ich habe mich online nach der Galil-Regel umgeschaut, aber ich habe nicht mehr als ein paar Sätze gefunden, und ich bekomme keinen Zugang zu der Originalarbeit. Wie kann ich dies in meinen aktuellen Algorithmus implementieren?Boyer-Moore Galil Regel
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
Hinweise:
- Offsets [c] = -1, wenn c nicht in dem Muster
- Offsets [c] = letzten Index von c im Muster
Beispiel: aaabcb
- Offsets [a] = 2
- Offsets [b] = 5
- Offsets [c] = 4
- Offsets [d] = -1
Die wenigen Sätze ich gefunden habe, haben gesagt, im Auge zu behalten, wenn das erste Mismatch tritt in meiner inneren Schleife auf (j, wenn die if-Anweisung in der inneren Schleife True ist) und in der Position, in der ich die Vergleiche gestartet habe (i + j, in meinem Fall). Ich verstehe die Intuition, dass ich bereits alle Indizes zwischen diesen überprüft habe, also sollte ich diese Vergleiche nicht noch einmal machen müssen. Ich verstehe einfach nicht, wie man die Punkte verbindet und zu einer Implementierung gelangt.
http://thirdworld.nl/on-improving-the-worst-case-running-time-of-the-boyer-moore-string-matching-algorithm –