Voici le problème de super chaîne le plus court: on vous donne chaînes s 1 , … , s n sur un alphabet Σ et vous voulez trouver la chaîne la plus courte sur Σ qui contient chaque s i comme sous-séquence de caractères consécutifs, c'est-à-dire une sous-chaîne.ns1,…,snΣΣsi
Lorsque nous parlons d'algorithmes exacts pour le problème, trouver la longueur de la chaîne la plus courte équivaut à trouver la compression maximale C qui est la somme de tous les chevauchements de chaînes consécutifs dans la chaîne supérieure, c'est-à-dire C = ∑ i | s i | - L .LCC=∑i|si|−L
Autant que je sache, l'algorithme exact le plus rapide pour les supercordes les plus courtes s'exécute dans ( 2 n ) où n est le nombre de chaînes. Il s'agit d'un algorithme de programmation dynamique simple similaire à l'algorithme de programmation dynamique pour le chemin le plus long (et d'autres problèmes):O∗2nn
Pour chaque sous-ensemble de chaînes et chaîne v dans S, nous calculons la compression maximale sur toutes les super- chaînes sur S où v est la première chaîne apparaissant dans la super-chaîne, la stockant sous la forme C (( v , S )). Pour ce faire, nous traitons d'abord tous les sous-ensembles avec un seul élément, puis nous construisons les valeurs C (( v , S )) pour les sous-ensembles S sur k chaînes à partir de celles sur k - 1 chaînes. Plus précisément:SvSSvv,Sv,SSkk−1
Pour chaque chaîne nous examinons tous les sous-ensembles S ′ sur k - 1 chaînes qui n'incluent pas u et fixons la valeur pour ( u , u ∪ S ′ ) au maximum sur les chaînes v dans S ′ de la somme du maximum chevauchement de u avec v avec C (( v , S ′ )).uS′k−1uu,u∪S′vS′uvv,S′
L'exécution finale n'est pas supérieure à O ( ) où l est la longueur de chaîne maximale.n22n+n2ll
Il y a de meilleurs algorithmes si vous supposez que est petit, ou que les chevauchements par paire sont petits, la taille de l'alphabet est petite, etc., mais je ne connais aucun algorithme plus rapide que 2 n .l2n