Hier ist das kürzeste Superstring-Problem: Sie erhalten Strings s 1 , ... , s n über einem Alphabet Σ und möchten den kürzesten String über Σ finden , der jedes s i als Folge aufeinanderfolgender Zeichen enthält, dh einen Teilstring.ns1, … , SnΣΣsi
Wenn wir über genaue Algorithmen für das Problem sprechen, entspricht das Ermitteln der Länge der kürzesten Superzeichenfolge dem Ermitteln der maximalen Komprimierung C, die die Summe aller aufeinanderfolgenden Zeichenfolgenüberlappungen in der letzten Superzeichenfolge ist, dh C = ∑ i | s i | - L .LCC=∑i|si|−L
Soweit ich weiß, läuft der schnellste exakte Algorithmus für den kürzesten Superstring in ( 2 n ), wobei n die Anzahl der Strings ist. Dies ist ein einfacher dynamischer Programmieralgorithmus, der dem dynamischen Programmieralgorithmus für den längsten Pfad (und andere Probleme) ähnelt:O∗2nn
Für jede Teilmenge der Zeichenfolgen und der Zeichenfolge v in S berechnen wir die maximale Komprimierung für alle Superzeichenfolgen über S, wobei v die erste Zeichenfolge ist, die in der Superzeichenfolge erscheint, und speichern diese als C (( v , S )). Wir tun dies, indem wir zuerst alle Teilmengen mit nur einem Element verarbeiten und dann die C (( v , S )) - Werte für Teilmengen S auf k Zeichenfolgen aus denen auf k - 1 Zeichenfolgen aufbauen . Speziell:SvSSvv,Sv,SSkk−1
uS′k−1uu,u∪S′vS′uvv,S′
n22n+n2ll
l2n