Wolfgang Hönig WS 09/10
Übung Algorithmen und Datenstrukturen
Folie Knuth-Morris-Pratt
1 [Algo] KMP (Verschiebetabelle)
1. Tab[0] = -1
2. für jeden weiteren Eintrag i einer der folgenden Fälle:
a) kein neuer und kein laufender Zyklus: Tab[i]=0 b) laufender (längster) Zyklus:
• alten zugehörigen Wert übernehmen
• Zykluslänge hochzählen
c) Abbruch laufender (längster) Zyklus:
• Tab[i] = Zykluslänge
• hat neuer (längster) Zyklus begonnen?
d) neuer Zyklus (Pattern[0]==Pattern[i])
• Tab[i] = Tab[0] = -1
• Zykluslänge = 1
2 Bemerkungen
• Tab[i]: Bei Unstimmigkeit an Patternposition i, verschiebe das Pattern soweit, dass die Patternposition Tab[i] auf der aktuellen Textposition steht.
• Komplexität: O(n+m) (n . . . Länge Pattern, m . . . Länge Text)