web-dev-qa-db-fra.com

Superstring commun le plus court: Trouver une chaîne la plus courte contenant toutes les fragments de chaîne donnés

Compte tenu des fragments de chaîne, je voudrais trouver la chaîne unique la plus courte possible ("chaîne de sortie") contenant 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é fabriqué par naive ajoutée:

BCDAAGFABC

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

ABCDAGF
^
ABC
 ^
 BCDA
    ^ 
    AGF

Je cherche 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 le plus court. Je recherche un algorithme de mieux que l'évideur naïfe qui essaierait d'ajouter toutes les permutations des fragments d'entrée et de supprimer des chevauchements (qui sembleraient être NP-complètes).

J'ai commencé à travailler sur une solution et cela se révèle assez intéressant; J'aimerais voir ce que d'autres personnes pourraient venir avec. Je vais ajouter mon travail en cours à cette question depuis un moment.

12
occulus

Ce que vous demandez est le problème de dépassement commun le plus court, pour lequel aucun algorithme ne fonctionne pour tous les cas. Mais c'est un problème courant (dans la compression et le séquençage de l'ADN) et plusieurs algorithmes d'approximation sont bien connus.

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

Avoir une lecture du papier algorithmes d'approximation pour le problème de superstrage commun le plus court de Jonathan Turner pour plus d'informations.

14
pdr