Hauptseminar Pattern Matching und Textalgorithmen Ausarbeitung zum Thema Shortest Common Superstrings − NP−Vollständigkeit erarbeitet bis 24.01.2003 von Stefan Wasner Inhaltsverzeichnis 1. Die Definition von Shortest Common Superstrings (SCS) 2. Die Komplexität des SCS − Problems 3. Der Greedy − Algorithmus für kürzeste Superstrings 4. Ein Näherungsverfahren für Strings mit maximaler Länge 2 5. Der Begriff der MAXSNP − Vollständigkeit 6. Aussagen über die Komplexität der Konstruktion eines SCS im allgemeinen Fall 7. Zusammenfassung 8. Literaturverzeichnis 1. Die Definition von Shortest Common Superstrings Gegeben sei eine Menge S, die insgesamt m Strings enthält: S={s1,s2,s3,......,sm} . Die Aufgabe besteht darin, aus den Strings si einen Superstring zu bilden, dessen besondere Eigenschaft darin besteht, dass er alle diese Strings als Teilstrings enthält. Dabei gibt es ganz verschiedene Möglichkeiten, einen derartigen String zu erzeugen. Es bietet sich beispielsweise an, die einzelnen Zeichenketten si einfach in beliebiger Reihenfolge zu Seite 1 von 9 konkatenieren; der entstehende String wird trivialerweise alle si als Teilstrings enthalten. Beispiel: ssuper=smsm−1sm−2........s3s2s1 Der Nachteil dieser Vorgehensweise besteht darin, dass solche Zeichenketten in der Regel eine grosse Menge an redundanten Informationen enthalten, da es gewöhnlich Strings si innerhalb der Menge S gibt, die mit anderen Strings sj aus S teilweise übereinstimmen, oder sogar als Teilstrings in ihnen enthalten sind. Damit liegt es nahe, Superstrings zu konstruieren, die alle innerhalb der Menge S vorkommenden Strings und Teilstrings nicht mehrmals, sondern nur einmal enthalten und damit deutlich kürzer sind als der oben gezeigte Beispielstring ssuper . Ein solcher String mit minimaler Länge heisst Shortest Common Superstring (SCS) Für Mengen S mit nur wenigen Elementen lässt sich sehr leicht ein naives Verfahren finden, um einen SCS zu konstruieren. Betrachten wir die Stringmenge S={heike, eik, aldo, donna} als Beispiel. Die 4 in S enthaltenen Strings mit insgesamt 17 Zeichen lassen sich zu einem kürzesten Superstring mit nur 12 Zeichen zusammenfügen, wie die folgende Abbildung zeigt: Das mit Hilfe einer Baumdiagramms illustrierte Verfahren zeigt beide grundlegenden Möglichkeiten, Zeichen einzusparen: Im linken Teilbaum wird der String "eik " ganz einfach weggelassen, weil er ohnehin als Teilstring in "heike" enthalten ist. Im rechten Teilbaum hingegen nutzt man die Tatsache aus, dass "do" sowohl Suffix des Strings "aldo", als auch Präfix von "donna" ist. Deshalb werden die beiden Wörter zu dem neuen Wort "aldonna" verschmolzen. Anschliessend bestehen keine weiteren Möglichkeiten mehr, Zeichen einzusparen; deshalb werden die Strings "heike" und "aldonna" einfach aneinandergehängt. Kürzeste Superstings besitzen die Eigenschaft, alle zugrunde liegenden Wörter als Teilstrings zu enthalten und trotzdem erheblich kürzer zu sein als ein trivialer Superstring. Aufgrund dieser Tatsache kann man mit Hilfe von SCS viel Speicherplatz sparen und sie zum Beispiel im Bereich der Datenkompression einsetzen. Sie sind hilfreich unter Anderem bei der Kompilierung von Software mit minimalem Speicherbedarf. Ein etwas jüngeres, aber ebenfalls sehr wichtiges Anwendungsgebiet innerhalb der Biochemie stellt die Synthese (=Zusammenfügung) einer grossen Anzahl von DNA − Bruchstücken zu einem vollständigen DNA − Molekül dar. Das Erbmaterial wird zunächst vielfach kopiert und dann in viele kleine Einzelteile zerlegt, deren Gencode entschlüsselt werden kann. Anschliessend muss aus den vielen Bruchstücken wieder das ursprüngliche Molekül hergestellt werden, das exakt einem kurzen (oft sogar einem kürzesten) Superstring entspricht. 2. Die Komplexität des SCS − Problems Wie man unschwer erkennen kann, besitzt ein SCS gegenüber einem trivialen Superstring deutliche Vorteile, was den Speicherbedarf anbetrifft. Allerdings werden Datenstrukturen nicht allein danach beurteilt, wie viel Speicher sie verbrauchen, sondern auch der Aufwand für ihre Seite 2 von 9 Erstellung (=Instantiierung) spielt eine grosse Rolle. So ist die Konstruktion eines SCS sehr aufwändig, wohingegen sich sich ein trivialer S−String in linearer Zeit erzeugen lässt (bei m − vielen Strings si sind genau m−1 Konkatenationen nötig). Deshalb hat man zunächst versucht, die Laufzeit zu verkürzen, indem man keine "echten" SCS erzeugt, sondern mit Näherungsverfahren annähernd kürzeste Strings instantiiert hat. Die Forschung erzielte jedoch folgende wenig ermutigende Ergebnisse: 1. Für eine Menge S mit Strings, deren Länge höchstens den Wert 2 hat, lässt sich ein kürzester Superstring immer in polynomieller Zeit instantiieren. 2. Für Mengen S, deren Strings si beliebige Längen > 2 besitzen dürfen, ist es nicht möglich, ein polynomielles Näherungsverfahren zu finden. Unglücklicherweise konnte nachgewiesen werden, dass die Existenz eines Approximationsverfahrens mit polynomieller Laufzeit für das SCS − Problem äquivalent zu der Tatsache wäre, dass für die Klasse der NP−Probleme gilt: P = NP. Dies gilt nach dem gegenwärtigen Stand der Forschung als (nahezu) ausgeschlossen. Allerdings bezieht sich obige Aussage nur auf Näherungsalgorithmen, deren Abweichung vom entsprechenden kürzesten Superstring relativ gering ist. Eine solche "gute" Näherung liegt genau dann vor, wenn für den relativen Fehler eines Algorithmus gilt: << 1. Für = 1 ist das vom Näherungsverfahren erzielte Resultat hingegen viel zu ungenau. Ein Beispiel für ein Verfahren mit "schlechter" Näherung, aber polynomieller Laufzeit ist der Greedy−Algorithmus. 3. Der Greedy Algorithmus für kürzeste Superstrings Der vielleicht gängigste Algoritmus für die Erzeugung kurzen Superstrings aus einer Stringmenge S funktioniert nach dem Greedy−Prinzip. Er entscheidet sich damit in jedem Schritt für die momentan beste Lösung. Konkret verschmilzt der Algorithmus jeweils die beiden Strings, deren Überlappung maximal ist. Für eine Beispielmenge S={ABCD, BCDE, RAT, BERRA} geht Greedy wie folgt vor: Er verschmilzt zunächst die Strings "ABCD" und "BCDE", weil man durch Überlappung (=merge) der gemeinsamen Präfixe und Suffixe 3 Zeichen einsparen kann. Im 2. Schritt verschmilzt er die Strings "BERRA" und "RAT" unter Einsparung von 2 Zeichen (siehe Abbildung) Die entstandenen Wörter "ABCDE" und "BERRAT" lassen sich nicht mergen, weil die beiden Strings weder gemeinsame Präfixe/Suffixe besitzen, noch der eine String ein Teilstring des Anderen ist. Deshalb werden die beiden Wörter einfach aneinandergehängt und wir erhalten sscs="ABCDEBERRAT" als kürzesten Superstring. Die Schwäche des Greedy − Algorithmus besteht darin, dass er zwar für viele Spezialfälle einen kürzesten Superstring findet, im Allgemeinen Fall jedoch nur einen Teil der Zeichen einspart, die einem trivialen Superstring überflüssig sind. Im Worst Case erzeugt Greedy sogar einen S−String, der annähernd doppelt so lange ist, wie der entsprechende SCS. Dabei wird Seite 3 von 9 ihm seine Eigenschaft zu Verhängnis, in jedem Schritt die aktuell beste Lösung zu suchen. Im konkreten Fall werden so Strings als Zwischenergebnisse erzeugt, die sich aufgrund ihrer Struktur später nur schlecht oder gar nicht mit anderen Strings verschmelzen lassen. Da Greedy im Worst Case Superstrings erzeugt, die etwa die doppelte Länge eines SCS haben, beträgt seine relative Abweichung vom richtigen Resultat bis zu 100%. Deshalb ist es nicht möglich, das Superstring−Problem mit einer relativen Fehlerschranke < 1 zu approximieren. Der Algorithmus stellt ist damit kein "gutes" Näherungsverfahren. Eindeutig für Greedy spricht jedoch seine in jedem Fall polynomielle Laufzeit. 4. Ein Näherungsverfahren für Strings mit maximaler Länge 2 Wie bereits in Abschnitt 2 erwähnt, kann man für eine Menge S={s1,s2,s3,......,sm} mit |s i| 2 in polynomieller Zeit näherungsweise kürzeste Superstrings erzeugen. Hierfür kann man beispielsweise einen Näherungsverfahren anwenden, das die einzelnen Strings si als Pfade in einem gerichteten Graphen G=(V,E) interpretiert. Die Knotenmenge V entspricht dabei dem Alphabet, das der Stringmenge S zugrunde liegt, d.h. jedem Alphabetzeichen aj, das in einem oder mehreren Strings si enthalten ist, wird genau ein Knoten zugeordnet. Beispiel: Gegeben sei eine Stringmenge S ={ab, ad, fm, me, he, ei, eg, gf}. Der aus den Teilstrings ableitbare Graph enthält 2 Zusammenhangskomponenten und hat folgende Form: Der Algorithmus geht wie folgt vor: Zunächst wird ein Knoten als Startknoten bestimmt, für den gilt: Ausgangsgrad > Eingangsgrad. Von diesem Knoten aus wird der Graph entlang der gerichteten Kanten durchlaufen, bis ein Knoten ohne ausgehende Kanten erreicht wird. Die Menge der durchquerten Kanten wird dabei entfernt und als Pfad gespeichert. Solange geeignete Startknoten existieren, werden weitere Pfade im jeweils verbleibenden Teil des Graphen durchlaufen und anschliessend gespeichert. Im Beispielgraphen erhalten wir so die Pfadmenge {ab, ad, hegfmei} . Durch Konkatenation der Pfade ergibt schliesslich ein kürzester Superstring, zum Beispiel "abadhegfmei" (in diesem Fall gibt es mehrere Lösungen). 5. Der Begriff der MAXSNP − Vollständigkeit Die Klasse der NP−Probleme umfasst neben der Klasse P der Probleme, die in polynomieller Zeit lösbar sind, auch solche, bei denen Dies (nach dem heutigen Stand der Forschung) nicht möglich ist. Während die konventionelle Beschreibung der Klasse NP sich auf die Automatentheorie (Turingmaschine!) stützt, so gibt es laut Fagin noch eine weitere gültige Definition: Die NP−Klasse ist äquivalent zur Klasse aller Graphen, die als Ausdruck zweiter Ordnung formulierbar sind. Ausdrücke 2. Ordnung haben dabei die folgende Form: Die Menge der Probleme A NP, auf die man jedes andere NP−Problem in polynomieller Zeit reduzieren kann, bildet dabei die Klasse der NP−vollständigen Probleme. Seite 4 von 9 Modifiziert man die oben gezeigten Ausdrücke zweiter Ordnung, so erhält man eine interessante Teilklasse der NP−Probleme: Die Klasse der strengen NP−Probleme (SNP). Der entscheidende Unterschied liegt darin, dass die Relation im Falle der SNP−Probleme für alle möglichen Variablenkombinationen (x1, x2,...., xk) erfüllt sein muss, während für die Klasse NP keine entsprechende Bedingung gilt. Ausserdem hängt von einer Eingaberelation G mit beliebiger Stelligkeit ab, die für NP−Probleme im allgemeinen Fall nicht gefordert wird. SNP entspricht damit exakt der Klasse der Probleme, die wie Folgt formulierbar sind: Um unser Ziel zu erreichen, eine geeignete Klasse von Näherungsproblemen zu finden, zu der auch das Shortest Common Superstring−Problem zählt, muss die strenge Formulierung der SNP−Probleme etwas aufgeweicht werden. Lässt man zu, dass die Relation nicht für alle Tupel (x1, x2,.....,xk) erfüllt ist, so erhält man eine wesentlich umfangreichere Klasse von Problemen. Zweckmässiger Weise muss die Relation S jedoch so gewählt werden, dass von so vielen Variablentupeln wie möglich erfüllt wird, und sich damit einem SNP−Problem so weit wie möglich annähert. Man erhält damit eine Klasse von Maximierungsproblemen. Um die Problemklasse noch mehr zu erweitern, lässt man statt einer einzigen Eingaberelation G beliebige viele Relationen G1, G2,.....,Gm zu. Damit ergibt sich die Optimierungsklasse MAXSNP0 . Für das weitere Vorgehen ist der Begriff der L−Reduktion von Bedeutung: Ein Problem A ist genau dann auf ein Problem B L−reduzierbar, wenn für diese Aufgabe ein Reduktionsalgorithmus mit Speicheraufwand O(log(n)) existiert. Aus MAXSNP0 kann man damit die Problemklasse MAXSNP ableiten, welche genau die Probleme A enthält, die mit einer L−Reduktion auf (mindestens) ein Problem B MAXSNP0 zurückführbar sind. Trivialerweise sind alle MAXSNP0 − Probleme mit Aufwand O(1) auf sich selber reduzierbar und somit in MAXSNP enthalten. Analog zu den NP−vollständigen Problemen, auf die man alle Elemente der Klasse NP in polynomieller Zeit reduzieren kann, gibt es auch eine Klasse vollständiger MAXSNP−Probleme: Ein Problem B MAXSNP ist MAXSNP − vollständig <=> alle Probleme A sind L−reduzierbar auf B MAXSNP Es liegt nahe, danach zu fragen, ob für ein MAXSNP−vollständiges Problem B ein polynomielles Näherungsverfahren existiert. Falls ja, so wären alle Probleme A MAXSNP in polynomialer Zeit approximierbar, weil jedes MAXSNP−Problem L−reduzierbar auf B wäre. Damit war die Beantwortung der Frage nach einem "effizienten" Approximationsalgorithmus für die Informatik von grosser Bedeutung. Leider kann die Existenz eines polynomiellen Näherungsverfahrens (wie in Kapitel 2 erwähnt) aufgrund der grossen Ähnlichkeit der MAXSNP−Klasse mit den NP−Problemen widerlegt werden. Man kann zeigen, dass eine beliebige Sprache L NP in polynomieller Zeit auf ein Näherungsschema für das MAXSNP−vollständige MAX3SAT−Problem reduzierbar ist. Dieses ist wie folgt formuliert: Eine oder mehrere boolesche Klauseln enthalten jeweils 3 mit logischem "oder" verknüpfte Variablen. Die Klauseln werden untereinander mit logischem "und" Seite 5 von 9 verknüpft. Ziel ist es, die einzelnen Variablen so mit den Werten "True" und "False" zu belegen, dass so viele Klauseln wie möglich erfüllt sind. Beispiel für Klauseln mit je 3 Variablen: (x1v x2 v x3) ^ (x3 v x4 v x6) ^ (x1 v x5 v x4) Cook’s Theorem beschreibt einen geeigneten randomisierten Algorithmus, der für jedes Wort x einen Satz boolescher Klauseln prüft, und so entscheidet, ob x L gilt. Dabei treten Fehler auf. Passt man allerdings die Fehlerschranke entsprechend an, so kann man anhand der Zahl der auftretenden Fehler sicher unterscheiden, ob ein Wort in der Sprache L enthalten ist, oder nicht. => Falls es ein polynomielles Näherungsverfahren für MAX3SAT gibt, kann jedes NP−Problem (dem je eine Sprache L entspricht) mit geeigneter Schranke in polynomieller Zeit entschieden werden. In diesem Fall wäre P = NP. Daraus resultiert der Umkehrschluss, dass MAXSNP − vollständige Probleme nur nicht−polynomielle Näherungsverfahren besitzen, falls P NP. 6. Aussagen über die Komplexität des allgemeinen SCS−Problems Um die im vorangehenden Abschnitt gewonnenen Erkenntnisse nutzen zu können, muss man zeigen, dass ein Zusammenhang zwischen der Klasse MAXSNP und dem Problem, einen kürzesten Superstring zu finden, besteht. Mit Hilfe einer L−Reduktion des MAXSNP−vollständigen Traveling Salesman Problems (TSP) auf das Shortest Common Superstring − Problem kann man zeigen, dass die Konstruktion eines SCS ein MAXSNP−vollständiges Problem ist. Die Motivation des TSP besteht darin, den kürzest möglichen Weg zu wählen, um eine vorgegebene Anzahl an Reisezielen zu erreichen. Das Traveling Salesman Problem ist mathematisch als gewichteter Graph G=(V,E) interpretierbar. Der kürzeste Weg entspricht dabei einem Hamilton Pfad (der jeden Knoten genau einmal durchläuft) mit minimaler Summe der Kantengewichte Für die angestrebte L−Reduktion ist es nötig, einen Spezialfall des TS−Problems zu betrachten. Man wähle einen Graphen, dessen Kanten gerichtet sind, und dessen Kantengewichte nur die Werte 1 und 2 annehmen dürfen. Diese Variante des Traveling Salesman Problems wird TSP(1,2) genannt. Der vorliegende Graph G lässt sich zerlegen in einen Teilgraphen H, der alle Kanten mit Gewicht 1 enthält, sowie in einen Restgraphen G\H , der alle Kanten mit Gewicht 2 enthält. Der H werde durch eine obere Schranke D begrenzt. maximale Grad der Knoten v Beispiel: Ein TSP(1,2)−Graph. Die blauen Kanten haben Gewicht 1, die Schwarzen Gewicht 2 Der Beispielgraph lässt sich, genau wie jeder andere TSP(1,2)−Graph, als Folge von Strings codieren. Man geht dabei nach folgendem Schema vor: Jeder Knoten v wird als Connector v#v’ codiert. Die Zeichen v und v’ dienen dabei als Bindeglieder für die Kantenstrings (=K−Strings) eingehender, bzw. ausgehender Kanten. Seite 6 von 9 Angenommen, der Knoten v besitzt genau d − viele Nachbarknoten wo, w1, w2,.......,wd−1, mit denen er über Ausgangkanten verbunden ist. Dann wird jede Kante i mit einem Kantenstring v’wi−1v’wi codiert. Die "benachbarte" Kante i−1, die ebenfalls vom Knoten v ausgeht, ist dabei beliebig wählbar. Da bereits festgelegt wurde, dass der Grad der Knoten in H durch die Schranke D begrenzt wird, ist das Wachstum der Kantenzahl linear begrenzt: Sei n die Knotenzahl und m die Kantenzahl im Graphen H => für m gilt: m D*n Im Beispielgraphen für das TSP(1,2)−Problem sind ausreichend Kanten mit Gewicht 1 enthalten, um allein damit einen Hamiltion Pfad zu konstruieren. Dies ist für allgemeine Graphen H jedoch nicht der Fall. Angenommen, in H fehlen genau k Kanten mit Gewicht 1, um alle Knoten zu durchlaufen. Dann müssen k zusätzliche Kanten mit Gewicht 2 aus dem Restgraphen G\H ausgewählt und in H eingefügt werden. Damit beträgt der Aufwand für die Instantiierung des TSP−Problems genau (n−1)+k, denn hierfür sind genau (n−1−k) eingewichtige und k zweigewichtige Kanten nötig. Es ist naheliegend, dass sich die Connectors v#v’ und die Kantenstrings v’wi−1v’wi zu einem kürzesten gemeinsamen Superstring verschmelzen lassen. Aufgrund der vorangehenden Überlegungen lässt sich Folgendes vermuten: Ein SCS, der den Graphen H vollständig beschreibt, enthält genau l=2m+3n+k+1 Zeichen. l würde wegen des maximal linearen Wachstums der Kantenzahl m und wegen k < n ebenfalls höchstens linear mit n wachsen. Damit wäre das Traveling Salesman Problem linear auf das SCS − Problem reduzierbar. Die Annahme, der Graph H enthalte genau l Zeichen, muss jedoch erst bewiesen werden. Sei S die Menge aller Strings si, die den Knoten und Kanten aus H zugeordnet wurden. Will man die si zu einem Superstring verschmelzen (aus dem später jederzeit der Graph H rekonstruiert werden kann), so ist der Abstandsgraph Gs hilfreich. Der „"Abstand"“ zwischen 2 Strings si und sj entspricht genau der Anzahl der Zeichen in si, die sich nicht mit sj überlappen. Beispiel: Der Graph Gs für die Menge S={oh, hallo, haha, ach, huh}. Das Kantengewicht entspricht jeweils dem Abstand zweier Strings. Kanten zwischen Strings ohne Überlappung sind der Einfachheit halber nicht eingetragen. Innerhalb eines jeden Abstansgraphen Gs existiert dabei ein Teilgraph G2, der genau die Kanten mit Gewicht 2 enthält. Aufgrund dieser Einschränkung besitzt in G2 jeder Knoten v H genau eine Zusammenhangskomponente. Seite 7 von 9 Beispiel: Der Knoten 0 besitze vier Ausgangskanten Ersetzt man alle Knoten durch Connectors und alle Kanten durch Kantenstrings, so ergibt sich folgende Zusammenhangskomponente in G2 : Wie man sieht, enthält die Beispielkomponente ausschliesslich Strings, deren Präfixe mit den Suffixen anderer Strings übereinstimmen. Diese Überlappungen kann man ausnutzen, um alle Strings, die zum Knoten 0 (in diesem Fall), bzw. zu einem beliebigen Knoten vi (im allgemeinen Fall) gehören, zu verschmelzen. Und zwar, indem man den Connector mit einem Kantenstring überlappt (hierbei wird 1 Zeichen eingespart ) und die Kantenstrings paarweise miteinander verschmilzt. Sofern man die Überlappung aller K−Strings voll ausnutzt, erzielt man pro Merge eine Einsparung von 2 Zeichen. Es entsteht ein String minimaler Länge − der Standard−String. Beispiel: Der Standard − String für den Knoten 0 In einem Graphen mit n Knoten kann man für jeden Knoten i und seine ausgehenden Kanten einen Standard−String erzeugen. Die Menge dieser Standard−Strings kann man zu einem gemeinsamen Superstring verschmelzen. Er wird als Standard−Superstring bezeichnet. Beispiel: Der Knoten 0 habe im Hamilton−Graphen H eine Ausgangskante zum Knoten 1. Will man einen Standard−Superstring minimaler Länge konstruieren, so muss man die einzelnen Standard−Strings entsprechend anpassen. Im konkreten Fall müssen die Kantenstrings, die nach dem Connector von Knoten 0 folgen, so angeordnet werden, dass der letzte K−String sich mit dem Connector des Standard−Strings von Knoten 1 überlappt. (siehe Abbildung) Es ist allerdings nicht in jedem Fall möglich, den Connector eines Standard−Strings mit dem Kantenstring eines Anderen zu verschmelzen. Falls im Graphen H keine Kante vorhanden ist, die einen Knoten vi mit einem Knoten vi+1 verbindet, so kann man die Standard−Strings von vi und vi+1 nicht mergen, sondern muss sie statt dessen konkatenieren. Pro fehlender Kante wird dabei ein zusätzliches Zeichen benötigt, weil sich die Enden der Strings nicht überlappen. Damit sind, wenn genau k Kanten fehlen, k zusätzliche Zeichen nötig. Seite 8 von 9 Beispiel: Die Standard−Strings der Knoten 7 und 8 werden aneinander gehängt. Aufgrund der vorangehenden Überlegungen bezüglich der Überlappung von Connectors, Kantenstrings und Standard−Strigs kann man nun die Länge eines kürzesten Standard− Superstrings bestimmen. Insgesamt besitzt unser Graph H genau n Knoten, die jeweils durch einen Connector mit 3 Zeichen codiert werden. Jede der m Kanten, die in H enthalten sind, wird durch einen aus 4 Zeichen bestehenden Kantenstring codiert. Davon bleiben aufgrund der wechselseitigen Überlappung der Kantenstrings (pro Merge werden 2 Zeichen eingespart) und aufgrund der Überlappung mit den Connectors (1 Zeichen wird pro Merge eingespart) nur 2m+1 Zeichen übrig. Die Konstante 1 kommt dadurch zustande, dass der Kantenstring am Ende des letzten Standard−Strings zugleich das Ende des gesamten Superstrings darstellt und deshalb nicht mehr mit einem Connector verschmolzen werden kann. Zudem wissen wir, dass für k Kanten genau k zusätzliche Zeichen nötig sind. Dies entspricht exakt unserer Vermutung bezüglich der Länge eines Shortest Common Superstrings für das TSP−Problem. 7. Zusammenfassung Wir konnten das MAXSNP−vollständige Traveling Salesman Problem erfolgreich auf das Problem, einen kürzesten Superstring zu erzeugen, L−reduzieren. Da aber ein MAXSNP− vollständiges Problem die Eigenschaft besitzt, dass jedes Problem MAXSNP darauf L− reduzierbar ist, so kann man schliessen: Entweder, es gibt kein polynomielles Näherungsverfahren für das Erzeugen kürzester Superstrings, oder aber es gilt (siehe auch das Resultat von Abschnitt 5): P = NP Nur für Stringmengen S, deren Strings maximal die Länge 2 haben, existiert (entsprechend Abschnitt 4) definitiv ein polynomielles Näherungsverfahren. Insgesamt stellt der Nachweis, dass für MAXSNP−vollständige Probleme nur polynomielle Näherungsverfahren existieren, falls P = NP, einen schweren Rückschlag dar. Das nachgewiesene Resultat ist das schlechteste nur Denkbare für die Approximierbarkeit von MAXSNP−Problemen, abgesehen natürlich von P NP. 8. Literaturverzeichnis [AG] Alberto Apostolico, Zvi Galil (Editoren): Pattern Matching Algorithms, Kapitel 8.1.1, 8.1.2., 8.1.3 und 8.4. Oxford University Press, 1997. Christos H. Papadimitrou: Computational Complexity, Kapitel 13.2., 13.3. Addison− Wesley, 1994. Seite 9 von 9