P = NP ?

Ich bin gerade dabei für die erfahrungsgemäß wichtigste / schwierigste Klausur meines Bachelor-Studiums zu pauken. Sie trägt den weniger aussagekräftigen Namen "Informatik III". Grob gesagt geht es in der Vorlesung um grundlegende Algorithmen (= Verfahren, Probleme zu lösen) und die dazugehörigen Datenstrukturen. Die wichtigste Kennziffer um Algorithmen zu bewerten ist die Laufzeit. Man bedient sich dabei einigen Tricks um die Darstellung zu vereinfachen. So werden Konstanten, die von der jeweiligen Architektur des zugrunde liegenden Systems abhängen, einfach weggelassen und nur die Worst-Case Laufzeit asymptotisch angegeben. Ein kleines Beispiel zur Veranschaulichung: Ein Algorithmus erhält eine Eingabe der Länge n (z.B. eine Folge von n ganzen Zahlen). In dem Programm gibt es eine Schleife, die die Eingabe durchläuft und erst abbricht, wenn etwas bestimmtes gefunden wurde. Es könnte sein, dass die komplette Folge durchlaufen werden muss, bis die Abbruchbedingung erreicht wird (= worst-case) oder der Algorithmus schon bei der ersten Zahl anhält (= best-case). Die Laufzeit dieses Programms wäre damit O(n). Die O-Notation hier bedeutet, n-mal durchlaufen oder eben besser.

Wieso erzähle ich das ganze? Ich will auf das Thema der NP-Vollständigkeit eingehen, ein sehr interessantes Kapitel der Vorlesung, das mich fasziniert. Es geht um die Frage "P = NP?". Was ist P und was ist NP?

Um das zu erklären, muss ich erstmal weiter ausholen. Wichtig ist zu wissen, dass nur Algorithmen mit polynomieller Laufzeit für die Praxis interessant sind. Polynomiell heißt, dass nur konstante Zahlen in der Potenz der Laufzeit stehen dürfen. Also Laufzeiten wie O(n²) oder O(nÂł) sind polynomiell. Alles was langsamer läuft (exponentiell) ist äußerst ineffizient und für die Praxis unbrauchbar. Hier eine Grafik, die das sehr gut veranschaulicht. Darauf seht ihr, wie verschiedene Laufzeiten die Dauer eines Programms beeinflussen. Wie unschwer zu sehen ist, sind exponentielle Laufzeiten völlig inakzeptabel. So benötigt beispielsweise ein exponentieller Algorithmus bei Eingabelänge n = 60 (was nicht viel ist) 366 Jahrhunderte bis die Berechnung beendet ist, während ein 2-polynomieller dafür gerade einmal 36 Tausendsel Sekunden benötigt:


Nun gibt es ein Modell aus der theoretischen Informatik, das es ermöglicht, Probleme, dessen Lösung in der Praxis nur exponentiell berechnet werden können, polynomiell zu lösen. Dieses Modell trägt den netten Namen "nichtdeterministische Turing-Maschine" (NTM) und geht zurück auf Alan Turing, der dieses Modell 1936 erfunden hat. Es handelt sich bei einer NTM um eine sehr abgespeckte Version eines Computers mit einer besonderen Fähigkeit: sie kann raten. Da reale Computer das leider nicht können, ist dieses Modell für die Praxis relativ unbrauchbar. Eine deterministische Turing-Maschine (DTM) dagegen, ist ein Berechnungsmodell, das laut der Churchschen These genauso mächtig ist, wie jeder reale Computer. Man benutzt diese einfachen Rechenmodelle um Verfahren für komplexe Probleme auf eine verhältnismäßig einfache, gemeinsame Grundlage zu stellen. Wenn es um Turing-Maschinen geht, redet man nicht mehr von durchführbaren Berechnungen, sondern von akzeptierten Sprachen. Wieso das so ist, ist jetzt uninteressant. Die Menge der Sprachen, die von einer NTM in polynomieller Laufzeit akzeptiert werden, heißt NP. Und die Sprachen, die von DTMs polynomiell akzeptiert werden P. Zusammenfassend ist also P die Menge der Probleme, für die es einen effizienten, praxistauglichen Algorithmus gibt und NP die Menge der Probleme, für die es nur einen tauglichen Algorithmus gibt, wenn Computer die Lösung "erraten" könnten. Bis hierhin noch relativ unspektakulär. Nun gibt es aber unter den Sprachen in NP eine winzig-kleine Teilmenge, die Menge der NP-vollständigen Sprachen, mit einer zauberhaften Eigenschaft:

Gibt es einen polynomiellen Algorithmus für eine NP-vollständige Sprache, gilt P = NP.

Was bedeutet das? Das bedeutet, wenn man einen effizienten Algorithmus für eine NP-vollständige Sprache findet, hat man damit bewiesen, dass es für alle bisher ungelösten NP-Probleme einen effizienten Algorithmus gibt und das sind verdammt viele. Das liegt daran, dass NP-vollständige Sprachen gewissermaßen so "schwierig" sind, dass man alle anderen NP-Sprachen darauf reduzieren kann (Stichwort polynomieller Reduktionsbeweis). Um NP = P zu beweisen genügt also die effiziente Lösung einer einzigen NP-vollständigen Sprache. Wo gibts schon sowas? Um tausende Probleme zu lösen, genügt die Lösung für ein einziges zu finden. Krass oder? Und jetzt kommt der nächste Knaller: Das P-NP-Problems gehört zu den Clay Mathematics Institute Millenium-Problemen . Mit anderen Worten, wer das Problem löst, kassiert 1 Millionen Dollar. Wie schaut also so ein NP-vollständiges Problem aus, dessen Lösung einen zum Millionär macht und mit Einstein gleichstellt?

Die erste NP-vollständige Sprache wurde von Stephen A. Cook in den 70ern gefunden, das sogenannte Erfüllbarkeitsproblem der Aussagenlogik (engl. satisfiability): Jeder kennt logische Ausdrücke. Beispielsweise ist die Aussage "A und B" nur wahr, wenn A = wahr und B = wahr gilt. Es gibt also eine Belegung, für die die Aussage "A und B" wahr ist, die Aussage ist damit erfüllbar. Nun schauen die meisten formalen logischen Aussagen ein bisschen komplizierter aus (neben "und" gibt es noch zahlreiche andere logischen Verknüpfungen wie "oder", "impliziert", "ist äquivalent", etc..) und man kann sich denken, es wäre nützlich, wenn es ein Programm gäbe, das mir für beliebig lange logische Ausdrücke sagt, ob die Aussage überhaupt für irgend eine Belegung erfüllbar ist. Intuitiv könnte man einfach einen Algorithmus schreiben, der in alle Elementaraussagen (Atome) "wahr" oder "falsch" einsetzt und guckt ob irgendwann mal die Gesamtaussage wahr wird. Wie wäre die Laufzeit eines solchen Algorithmus? Bei Eingabelänge n müsste man im worst-case in alle Atome zwei Werte einsetzen (wahr oder falsch). Also eine Laufzeit von O(2^n) -> exponentiell -> inakzeptabel. Dass diese Sprache in NP liegt, sieht man leicht. Die NTM rät einfach eine Belegung und prüft ob die Gesamtaussage wahr wird. Das kann sie in polynomieller Zeit. Der Beweis, dass dieses Problem NP-vollständig ist, ist unglaublich kompliziert und eine geistige Meisterleisung von Cook. Laut unserem Prof zählt dieser Beweis (den ich absolut nicht checke) zu den größten Meilensteine der Informatik.

Bis heute wurde weder bewiesen noch wiederlegt, dass P = NP gilt. Wem es also gelingt, einen Algorithmus zu finden, der das oben beschriebene Problem in polynomieller Laufzeit löst, kassiert eine Millionen Dollar, verändert die Menschheit (Computer würden noch viel viel viel viel mächtiger werden) und kriegt neben massig Anerkennung bestimmt noch den Nobel-Preis. Also Leute, macht euch ran und findet eine polynomielle Lösung. Wenn euch das obige Problem nicht gefällt, sucht euch ein anderes NP-vollständiges Problem. Es gibt mittlerweile über 1000 davon. Für den Anfang: hier eine Liste von 21 weiteren Problemen, dessen polynomielle Lösung euch berühmt machen wird. Der Vollständigkeit halber, hier noch die offizielle Beschreibung des NP-P-Problems von Stephen Cook persönlich. Ein Ausschnitt:

The importance of the P vs NP question stems from the successful theories of NP-completeness and complexity-based cryptography, as well as the potentially stunning practical consequences of a constructive proof of P = NP.

Ich hoffe die Lösung eines solchen Problems wird keine Klausur-Aufgabe, zutrauen würde ichs unserem Prof ;)

10 Responses to "P = NP ? ":

Hans Schmid
sehr gute Darstellung eines Problems, das wir aber trotzudem nicht verstehen - wenn es in der Klausur behandelt wird, bist Du jedenfalls gut vorbereitet.
flow
der hammer... ich hab echt noch nie jemanden gesehen, der sich mit solcher begeisterung sooolchem irsinn (:grinning: ) annimmt .. dickster RESPECT greetz flo
chiles0n
yo. oehm. schoen geschrieben. aber nach dem 2. abschnitt hab ich mal nach unten gescrolled und gemerkt dass mir leider das hirn, zeit, sowie konzentration fehlt. solches interesse ist der beste weg komplizierten problemen zu begegnen. man sieht du studierst das richtige spuehrst du schon den erfolgsdruck deine pole position der ersten informatik klausur zu wiederholen? ;D bin gerade dabei mich bei unis zu bewerben, wenn ich nicht gerade poker =[
Schade dass ihr den Text nicht nachvollziehen könnt. Hab extra so unmathematisch wie möglich geschrieben. Einfach bei Interesse nochmal in aller Ruhe durchlesen und nicht gleich aufgeben, dann könnt ihr des Geschreibsel sicher verstehen :)
jona
hey sweety wow dickster respect für dein mathematisches grosshirn. echt super! *tief verneig* ich hab mir mühe gegeben deinen ausführungen zu folgen. bist du der rätsels lösung schon näher gekommen?ich beschäftige mich auch zur zeit mit ganz komplizierten sachen aber sie sind von ganz anderer natur im wahrsten sinne des wortes ;-) denn ich lerne über unsere körper-strukuren und die geheimnisse in den verschiedenen systemen (nervenbahnen gerade aktuell).. irgendwann hätte ich lust mit dir mal parallelen zu suchen und festzustellen. wir beide werden ja richtig profis auf unseren gebieten. wer weiss was das möglich macht wenn wir unser wissen mal fusionieren lassen... zb können computer wesentlich schneller -vergleichen- als menschliche gehirne. aber unser gehirn ist einzigartig viel schneller was das -in analogien
jona
und komplexitätsdenken anbelangt.so jetzt tipp ich den scheiss zum dritten mal ich hoffe jetzt gehts.
jona
na also!?ich weiss nich warum das die ganzen male vorher nicht ging. sorry dass ich so viele leere posts hier gemacht hab, ich hatte nen riesen text der ist einfach nur bis zur hälfte sichtbar gewesen.ganz liebe grüssedein schwesterherz
jona
und ich wollt noch sagen dass ich die demo geil fand mit dem omsn schild ich hab herzhaft gelacht als ich die pics gesehen habdu bist echt der geilste bruder der weltes freut mich immer wieder mich an dich zu erinnern und zu sehen wir gut du voran kommst.
hey schwesterherz :) Schön dass du hier kommentierst. Es gibt in der Tat gewisse Parallelen, ich hab erst neulich irgendwo gelesen, dass Daten im Gehirn genauso wie im Rechner binär kodiert sind, sich also mittels 0 und 1 repräsentieren lassen. Keep on brainstorming ^^ Das Wort omsn hat eigentlich keine wirkliche Bedeutung. Erfunden hat es eigentlich der Mo, er verwendet als "reingestylte" Bezeichnung für Oma. Ich find einfach nur es klingt verdammt cool, deswegen omsn :) Wann sehen wir uns mal wieder? LG aus Augsburg
jona
hoffentlich bald! :-) ich find deine seite cool.
Add a comment

(required, max 20 characters)

(required, won't be published)

(optional)

(required)