Wir finden 8; dies ist keine Übereinstimmung. Daher wird das Muster nicht im Text angezeigt. Wir mussten nur 2 Zeichen aus dem Text sehen. Wenn du findest, dass Y nicht mit B übereinstimmt, was sind die nächsten beiden Charaktere, die du vergleichen würdest? Wenn Sie diese Schritte wiederholt haben, wie viele Vergleiche würden Sie machen, bevor Sie die gesamte Zeichenfolge abgedeckt haben? Wie viele Vergleiche würden Sie mit dem “Brute-Force”-Ansatz anstellen? Fall 3: Das Zeichen ist kein Platzhalterzeichen Wenn das aktuelle Zeichen in Text mit dem aktuellen Zeichen in Pattern übereinstimmt, bewegen wir uns zum nächsten Zeichen im Muster und Text. Wenn sie nicht übereinstimmen, stimmen Platzhaltermuster und Text nicht überein. Dies ist keine Übereinstimmung, also wissen wir, dass es keinen Sinn hat, ABC mit den ersten 3 Zeichen zu überstimmen. Wir wissen auch (nach linearer Zeitvorverarbeitung), dass das Zeichen, das wir finden, 4, überhaupt nicht im Muster erscheint, so dass die frühestmögliche Übereinstimmung, die wir finden können, an der nächsten Position beginnen muss, d.h. 5. Zeichen. Betrachten Sie als extremes Beispiel, ob wir das Muster ABCD im Text 12345678 finden müssen. Dies ist die Übung in “Einführung in das Design und die Analyse von Algorithmen”. Es ist ein String-Matching-Problem.

Angenommen, ich habe String-ABCD und ein Muster XY. Und möchten sie sehen, ob die Zeichenfolge das Muster enthält. Das Platzhaltermuster kann die Zeichen `?` und `*` `?` enthalten – entspricht jedem einzelnen Zeichen `*` – Entspricht jeder Folge von Zeichen (einschließlich der leeren Sequenz) Wir können Dynamische Programmierung verwenden, um dieses Problem zu lösen – Lassen Sie T[i][j] wahr sein, wenn die ersten i Zeichen in einer bestimmten Zeichenfolge mit den ersten j Zeichen des Musters übereinstimmen. Implementieren Sie bei einem Text und einem Platzhaltermuster einen Platzhaltermusterabgleichsalgorithmus, der findet, ob das Platzhaltermuster mit Text übereinstimmt. Der Abgleich sollte den gesamten Text (nicht Denparttext) abdecken. Dies ist eine wichtige Charakteristika des Boyer-Moore-Algorithmus: Für einen Text der Länge N und ein festes Muster der Länge M ist die Durchschnittsleistung N/M-Vergleich. Das heißt, vielleicht etwas kontraintuitiv auf den ersten, je länger das Muster, das wir suchen, desto schneller können wir es in der Regel finden. Jedes Vorkommen von `?`-Zeichen im Platzhaltermuster kann durch ein anderes Zeichen und jedes Vorkommen von `*` mit einer Folge von Zeichen ersetzt werden, sodass das Platzhaltermuster nach dem Ersetzen mit der Eingabezeichenfolge identisch wird. Die frühestmögliche Übereinstimmung beginnt natürlich am Anfang des Textes. Wir versuchen, das Muster rückwärts zu entsprechen, so dass wir sehen, ob wir D mit dem 4. Zeichen des Textes übereinstimmen können.