Ich lese über Tries
allgemein als Präfixbäume und Suffix Trees
.
Obwohl ich Code für a gefunden Trie
habe, kann ich kein Beispiel für a finden Suffix Tree
. Ich habe auch das Gefühl, dass der Code, der a erstellt, Trie
der gleiche ist wie der für a, Suffix Tree
mit dem einzigen Unterschied, dass wir im ersteren Fall Präfixe speichern, im letzteren jedoch Suffixe.
Ist das wahr? Kann mir jemand helfen, das in meinem Kopf zu klären? Ein Beispielcode wäre eine große Hilfe!
algorithm
data-structures
trie
suffix-tree
Cratylus
quelle
quelle
Antworten:
Ein Suffixbaum kann als Datenstruktur angesehen werden, die auf einem Trie aufgebaut ist. Statt nur die Zeichenfolge selbst in die Trie einzufügen, würden Sie auch jedes mögliche Suffix dieser Zeichenfolge hinzufügen. Wenn Sie beispielsweise die String- Banane in einem Suffix-Baum indizieren möchten, erstellen Sie einen Trie mit den folgenden Strings:
Sobald dies erledigt ist, können Sie nach einem beliebigen n-Gramm suchen und prüfen, ob es in Ihrer indizierten Zeichenfolge vorhanden ist. Mit anderen Worten, die n-Gramm-Suche ist eine Präfixsuche aller möglichen Suffixe Ihrer Zeichenfolge.
Dies ist der einfachste und langsamste Weg, einen Suffixbaum zu erstellen. Es stellt sich heraus, dass es viele schickere Varianten dieser Datenstruktur gibt, die entweder den Raum oder die Bauzeit verbessern. Ich bin in diesem Bereich nicht gut genug versiert, um einen Überblick zu geben, aber Sie können zunächst Suffix-Arrays oder erweiterte Datenstrukturen dieser Klasse untersuchen (Vorlesung 16 und 18).
Diese Antwort macht auch einen wunderbaren Job und erklärt eine Variante dieser Datenstruktur.
quelle
Wenn Sie sich einen Trie vorstellen, in den Sie die Suffixe eines Wortes einfügen, können Sie ihn sehr einfach nach den Teilzeichenfolgen des Strings abfragen. Dies ist die Hauptidee hinter dem Suffixbaum, es ist im Grunde ein "Suffix-Versuch".
Bei Verwendung dieses naiven Ansatzes wäre das Erstellen dieses Baums für eine Zeichenfolge der Größe n O (n ^ 2) und würde viel Speicherplatz beanspruchen.
Da alle Einträge dieses Baums Suffixe derselben Zeichenfolge sind, teilen sie viele Informationen, sodass es optimierte Algorithmen gibt, mit denen Sie sie effizienter erstellen können. Mit dem Ukkonen-Algorithmus können Sie beispielsweise online einen Suffixbaum in O (n) -Zeitkomplexität erstellen.
quelle
Der Unterschied ist sehr einfach. Ein Suffixbaum hat weniger "Dummy" -Knoten als das Suffix trie. Diese Dummy-Knoten sind einzelne Zeichen, die die Suchoperation im Baum erhöhen
quelle
Tries Knoten haben Links zu einem kürzeren Kontext, 'Tree' hat ihn nicht. Wenn die Knoten von Tree eine Verknüpfung zu einem kürzeren Kontext erhalten, wird Trie; o)
quelle