2012-09-29 11 views
32

Was sind die Hauptunterschiede zwischen dem Suchalgorithmus Knuth-Morris-Pratt und dem Boyer-Moore Suchalgorithmus?Was sind die Hauptunterschiede zwischen den Suchalgorithmen von Knuth-Morris-Pratt und Boyer-Moore?

Ich weiß, KMP sucht nach Y in X, versucht, ein Muster in Y zu definieren, und speichert das Muster in einem Vektor. Ich weiß auch, dass BM besser für kleine Wörter, wie DNA (ACTG) funktioniert.

Was sind die Hauptunterschiede in ihrer Funktionsweise? Welcher ist schneller? Welcher ist weniger computergierig? In welchen Fällen?

+1

BM funktioniert besser auf "natürlichen Text" statt kleine Sätze – gtgaxiola

Antwort

25

Moore's UTexas webpage geht durch beide Algorithmen in einer Schritt-für-Schritt-Mode (er stellt auch verschiedene technische Quellen) :

Nach dem Mann selbst,

Der klassische Boyer-Moore-Algorithmus aus dem Phänomen leidet, dass es so effizient auf kleine Alphabeten, nicht zu arbeiten wie DNA neigt. Der Abstand Abstand neigt dazu, mit der Musterlänge zu wachsen, weil Teilstrings häufig wieder auftreten. Indem man sich mehr an das erinnert, was bereits erreicht hat, kann man größere Überspringungen durch den Text bekommen. Ein kann sogar "perfekten Speicher" anordnen und somit jedes Zeichen unter am häufigsten betrachten, während der Boyer-Moore-Algorithmus, obwohl linear, ein Zeichen mehrmals aus dem Text untersuchen kann. Diese Idee von erinnert mehr in der Literatur von anderen untersucht worden. Es leidet an der Notwendigkeit für sehr große Tabellen oder Zustandsmaschinen.

Allerdings gab es einige modifications of BM, die kleine Alphabet Suche lebensfähig gemacht haben.

27

In einer groben Erklärung

Boyer-Moore Ansatz ist zu versuchen, das letzte Zeichen des Musters paßt anstelle des ersten mit der Annahme, dass, wenn es am Ende nicht überein gibt keine Notwendigkeit, zu versuchen, Spiel am Anfang. Dies ermöglicht eine „große Sprünge“ deshalb BM funktioniert besser, wenn das Muster und der Text „natürliche Text“ (dh Englisch)

Knuth-Morris-Pratt sucht nach Vorkommen eines „Wortes“ ähneln suchen W innerhalb einer Haupt "Textzeichenkette" S, indem die Beobachtung verwendet wird, dass, wenn eine Fehlanpassung auftritt, das Wort selbst ausreichende Information verkörpert, um zu bestimmen, wo die nächste Übereinstimmung beginnen könnte, wodurch eine erneute Untersuchung von zuvor übereinstimmenden Zeichen umgangen wird. (Quelle: Wiki)

Das bedeutet KMP ist besser geeignet für kleine Mengen wie DNA (ACTG)

+0

Ich verstehe nicht, warum es eine Verbesserung wäre, die letzten Zeichen zuerst zu entsprechen. Wenn es fehlschlägt, müssen Sie immer noch um ein einzelnes Zeichen vorwärts gehen, nein? –

+1

@ThomasAhle Hier ist ein Beispiel: Wort: Gitarre Text: Ich liebe Gitarren. Dann versuchst du, das "r" der Gitarre (6. Zeichen) gegen das 6. Zeichen des Textes abzustimmen ... das "e" von "Liebe" ... da sie nicht übereinstimmen ... nicht nötig check gegen "I love", da sie nie ein Match sein werden .. also sprichst du den ganzen Teil ... – gtgaxiola

+0

Richtig, und dann springen Sie, um 'r' vs '' zu überprüfen, aber das bewegte Sie immer noch nur einen Schritt weiter. Wenn du 'g' gegen 'l' gecheckt hättest, hättest du das gleiche Ergebnis gehabt: Nein? –

0

Boyer-Moore-Technik passen die Zeichen von rechts nach links, funktioniert gut auf lange Muster. knuth moris pratt passen die Zeichen von links nach rechts, arbeitet schnell auf kurzen Mustern.