2017-10-04 4 views
0

J'ai été chargé d'identifier un algorithme efficace [O (n * log (n))] qui, étant donné un ensemble de k Chaînes S = {s-1, s-2, s- 3, ..., sk}, identifiera la plus longue sous-chaîne T pour chaque paire de chaînes (si, sj), telle que T est un suffixe de si et un préfixe de sj, ainsi que la plus longue sous-chaîne T pour chaque paire de cordes (sj, si). n représente les longueurs ajoutées de toutes les k chaînes (n = | s-1 | + | s-2 | + | s-3 | + ... + | s-k |).Algorithme de chevauchement de suffixe-préfixe le plus long

Des pensées? Un lien vers une solution serait bien aussi. Merci d'avance!

+0

La question est vague. la plus longue sous-chaîne du suffixe «Si» et le préfixe «Sj» est l'ensemble de «Si + Sj». Parlons-nous de la plus longue sous-chaîne commune/peu commune? – thebenman

+1

Qu'est ce que le 'n' dans O (log n)? Voulez-vous dire 'k'? Le nombre total de caractères dans toutes les chaînes? Quoi qu'il en soit, le temps logarithmique semble incroyablement optimiste pour un algorithme qui produit des chaînes de résultats k². Avez-vous voulu dire O (n log n)? Précisez s'il vous plaît. – rici

+0

@thebenman: L'objectif est pour la plus longue sous-chaîne qui apparaît dans String Si comme un suffixe AND String Sj comme préfixe. – SupposedlySleeping

Répondre

0

algorithme 4.10 à la page 61 du livre Algorithmic Aspects of Bioinformatics donne une méthode de calcul de la plus longue chaîne commune d'un ensemble de chaînes données en utilisant des arbres suffixe

computing the longest common substring of a set of given strings using suffix trees

L'article explique également comment trouver la sous-chaîne la plus longue commune est possible

en temps linéaire par rapport à la taille de l'arbre de suffixes, soit dans O (n log n).