Superstring commune la plus courte: recherchez la chaîne la plus courte qui contient tous les fragments de chaîne donnés

12

Étant donné certains fragments de chaîne, je voudrais trouver la chaîne unique la plus courte possible ("chaîne de sortie") qui contient tous les fragments. Les fragments peuvent se chevaucher dans la chaîne de sortie.

Exemple:

Pour les fragments de chaîne:

BCDA
AGF
ABC

La chaîne de sortie suivante contient tous les fragments et a été créée par ajout naïf:

BCDAAGFABC

Cependant, cette chaîne de sortie est meilleure (plus courte), car elle utilise des chevauchements:

ABCDAGF
^
ABC
 ^
 BCDA
    ^ 
    AGF

Je recherche des algorithmes pour ce problème. Il n'est pas absolument important de trouver la chaîne de sortie strictement la plus courte, mais plus elle est courte, mieux c'est. Je cherche un algorithme meilleur que celui naïf évident qui essaierait d'ajouter toutes les permutations des fragments d'entrée et de supprimer les chevauchements (qui semblerait être NP-Complete).

J'ai commencé à travailler sur une solution et cela s'avère assez intéressant; J'aimerais voir ce que les autres pourraient trouver. J'ajouterai mon travail en cours à cette question dans un moment.

occulus
la source
3
Le problème semble être NP-complet. Si c'est le cas, vous ne pourrez pas du tout trouver d'algorithme polynomial pour déterminer la chaîne la plus courte, mais il pourrait y avoir des algorithmes polynomiaux qui donnent des solutions approximatives (pas les plus courtes possibles).
superM
3
Ce billet de blog concernant NP-Complete est sympa: codinghorror.com/blog/2008/11/…
occulus
Le blog est vraiment sympa, je le lis tout le temps)))
superM
@superM c'est assez similaire à un voyageur de commerce (chaque chaîne une ville et le coût entre les villes = un certain nombre de chevauchements)
freaket freak
@ratchet freak, c'est _ vous pourriez donner un petit coût entre les villes si elles ont plus de lettres communes, et le plus grand coût quand elles n'ont pas de lettre commune du tout
superM

Réponses:

14

Ce que vous demandez, c'est le problème de Superstring Common le plus court, pour lequel il n'y a pas d'algorithme qui fonctionne pour tous les cas. Mais c'est un problème courant (en compression et séquençage d'ADN) et plusieurs algorithmes d'approximation sont bien connus.

Les algorithmes "gourmands" sont généralement considérés comme les plus efficaces (comme dans le cas, ils ont le pire des cas le moins mauvais).

Lisez l'article sur les algorithmes d'approximation pour le problème de chaîne le plus court commun par Jonathan Turner pour beaucoup plus d'informations.

pdr
la source
Hmm, notez que le premier lien dans mon commentaire juste au-dessus adresse les superséquences et non les supercordes! Une super-séquence ne semble pas exiger que tous les caractères d'une séquence soient contigus.
occulus
Votre lien est mort.
Majid