Das längste gemeine Teilstring-Problem nach Wiki kann mit einem Suffix-Baum gelöst werden.
Von wiki:Wie finde ich den längsten gemeinsamen Teilstring mit Bäumen?
Die längste gemeinsame Teil eines Satzes von Zeichenketten kann durch Aufbau einer verallgemeinerten Suffix-Baum für die Saiten, und dann finden die tiefsten inneren Knoten gefunden werden, die Blattknoten von allen Saiten im Unterbaum darunter
Ich verstehe das nicht.
Beispiel: wenn ich:
ABCDE
und XABCZ
dann wird der Suffix-Baum ist (einige Zweige von XABCZ
Platzgründen weggelassen):
Die längsten gemeinsamen Teilzeichen ABC
sind, aber es ist nicht kann ich nicht sehen, wie die Beschreibung von Wiki hier hilft.
ABC
ist nicht die tiefsten internen Knoten mit Blattknoten.
Irgendwelche Hilfe, um zu verstehen, wie das funktioniert?
'ABC ist nicht der tiefste interne Knoten mit Blattknoten.' Nein, aber ABC * ist * die längste * gemeinsame * Knotenfolge irgendwo im Baum. Die nächstlängsten sind 'B-C' und' D-E' mit je zwei Knoten. –
Ja 'ABC' ist die längste gemeinsame Zeichenkette. Aber ich verstehe nicht, wie die Wiki-Beschreibung mir helfen würde, sie programmatisch zu finden. – Cratylus
Sie müssen das andere Wiki lesen: http://en.wikipedia.org/wiki/Generalised_suffix_tree. Es gibt wahrscheinlich einige bessere (leichter verständliche) Ressourcen [hier] (https://www.google.com/search?q=generalized+suffix+tree). Siehe auch http: // stackoverflow.com/questions/969448/generalized-suffix-tree-java-implementation –