Können Sie mir die Idee hinter dem String-Matching-Algorithmus von Knuth-Morris-Pratt erzählen?
user
Der Knuth-Morris-Pratt-Algorithmus (KMP) ist ein String-Matching-Algorithmus, der nach Vorkommen eines Musterstrings in einem Textstring in linearer Zeit sucht, d.h. `O(n)`, wobei `n` die Länge des Textstrings ist. Der Algorithmus wurde von Donald Knuth und Vaughan Pratt entwickelt und später von James Morris modifiziert. Grundidee hinter dem KMP-Algorithmus ist es, die Informationen über den Musterstring zu verwenden, der bereits abgestimmt wurde, um unnötige Rückverfolgung in der Textstring zu vermeiden. Insbesondere baut der Algorithmus eine Teilmatchtabelle (auch Fehlerfunktion oder Prefix-Funktion genannt), die für jede Position in der Musterstring die Länge des längsten korrekten Suffixs anzeigt, das auch ein Präfix der Substring-Endung an dieser Position ist. Diese Tabelle erlaubt es dem Algorithmus, bestimmte Positionen in der Textstring zu überspringen, die möglicherweise nicht mit dem Musterstring übereinstimmen, basierend auf die bereits gefundenen Zeichen. Wenn eine Fehlanpassung an einer bestimmten Stelle im Musterstring auftritt, verwendet der Algorithmus die Informationen in der Teilstringtabelle, um die String-Tabelle zu bestimmen, um die String-Position als nächstes zu starten, ohne das Mustermuster.
assistant
Beinhaltet der Knuth-Morris-Pratt-Algorithmus einen Vorverarbeitungsschritt, um diese "partial matching"-Tabelle zu machen? Auch ist der Name ein bisschen mundvoll, gibt es alternative Namen für den gleichen Algorithmus?
user
Ja, der Knuth-Morris-Pratt-Algorithmus (KMP) beinhaltet einen Vorverarbeitungsschritt zur Berechnung der partiellen Übereinstimmungstabelle, die ein Array ist, das die Längen der längsten korrekten Suffixe jedes Präfixs des Musters speichert. Der KMP-Algorithmus wird manchmal als der Knuth-Morris-Pratt-Powell-Algorithmus bezeichnet, wie er unabhängig von James H. Morris und Vaughan Pratt entdeckt und später von Donald Knuth vereinfacht und veröffentlicht wurde. Der Algorithmus wird manchmal auch der "MP"-Algorithmus nach Morris und Pratt genannt.
assistant