Aho-Corasick Schnur, die Algorithmus vergleicht

In der Informatik ist die Aho-Corasick-Schnur, die Algorithmus vergleicht, ein Schnur-Suche-Algorithmus, der von Alfred V. Aho und Margaret J. Corasick erfunden ist. Es ist eine Art Wörterbuch vergleichender Algorithmus, der Elemente eines begrenzten Satzes von Schnuren (das "Wörterbuch") innerhalb eines Eingangstextes ausfindig macht. Es vergleicht alle Muster gleichzeitig. Die Kompliziertheit des Algorithmus ist in der Länge der Muster plus die Länge des gesuchten Textes plus die Zahl von Produktionsmatchs geradlinig. Bemerken Sie, dass, weil alle Matchs gefunden werden, es eine quadratische Zahl von Matchs geben kann, wenn jede Teilkette zusammenpasst (z.B Wörterbuch =, und Eingangsschnur ist).

Informell baut der Algorithmus eine Zustandsmaschine, die einem trie mit zusätzlichen Verbindungen zwischen den verschiedenen inneren Knoten ähnelt. Diese inneren Extraverbindungen erlauben schnelle Übergänge zwischen erfolglosen Muster-Matchs (z.B eine Suche in einem trie, der nicht enthält, aber enthält, und so am Knoten scheitern würde, der durch vorbefestigt ist), zu anderen Zweigen der trie, die ein allgemeines Präfix teilen (z.B, im vorherigen Fall, könnte ein Zweig dafür der beste seitliche Übergang sein). Das erlaubt den Automaten dem Übergang zwischen Muster-Matchs ohne das Bedürfnis nach dem Zurückverfolgen.

Wenn das Muster-Wörterbuch im Voraus bekannt ist (z.B eine Computervirus-Datenbank), kann der Aufbau des Automaten einmal offline und der kompilierte für den späteren Gebrauch versorgte Automat durchgeführt werden. In diesem Fall ist seine Durchlaufzeit in der Länge des Eingangs plus die Zahl von verglichenen Einträgen geradlinig.

Die Aho-Corasick-Schnur, die Algorithmus vergleicht, hat sich geformt die Basis ursprünglichen Unix befehlen fgrep.

Der folgende ist die Aho-Corasick Datenstruktur, die aus dem angegebenen Wörterbuch mit jeder Reihe im Tisch gebaut ist, der einen Knoten im trie mit dem Säulenpfad vertritt, der die (einzigartige) Folge von Charakteren von der Wurzel bis den Knoten anzeigt.

An jedem Schritt wird der aktuelle Knoten durch die Entdeckung seines Kindes, erweitert

und wenn das nicht besteht, das Kind seiner Nachsilbe, und wenn findend

das arbeitet nicht, das Kind der Nachsilbe seiner Nachsilbe, schließlich findend

das Ende im Wurzelknoten, wenn nichts vorher gesehen wird.

Die Ausführung auf der Eingangsschnur gibt die folgenden Schritte nach:

Im Allgemeinen kann mehr als eine Wörterbuch-Nachsilbe-Verbindung zu brauchen

werde gefolgt, weil mehr als ein Lexikoneintrag an einem enden kann

gegebener Charakter im Eingang.

Siehe auch

  • fgrep
  • (Der Zugang zum vollen Text kann beschränkt werden.)

Links


Universität von Radford / CSS Mörderwal
Impressum & Datenschutz