Il problema di sottostringa comune più lungo secondo wiki può essere risolto utilizzando un albero di suffisso.
Da wiki:Come trovare la sottostringa comune più lunga usando gli alberi?
Le lunghe stringhe comuni di un insieme di stringhe possono essere trovati da costruzione di un albero suffisso generalizzato per le corde, e poi trovare più profondi nodi interni che hanno nodi foglia da tutte le stringhe nella sottostruttura di sotto di essa
non ottengo questo.
Esempio: se devo:
ABCDE
e XABCZ
poi l'albero suffisso è (alcuni rami da XABCZ
omessi per motivi di spazio):
La più lunga sottostringa comune è ABC
ma non è che posso non vedere come la descrizione di wiki aiuta qui.
ABC
non è il nodo interno più profondo con nodi foglia.
Qualche aiuto per capire come funziona?
'ABC non è il nodo interno più profondo con nodi foglia. No, ma ABC * è * la più lunga * comune * stringa di nodi in qualsiasi punto dell'albero. I successivi più lunghi sono 'B-C' e' D-E', con due nodi ciascuno. –
Sì 'ABC' è la stringa più lunga comune. Ma non capisco come la descrizione del wiki possa effettivamente aiutarmi a trovarlo a livello di programmazione – Cratylus
Devi leggere l'altro Wiki: http://en.wikipedia.org/wiki/Generalised_suffix_tree. Probabilmente ci sono delle risorse migliori (più facilmente comprensibili) [qui] (https://www.google.com/search?q=generalized+suffix+tree). Vedi anche http: // StackOverflow.it/questions/969448/generalised-suffix-tree-java-implementation –