Hm. P-N-P haben wir letztes Mal gemacht. Video.
Nice. Ähm, P-N-P haben wir letzte Woche gemacht.
Das bleibt auf jeden Fall in Erinnerung. Das ist auf
jeden Fall so, dass es in Erinnerung bleibt.
P-N-P haben wir letzte Woche gemacht. Und Reduktion haben wir auch schon gemacht.
Und das soll überleiten in dieses Thema der NP Vollständigkeit.
Und... Moin. Das soll überleiten in dieses Thema NP Vollständigkeit
. Und die ersten Follien wiederholen nochmal das, was wir
letztes Mal gemacht haben, weil das ja relativ schwierig ist.
Und dann steigen wir eine, dieses Thema NP-Vollständigkeit,
mit dem man eben versucht zu erfassen, wann Probleme nicht effizient lösbar sind.
Also, dass man so Probleme hat,
wie irgendwie kürzeste Pfade finden, wo man sagt,
hey, das geht schön schnell und dass man Probleme hat,
so wie Erfüllbarkeitsprobleme der Aussagenlogik oder längste Pfade finden,
wo man sagt, das geht irgendwie nicht so schnell.
Oder ist ja wahrscheinlich nicht so schnell. Und da hilft
uns eben NP-Vollständigkeit. Das ist quasi das Pendant in der
Effizienz, was Entscheidbarkeit, Unentscheidbarkeit bezüglich der Effektivität ist.
Also geht etwas überhaupt, entscheidbar unentscheidbar. Und PNP-Vollständigkeit,
das ist so dieses Wechselspiel, geht es effizient zu lösen
Erstmal nochmal zur Wiederholung, die Klassen P und NP.
Wir haben ja letzte Woche Montag so Zeitschranken eingeführt und sind dann
relativ schnell eben zu diesen Klassen P und NP gekommen,
weil die eben aus praktischer Sicht von besonderer Bedeutung sind,
während so andere Zeitklassen erstmal eine etwas untergeordnete Rolle spielen.
Und denn P sollen eben all die Sprachen drin sein oder eben die Probleme,
für die man eine deterministische Touring-Maschine angeben kann,
die das Problem entscheidet,
also nach einer bestimmten Anzahl von Schritten auf jeden Fall ja oder nein sagt.
Und dieses nach einer bestimmten Anzahl von Schritten
ja oder nein sagen, das soll eben durch einen Polynom
zeitbeschränkt sein
Also wenn ich eine Eingabe der Länge N habe,
dann brauche ich maximal P von N viele Schritte, um ja oder nein zu sagen.
Und dann gibt es auch Eingaben der Länge N,
wo das deutlich schneller geht als diese Schranke,
aber im Worst Case braucht man dann eben irgendwie diese P von N viele Schritte.
Und bei NP im Grunde genommen genauso,
nur dass das eben keine DTM ist, sondern eine NTM.
Und hier über die Zeitschranke so definiert, dass man gesagt hat,
alle Rechnungen sollen nach diesem P von N vielen Schritten aufhören.
Das haben wir erstmal so gemacht,
dass wir gesagt haben, nur die Erfolgsrechnung,
aber mit der gleichen Idee wie bei P geht das auch,
dass man quasi einfach bei jeder Rechnung einen Zähler mitführt,
P von N ausrechnet und dann sagt,
okay,
wenn ich noch nicht fertig bin,
dann kann ich jetzt
Nein sagen
Das sind P&N-Peter, darunter steht es nochmal, DTM,
Polynom und nach so und so viel Schritt musste ich auffüllen.
Und wichtig ist eben, für eine Sonne-Touring-Maschine, UR gibt es einen,
so einen Polynom-P und dann soll sie eben für jede Eingabe
der Länge N maximal P von N viele Schritte brauchen.
Also nicht etwa, dass man irgendwie unterschiedliche Polynome für unterschiedliche Eingabenlängen
hat oder so. Genau. Und dann ist bei NP,
haben wir so diese zwei Sichtweisen gehabt, dass sie gesagt haben,
naja, entweder so dieses nicht-deterministische Raten oder deterministisches Verifizieren.
Also gegeben eine behauptete Lösung, ist das wirklich eine?
Kann man das verifizieren im Polymodialzeit. Und dieses Raten,
da gab es nochmal so diese Frage,
wie geht das eigentlich
Und im Grunde genommen haben wir das ja gehabt, bei nicht-deterministischen Turing-Maschinen,
wenn die nicht-deterministische Turnmaschine im Zustand ist und irgendwie verzweigt,
dann ist genau das dieses nicht-deterministische Raten.
Um das mal, nochmal so ein Bild von,
ich glaube, der achten Vorlesung oder so ausgebuddelt,
so nicht die terministische Algorithmus A oder auch eine Touring-Maschine,
die kann eben raten und dann kann sie eine Variable auf Null da einsetzen.
Eine typisches Beispiel, ihr wisst, ihr habt drei Aussagensymbole
und ihr wollt die nicht deterministisch auf Null da einsetzen.
Also für jedes Aussagesymbol raten, ist das jetzt wahr
oder ist das falsch? Und dann sieht das eben in
der Touring-Maschine
irgendwie so aus
Dass man bei jedem Kantenübergang quasi rät,
0 oder 1 und einen Schritt weiter nach rechts macht.
Am Anfang hat man drei Blanks auf dem Band und dann schreibt man
quasi auf jedes dieser Blanks den Wahrheitswert hin für die erste,
zweite und dritte Variable.
Und dann sieht halt der Konfirmationsbaum so aus,
dass man am Anfang nur im Zustand Z0 ist und
noch gar nichts auf dem Band geschrieben hat.
Und dann schreibt man halt nicht deterministische Null hin oder
eine 1 und wechselt in diesen Zustand Z1.
Und genau das ist das Raten. Auf der linken Seite
habe ich für die erste Variable geraten,
dass ich die auf Null setze.
Und hier habe ich für die erste Variable geraten,
dass ich die auf 1 setze.
Und dann mache ich das halt immer
so weiter
Und dann seht ihr, dann kommen hier so,
wenn das jetzt drei Aussagen-Symbole sind, die man irgendwie belegen will,
dann kommen da alle möglichen Belegungen zwischen 0-0-0,
also alles falsch machen und 1-1-1-1 alles warm machen raus.
Also ganz beliebig gemacht werden. Das ist diese Idee mit dem Raten,
wenn man das im Pseudo-Code angeben will,
das ist nicht die terministische Algorithmus,
dann schreibt man da eben genauso was hin,
dann schreibt man hin, Rate für jede Variable 0 oder 1,
rate nicht die terministische 0-1. Okay,
das ist der Nicht-Determinismus in NP oder eben diese andere Sichtweise war mit so einem Verifikationsalgorithmus,
wo man halt gesagt hat, ich habe einen Algorithmus A,
Wir sollen auch gleich dann polymäelle Laufzeit haben,
aber erstmal kann man den allgemein definieren.
Und das Wichtige ist eben, dass X so eine ganz
gewöhnliche Probleminstanz ist von der Sprache, die er entscheiden soll.
Und Y, das zweite Argument, das sollte so ein Zertifikat sein,
mit dem ich mich überzeugen kann, dass X eine Jahren-Stunts ist.
Verifiziert A eben diese Sprache L,
da sind jetzt auch nur die Xe drin,
wenn eben so ein Zertifikat existiert,
sodass er sich mit dem Zertifikat überzeugen kann, dass das eine Jahrinstanz ist.
Also typische Beispiele gegeben, Graf und ich suche eine K-Clique,
also K-Knoten, die alle paarweise miteinander verbunden sind,
dann ist das Zertifikat eben einfach die K-Knoten,
von denen behauptet wird,
das soll
eine K-Clique sein
Und wenn man das benutzen will, um NP zu erfassen,
dann macht man das eben so, dass man sagt,
dieser Verifikationsalgorithmus A, der soll eine pulinuelle Laufzeit haben,
weil er nicht die terministische Algorithmus ja auch nur eine pulinuelle Laufzeit hat.
Und das Zertifikat, das darf zusätzlich
auch nur eine polinumielle Länge in der eigentlichen Probleminstanz haben.
Warum? Wenn ihr mit NP diese Ratephase habt vorneweg oder
auch irgendwann zwischendrin, damit kann man ja irgendwie zusammenfassen.
Dann habt ihr da ja auch nur polinumiell viel Zeit zum Raten.
Also ihr könnt nicht exponentiell viele Dinge raten,
wenn ihr nur polinuelle Laufzeit habt.
Deswegen darf hier das Zertifikat dann eben auch nur polinumiell lang
sein in der Einganginstanz
Genau, dass wir so die Sichtweise mit Verifikation und dass
anders eben die Sichtweise mit Nicht-Determinismus, könnte ich eine von aussuchen,
wenn ihr eins von beiden machen könnt, für ein Problem,
dann könnt ihr sagen, dann ist das Problem mit NP.
Beispiel, was wir letztes Mal hatten, unter anderem satt,
so Satisfiability, ist die Formel wirklich erfüllbar,
rübergehend für jedes Aussagensymbol 0 oder 1 raten und dann deterministisch überprüfen,
ob die geratene Belegung das wirklich warm macht.
Und wenn ihr das hier das verallgemeinert für N verschiedene Aussagesymbole,
dann seid ihr nach hier ganz unten im Baum,
habt ihr alle zwei hochendfielen Konfigurationen und dann testet ihr deterministisch
bei allen durch,
ob die Formel damit wahrgemacht wird oder nicht
Wenn einer halt sagt, ja, dann akzeptiert ihr insgesamt.
Genau. Korrekt ist er und im Pulli im Jahrzeit ist er auch Ratephase,
ist in der Länge der Formel so grob und das
Auswerten klappt auch in der Länge der Formel grob.
Genau. Nee, die haben wir letztes Mal ja quasi gemacht,
also mündlich haben wir sie gemacht. Warte mal,
wo steht ihr im Kormen, steht das in dem Algorithmenbuch?
Weil im Hauptcraft Ulmen führt er das nur über Nicht-Eterminismus ein.
Es macht auch Sinn in dem Setting,
in dem er sich bewegt, aber wenn ihr nächstes Semester Algorithmen,
also Algorithmen und Datenstrukturen hört,
da wird eher so diese Verifikationsbrille benutzt und man kann sich
mal ganz schnell überlegen,
dass das Äquivalent ist
Genau. Sonst noch? Und eine von Leuten könnt ihr
einfach benutzen. Okay. Ja, und dann kann man,
jetzt kann ich das hier zwar nicht deterministisch im Polynialzeit lösen,
das hilft mir aber nicht so großartig, wenn ich den Algorithmus implementieren will,
weil man halt dieses zusammenführende Ergebnisse nicht hinkriegt.
Und wenn man sich jetzt fragt, wie mache ich das deterministisch,
haben wir ja letztes Mal gemacht,
dann kamen wir eben dahin, dass wir das zwar hinkriegen,
dass wir aber sehr viel Zeit dafür brauchen,
dass wir dann irgendwo hier in so einer exponentiellen Laufzeit sind.
Und die grobe Idee ist, Ich rate mir alle Zertifikate
oder wenn ich nicht die Terminismus gucke, ich rate,
Entschuldigung, ich gehe alle Zertifikate durch oder beim Nicht-Determinismus,
ich gehe eben alle Dinge, die ich sonst raten würde, durch.
Dann mache ich das halt sequenziell,
wenn man vorhin bei dem Baum unten so zwei hochendviele Konfigurationen hat,
um die jetzt alle zu kriegen,
dann hat man irgendwie zwei hochendviele Rechnungen,
die brauchen auch alle irgendwie dann Podium hier lange und dann ist man irgendwo in Exponentialzeit.
Da steht es nochmal ein bisschen ausführlicher,
haben wir ja letztes Mal auch gemacht,
zu merken einfach, wenn ich ein NP-Problem habe,
von dem ich erstmal keinen schnellen Algorithmus finde und ich möchte
das jetzt aber deterministisch lösen,
dann kriege ich das erstmal nur in Exponentialzeit hin
Ich kriege das auch noch ein bisschen besser hin und so,
aber so grob von der Märktgeschichte, Exponentialzeit wird es dann.
Und auch, ne, kann man sich auch merken,
polymial ist halt gut, Exponential ist halt schlecht.
Also wenn wir quasi für ein Problem,
für das ich bisher zeigen konnte, es ist in NP,
wenn man irgendwie nichts Besseres einfällt, also wenn ich das nicht hinkriege,
das irgendwie nach P zu kriegen und nicht nur die Möglichkeit habe,
das dann mit dieser quasi Brutforce-Variante in Exponentialzeit zu machen,
nicht so schön.
Also für kleine Probleminstanzen klappt das noch,
wenn das N bei zwei Hochend noch relativ klein ist,
klappt das,
aber sobald das groß wird,
funktioniert das nicht mehr
Ja, und dann wollten wir diesen Übergang zur Reduktion machen,
dass wir dann uns mehrere Probleme angeguckt haben, die in diesem Erfüllbarkeit,
hatten wir ja noch Independence Z und Lagerhausproblem, da haben wir gesehen,
so schnell nicht, schnell nicht deterministisch zu lösen,
aber einem fällt irgendwie nichts für nichts Deterministisches ein.
Nichts Gutes. Dann konnte man sie fragen,
ob es wirklich nicht schneller geht und das,
was man gerne hätte, wäre, wenn ich das zeigen kann,
dass es wirklich nicht schneller geht,
dann bin ich vielleicht auch in gewisser Weise ganz zufrieden,
weil ich dann weiß, okay,
dann brauche ich wenigstens keine Zeit investieren,
um was Schnelles, um schnellen Algorithmus zu finden.
Das wird mir dann auch schon helfen.
Was man also gerne zeigen möchte, ist sowas hier,
das Problem lässt sich auf keinen Fall im Polymnialzeit lösen,
also für kein Karl lässt sich das in O
von N hochK lösen
Und das Problem war aber, dass wir ja irgendwie noch
keine Technik haben, solche unteren Zeitschranken zu zeigen.
Und dann wollten wir uns mit so einem anderen Ansatz begnügen und
das ist gleich die Überleitung zur NP Vollständigkeit, dass man eben gesagt hat,
jetzt versuche ich halt für Probleme eine bestimmte Eigenschaft nachzuweisen.
Das wird gleich diese Eigenschaft der NPV-Ständigkeit sein. Ich sage,
das Problem ist NPV ständig. Und das wird gleichbedeutend sein mit der Aussage,
es gehört zu den schwierigsten Problemen seiner Klasse und dann kann man sagen,
naja, dann ist es wohl unwahrscheinlich,
dass ich das schnell lösen kann,
wenn es zu den schwierigsten Problemen in dieser Klasse NP gehört.
Hintergrund wird sein, dass man dann sagen kann,
oh, wenn ich das jetzt schnell lösen kann,
kann ich plötzlich alle Probleme in NP
schnell lösen
Genau, und um das zu etablieren, brauchte man diesen
Begriff der Reduktion. Und da fing es jetzt an,
besonders knifflig zu werden, wenn ich zwei Sprachen habe,
L1L2, dann sage ich, ich kann die in Pudium,
ich kann L1 in Polymnialzeit auf L2 reduzieren,
wenn ich so eine Funktion angeben kann, F,
mit der Eigenschaft XSNL1 genau dann, wenn F-Phone XNL2 ist, für alle X.
Und die Funktion ist in Polymnialzeit brechenbar sein. Die Idee ist,
ich reduziere jetzt gerade L1 insofern auf L2,
dass statt dass ich L1 löse,
wenn ich so eine Reduktionsalgorithmus an,
der transformiert mir jetzt also diese Instanz des Problems L1 in
Instanz,
das Problem
Und die kann ich dann lösen vielleicht,
nicht ein Algorithmus für L2 habe, kann ich das lösen.
Und dann weiß ich auch die Antwort für meine ursprüngliche Frage,
ob meine Probleme ins National 1 drin ist oder nicht.
Da nochmal die Schreibweise mit so einem kleiner gleichen P,
das wird auch nochmal deutlich, warum das kleiner gleich P ist,
später, weil man eben L1 dann,
eins dann höchstens so schwierig ist wie L2. Nach so einer Reduktion.
Genau, und auf der nächsten Folie nochmal dieses Bild dazu,
da kann man das auch gut sehen, wenn ich quasi irgendwie,
ich habe jetzt eine Instanz ein Wort und ich möchte testen,
ist das Wort hier in A drin.
Also A ist jetzt das, was auf der vorherigen QL1 drin ist.
Und ich habe aber keinen Algorithmus, der mir entscheidet,
ob diese Probleminstanz jetzt in A drin ist oder nicht.
Also ob die Formel erfüllbar ist oder nicht.
Ich meine, ich habe da keinen Führer.
Aber vielleicht habe ich eine Reduktion. Dann kann ich die
anwenden und egal, wo jetzt hier meine Probleminstanz liegt,
es kommt irgendwie was raus hier auf der rechten Seite.
Und wenn ich da einen Algorithmus habe, der mir sagen kann,
diese Probleminstanz liegt in B drin oder eben nicht.
Also es ist eine Jahrinstanz oder nicht, dann kann ich sagen,
oh, dann weiß ich jetzt auch,
wenn das nämlich hier in B drin ist,
dann muss das vorherige auch in A drin gewesen sein.
Und wenn es nicht in B drin ist,
dann darf das vorherige auch nicht in A drin gewesen sein
Also Jahrenstanzen, auf Jahrenstanzen, abbilden eine Instanz auf einer eigenen Instanzen. Genau,
da nochmal das Beispiel, was wir hatten,
Folgebarkeit auf Kontradition, kannten wir schon,
aber da kann man es jetzt nochmal sehen,
wie man es als Reduktion angeben würde,
wenn man jetzt so eine Reduktion angeben will,
dann muss man eben aus einem so einem Tubel,
das quasi eine Probleminstanz des Volkerbarkeitsproblems ist, ich will wissen
, folgt die eine Formel aus der anderen,
die kann ich jetzt auf die Form hier abbilden,
und da wissen wir ja aus unserem Wissen von der Logik,
die Formel ist genau dann erfüllbar,
wenn vorher hier bei den beiden die Volkerbarkeitsbeziehung gilt,
also ist die Reduktion korrekt und im Polyumialzeit funktioniert die auch,
also habe ich so eine Primärzeitreduktion angegeben.
Das Wichtige hier ist, Ich mache diese Konstruktion hier,
ohne zu wissen, ob die Vollgabarkeitsbeziehung gilt oder nicht.
Ich rechne das nicht etwa vorher aus oder so.
Ich muss eine Reduktion angeben, also irgendwie ein Algorithmus,
die haben ja eine Art von Instanzen auf eine andere Art von Instanzen umwandelt.
Und dann muss ich nachweisen, wenn die ursprüngliche Instanz eine Jahrenstanz ist,
dann ist sie das jetzt auch, die transformierte.
Und wenn es keine ist, ist sie es auch nicht.
Das zeige ich dann. Aber ich mache das nicht so
bei der Reduktion, dass ich sage, hey,
ich rechne das aus und danach bilde ich das ab oder so.
Also bei der Reduktion selbst kann ich nicht damit arbeiten,
ob die ursprüngliche Instanz, Milliardenstanz oder eine Nein-Instanz ist.
Das passiert hier auch nicht. Es wird dieses Tubel genommen
Und das wird abgebildet auf die Formel, da wird nicht etwa ausgerechnet,
ob die Folgebarkeit gilt oder nicht. Aber ich weiß nachher,
wenn diese Formel unerfüllbar ist, dann ist das hier,
dann gilt da die Folgebarkeitsbeziehung, also sie folgt aus Vieh.
Genau, so, das hatten wir bis dahin,
also Definition von P und NP, zeigen das ein Problem,
wenn NP ist und diese Definition der Reduktion und haben auch zwei Beispiele für gesehen, drei Beispiele.
Und was wir auch noch gemacht hatten,
letztes Mal so Abschlusseigenschaften, dass man sich einmal überlegt,
naja, wenn ich zwei Probleme habe,
die in P sind,
dann ist auch die Vereinigung in P und der Durchschnitt und
das Kompliment und sowas
Aber die wichtigen sind erstmal 1,3 und 4 und 2
kann man sich dann auch ganz gut noch überlegen.
Habt ihr Fragen bis dahin? Definition ist es klar.
Ja, okay. Dann, wir haben im
letzten Kapitel 3 CNF auf Clique reduziert. Also 13NF,
das war dieses Problem, gegebene Formel in Klausel-Normalform,
bei der jede Klausel, Entschuldigung,
gegebene Formel in konjunktiver Normalform,
bei der jede Klausel
genau drei Literale enthält
Und in 3 CNF sollten dann genau die Formeln drin sein,
die diese Struktur haben und erfüllbar sind. Und entklicke,
da sollten Grafen drin sein, die eine K-Click enthalten.
Also die Probleminstanzen waren da so tupelbestehend aus G und K.
Und dann war die Frage, hat G eine K-Clicke,
also K-Knoten, die alle paarweise miteinander verbunden sind.
Und 13 F, wie gesagt, da sind die Probleminstanzen Formeln.
Genau, und was haben wir gemacht,
als wir diese Reduktion angegeben haben?
Haben wir erstens gemacht, zweitens, drittens oder viertens.
Viel zu gut
Musik Musik Musik Für die letzten fünf Sekunden, das ist
eher so die Kategorie Fangfrage. Nochmal schnell ändern, klicklicklick
. Jein, also die Mehrheit ist so bei Jein,
wer hat viertens gedrückt? Einer von sieben,
zwei von sieben, wer hat noch so viertens gedrückt,
die anderen fünf kommen doch bestimmt nicht alle aus der Kiste.
Warum? Das ist auch gut,
wenn ich keine Ahnung habe, einfach mal etwas anderes drücken
und das ist gut
Gibt auch die meisten Punkte, ist richtig.
Turin, das Gefühl. Warum viertens? Okay.
Genau. Und zweitens haben wir eigentlich eh nicht gemacht,
also von dem Grafen sind wir gar nicht ausgegangen. Drittens,
da steckt noch so drin, dass man sagt,
naja, ich will ja beide Richtungen haben, aber das,
worauf ich die Frage schulen soll, ist,
im Grunde genommen haben wir was ganz anderes gemacht.
Was ihr gemacht habt ist, also als ihr die Reduktion angegeben habt,
ist, ihr habt eine Formel gekriegt über die ihr sonst nichts wisst.
Und die habt ihr in Grafen umgewandelt. Mehr bin ich
gemacht. Irgendeine Formel in einen Grafen. Und was aber bei der Reduktion rauskommen soll,
was man dann nachher halt zeigen muss, ist,
wenn die Formel tatsächlich erfüllbar ist,
also wenn sie in 3CNF ist, unterfüllbar ist,
dann kommt dann Graf raus, der eine K-Klicke hat.
Das K habe ich ja auch gesetzt, also bei der Reduktion,
hast du dich eigentlich nicht nur in Grafen,
sondern auch diese 2K. Und wenn der Graf eine K-Klicke enthält,
dann ist die Formel erfüllbar.
Oder andersrum, wenn die Formel unerfüllbar ist,
dann hat bei dieser Instanz,
die ich konstruiert habe,
der Graf gerade keine K-Klicke
Das, was rauskommt, soll nachher, dass beides Obige sein,
das soll beides gelten, aber wenn ich die Reduktion angebe,
dann mache ich eigentlich was anderes.
Ich arbeite nämlich explizit nicht damit, dass die Formel erfüllbar ist.
Und das zweite mache ich tatsächlich ja eigentlich gar nicht.
Also ein Grafen, der eine Karkklicke enthält, so umwandeln,
dass eine erfüllbare Formel entsteht, das mache ich gar nicht.
Da kommt nur ein Graf raus, der nachher diese Eigenschaft hat,
aber ich kriege ja nicht einen Grafen und wandel den um.
Das mache ich nicht, ne? Also das nur nochmal,
um zu betonen, dass ihr nicht mit dem Wissen arbeitet,
ob es eine Ja- oder eine Nein-Instanz ist,
aber man lässt es natürlich insofern einfließen, als dass man,
man möchte ja eine korrekte Reduktion angeben und die ist eben nur dann korrekt,
wenn Ja-Instanz auf Ja-Instanz abgebildet werden und Nein-Instanzen auf Nein-Instanzen.
Aber man benutzt eben das Wissen, dass es
eine Ja-Instanz ist,
Man benutzt so das Wissen bei der Konstruktion,
dass man sagt, naja,
wenn das ein Jahr ins Netz ist,
dann müssen ja solche und solche Sachen gelten und dann kann ich irgendwelche Gadget-Konstruktionen machen.
Hat man L1-1 auf L2 reduziert und weiß,
dass L1 entscheidbar ist?
Kann man jetzt
auch in zwei entscheiden
Musik Ungefähr ausgeglichen? Ja, nein. Dann gucken wir
ja spaßeshalber gleich mal, was bei der nächsten Frage rauskommt.
Es ist quasi, wer es gerade nicht mitgekriegt hat,
es ist quasi fast das Gleiche.
Hier steht jetzt L2 statt L1 und hier steht L1 statt L2.
Also das ist quasi fast die gleiche Frage.
Aber jetzt weiß ich, dass L2 entscheidbar ist.
Und die Frage ist, ob ich jetzt auch weiß,
dass L1 entscheidbar ist
Musik Da ist ein
eindeutig eindeutig eindeutigeres Bild
Wenn ich L1 im Pulimialzeit auf L2 reduzieren kann und jetzt kann ich L2 entscheiden.
Wenn ihr das Bild von vorher so in Erinnerung habt,
dann wird ja jede Probleminstanz,
die jetzt zu L1 gehört, Ja- oder Nein-Instanzen,
die werden abgebildet, dann kann ich L2 entscheiden,
dann kann ich die gleiche Antwort für meine Probleminstanz in L1 geben.
Hergo habe ich L1 entschieden. Wenn es eine Jahrinstanz ist,
dann wird das auf eine Jahrinstanz von L2 übertragen.
Da sagt mein Algorithmus, ja, sage ich
auch für die Probleminstanz von L1 ja, bin fertig.
Genauso bei der Nein-Instanz, so eben mit Nein.
Also entscheide ich dieses Problem. Jetzt kann man sich noch überlegen,
hierbei zweitens, nur wenn man auf die poleminelle Zeitschranke bei der Reduktion verzichtet,
Man kann auf die verzichten und es gilt trotzdem weiterhin.
Aber wenn ich das zeigen kann und der 2 ist entscheidbar,
das ist ja schön, dann ist L1 auch entscheidbar.
Aber das würde sogar weiterhin gelten, wenn ich hier auf die Reduktion,
auf die Zeitschranke bei der Reduktion verzichten würde.
Also wenn ich so eine Reduktion angeben kann,
ohne Zeitschranke und L2 ist entscheidbar, dann ist auch weiterhin L1 entscheidbar.
Also da stimmt es. Aber bei dem vorherigen,
bei dem hier, ist das jetzt das vorherige Jahr,
da war es ja ausgeglichen zwischen Ja und Nein.
Was ist da das Problem? Also da ist Nein richtig
, aber warum
Wenn ich weiß, dass ich L1 entscheiden kann,
warum kann ich jetzt nicht L2 entscheiden?
Was ist da das Problem? Warum klappt die Argumentation von ihm
nicht? Genau. Für jedes aus L1 muss es irgendwas
auf der Seite von L2 geben, aber andersrum nicht zwingend.
Und da steckt drin, ich erwische vielleicht ja gar nicht alle aus L2.
Und ich habe auch gar nicht so eine Berechnung,
um das in die andere Richtung zu machen.
Also wenn ich L2 entscheiden möchte,
dann kriege ich eine Probleminstanz von diesem Problem
Und dann stehe ich da und denke so, ja,
und nun, jetzt könnte ich vielleicht alle Probleminstanzen aus L1
durchgehen und dir irgendwie übertragen und hoffen,
dass ich da irgendwann mal ein Problem, diese Probleminstanzen aus L2 kriege.
Aber erstens muss die gar nicht erfasst werden.
Und zweitens ist das kein Entscheidungsalgorithmus, sondern bestenfalls einer,
der das aufzählt. Aber auch da, das klappt nicht.
Also da ist es nein, das genügt leider nicht.
Und hier ist es ja. Und jetzt kann man sich noch überlegen,
wenn das hier, wenn ich L2,
wenn L2 nicht nur entscheidbar ist,
sondern wenn das in P liegt,
also im Polinialzeit entschieden werden kann
Ist jetzt L1 auch in P oder nicht? Also wir ersetzen das,
hat man L1 in Polymnialzeit auf L2 reduziert und weiß,
dass L2 in P ist,
ist dann auch L1 in P.
Ja oder nein
Genau. Also Idee ist,
ich mache einmal die Reduktion in Polynialzeit,
dann entscheide ich L1, das geht auch im Polymialzeit,
da habe ich zwei Polynome, wenn ich die addiere,
bin ich immer noch im Polyomialzeit.
Das klingt fast gut. Wo ist da noch ein Fehler,
den kann man fixen,
aber wo ist da noch ein Fehler?
Was stimmt nicht ganz?
Habe ich nicht verstanden. Ja. Nein, nein, ich habe die Frage umgewandelt.
Ich habe eine andere Frage gestellt, ich habe die Frage gestellt,
dass L2 jetzt MP ist und jetzt ist jetzt auch L1 MP,
ja oder nein, das habe ich gefragt.
Genau, ja, hat er auch gesagt und er hat es auch begründet,
er hat es auch gut begründet und ich habe trotzdem gesagt,
ach, gefällt mir noch nicht ganz.
Er hat gesagt, um es nochmal zu wiederholen,
er hat gesagt, Kim, korrigiere mich,
wenn ich es falsch wiederhole, aber du hast gesagt,
so grob, ein Polynon für die Reduktion,
ein Polynom um L2 zu entscheiden.
Zwei Polynome addiert, das ist immer noch ein Polynom.
Ich habe die Frage umgewandelt. Ich habe gesagt,
L2 ist NP. Das habe ich jetzt viermal gesagt.
Danke. Wann erst überzeugen wir davon, dass ich das gesagt habe?
Das ist gut. Also, wo hakt das noch?
Könnt ihr euch was vorstellen, wo das hakt?
Man kann das fixen, aber die Aussage,
es sind zwei Polynome, also es ist die Addition,
von denen auch ein Polynom,
die ist fast richtig.
Da muss man noch aufpassen
Oder anders formuliert, kannst du genau die Laufzeit sagen,
wenn die ursprüngliche Eingabeinstanz länger N hat, ursprüngliche Eingabeinstanz länger N.
Und der hier wird mit einem Polynomen Kuh entschieden und da
brauchen wir als Polynom P. Was ist das jetzt? Genau,
untere Schrank brauchen wir ja auch gar nicht,
wir wollen ja nur Polynomen,
aber jetzt würdest du so grob sagen, nimm mir mal an,
die Reduktion dauert P von N viele Schritte
Und das hier zu entscheiden, dauert Kuh von in viele Schritte.
Dann habe ich P von N plus Kuh von N
oder halt das größere Verband oder sowas.
Und genau da hakt es ein bisschen. Das stimmt nicht
ganz. Nee, nee, das hat er auch gesagt.
Er meinte ja dir die beiden. Sieht gut aus.
Stimmt nicht ganz. Ja, da geht es jetzt in
die richtige Richtung. Das Ende kann was anderes werden.
Ja. Ja, genau. Aber du hast eigentlich schon vorher
alle Mittel zusammen, um das gut zu beschreiben. Wenn du,
also bei dem, was wir ursprünglich gesagt hatten,
P von N plus Q von N, da würde drinstecken,
die Eingabeinstanz für die Reduktion hat die Länge N und Dienstanz,
die ich dann ausrechnen möchte,
hat auch die Länge enden.
Jetzt sagst du schon richtig, das muss ja
gar nicht
so sein
Wenn ich hier diese Reduktion mache,
die P von N viele Schritte dauert,
jetzt kommt eine Probleminstanz raus, mit der ich testen will,
ob die in L2 drin ist oder nicht.
Wie groß kann die sein? In dem,
was wir eben gesagt haben, haben wir nämlich behauptet,
die ist N groß, muss sie ja gar nicht.
Ja, darauf läuft es hin, dass die Probleminstanz KP
von N groß werden. Ich mache hier eine Reduktion,
die dauert P von N viele Schritte. Das,
was dabei entsteht, kann maximal P von N viele Schritte haben,
weil so viele Schritte habe ich Größe sein.
So viele Schritte habe ich ja gerade gemacht.
Und das für diese Probleminstanz teste ich jetzt,
ob sie in L2
drin ist
Und dann brauche ich Kuh von P von N viele Schritte.
Also bin ich im P von N plus Kuh von P von N.
An der Stelle denkt man noch so, ja okay, kann man fixen?
Super. Das klappt so lange, wie man das konstant
oft macht. Wenn man poliniumiell oft das machen darf,
also wenn ich quasi so einen Algorithmus habe, der Laufzeit-Endquadrat,
und ich rufe den irgendwie poliniumiell oft mit sich selbst auf,
dann kriege ich ein Problem.
Endquadrat in sich reintun, N hoch 4,
N hoch 4 in Endquadrat reintun, N hoch 8,
N hoch 16, N hoch 32. Wenn ich das eine
konstante Anzahl von Malen mache, alles super,
bleibt ein Polynom, wenn ich das poliniumiell oft mache,
kriege ich ein Problem,
habe ich plötzlich
exponentielle Laufzeit
Aber hier nur, dass man jetzt einmal darauf schult,
wie lange das da dauert. Aber wichtig zu merken,
wenn das MP ist, dann klappt das MP.
Oh, da war ja noch eine vierte.
Wir werden es übersehen. Das Ganze nochmal mit Unentscheidbarkeit
statt Entscheidbarkeit
Musik Wenn L1 unentscheidbar ist, dann auch L2.
Es gibt ja nur unentscheidbar und entscheidbar
Wenn der 1 Unentscheidbar ist,
dann auch L2. Wenn wir jetzt mal annehmen,
dass das nicht gilt, dann müssten wir ja zeigen können,
wenn L1 unentscheidbar ist, ist es okay, wenn L2 entscheidbar wäre.
Wenn das nicht okay ist, dann habe ich gerade den ersten bewiesen.
Also das müsste okay sein. Wenn ich das aber machen könnte mit dem,
was ja eben mit großer Mehrheit bestimmt habt,
wenn ich das machen könnte, wenn ich wüsste,
L2 ist entscheidbar, gerade mit großer Mehrheit festgestellt,
dann muss auch L1 entscheidbar sein.
Ja,
die Frage von davor
Dir hat er gesagt, wenn ich weiß, dass er
zwei entscheidbar ist, dann muss auch eins entscheidbar sein.
Reduktion machen, Problem entscheiden, habe ich das ursprünglich entschieden. Wenn ich jetzt hier habe,
L1 ist unentscheidbar, und L2 muss nicht unentscheidbar sein,
also es gibt die Möglichkeit, L1 ist unentscheidbar,
L2 ist entscheidbar, naja, dann habe ich mit dem vorherigen Satz,
muss dann ja L1 entscheidbar sein,
das kann also nicht sein.
Also muss hier das erste, wenn ich weiß,
dass L1 unentscheidbar ist und ich gebe so eine Reduktion an,
dann weiß ich auch,
dass L2 unentscheidbar ist
Und aus dem ersten, da kann ich wieder nichts machen,
mit einer ähnlichen Argumente,
aus dem zweiten, da kann ich wieder nichts machen,
mit der ähnlichen Argumentation wie vorhin auch,
wenn ich weiß, dass L2 unentscheidbar ist,
dann heißt das noch nichts für L1. Ich kann ja so eine Reduktion angeben und dann ist L2 halt nicht entscheidbar,
ist das halt so.
Also das erste klappt super. Und im Grunde genommen habt
ihr das auch schon gemacht, bei diesen ganzen Unentscheidbarkeitsbeweisen,
wo wir vom Halteproblem gekommen sind und so,
da haben wir im Grunde genommen das Halteproblem,
was unentscheidbar ist, auf neues Problem reduziert.
Da ist es nur deswegen ein bisschen anders,
weil man da nicht diese pointunielle Zeitschranke braucht und man
im Grunde genommen das Problem mehrfach aufrufen darf
Aber diese Art von Reduktion haben wir da angegeben. Gut,
jetzt zur Nachbereitung und das, was wir eben schon diskutiert haben.
Wenn ich zwei Probleme habe, ich kann das eine in Polymialzeit auf das andere reduzieren.
Und wenn ich jetzt weiß, L2 ist ein P,
dann ist auch L1 in P. Genau mit der Idee,
die wir eben mündlich herausgearbeitet haben,
wenn man sich mal so aufschreibt, was man alles weiß,
wegen der Reduktion weiß ich, es gibt so eine Reduktionsfunktion,
die ich im Polymialzeit berechnen kann,
mit der Eigenschaft XNL1. Genau,
dann werden FOX
in L2 ist
Und wenn ich jetzt weiß, L2 ist MP, dann weiß ich,
ich kann ja zwei mit so einem Algorithmus A2 im Polymialzeit entscheiden.
Und damit habe ich schon alle Mittel. Ich mache einmal
die Reduktion und dann wende ich A2 an. Und wenn mir A2 sagt,
F von X ist in L2, dann weiß ich,
X ist in L1 und wenn man sagt,
F von X ist nicht in L2, dann weiß ich,
X ist auch nicht in L1. Bin ich fertig.
Also der Algorithmus, der eins im Polymialzeit entscheidet,
arbeitet, wie folgt er, berechnet er von X und
dann entscheidet er um F von X in L2 drin ist oder nicht.
Und wenn hier halt A2 ja sagt,
sage ich auch ja und wenn A2 nein sagt,
sage ich auch nein und wegen eben dieser Eigenschaft wegen
der Korrektheit der Reduktion ist dann auch dieser Algorithmus A1 korrekt
Dann löst da schon mal das Problem L1 und jetzt müssen wir noch zeigen, dass der auch im Polymialzeit arbeitet. Genau das,
was wir vorhin diskutiert haben,
wenn der hier in Polyno in Polymialzeit möglich ist,
die Reduktionsfunktion und der hier, dann ist das grob so,
als würde ich die beiden addieren und dann muss ich halt an der einen Stelle auch nochmal aufpassen,
dass ich dann eben sage,
da ist nochmal der Algorithmus und ich kann jetzt F in Polymialzeit berechnen und dann weiß ich,
das, was rauskommt,
das ist jetzt das Ergebnis von X kommt rein,
ich berechne F von X,
das ist irgendein Wort und das kann eben maximal diese Länge von XhochC haben.
Das ist halt die Laufzeitschranke für den Reduktionsalgorithmus.
Und wenn ich den jetzt in A2 berechne,
dann kommt das eben hier wieder rein.
Dann habe ich Ophon X hoch zehnmal D. Also arbeitet der in
dem Polynum. Das erste hier ist das Polynum des Reduktionsalgorithmuses.
Und das zweite ist das Polynom von A2. Das ist im
Grunde genommen P von N plus Q von P von N.
Und dann hat man hier wieder,
X war die ursprüngliche Eingabelänge und dann oben zehnmal D,
zwei Konstanten, auch wieder ein Polynom,
alles super
Okay. Und dann kann man eben daraus Schlussfolgern,
wenn ich jetzt so ein Problem habe,
für das mir vielleicht kein Algorithmus einfällt, ich es aber hinkriege,
die Probleminstanz in andere Probleminstanzen umzuwandeln mit dieser Reduktion,
dann kann ich den Algorithmus,
den ich vielleicht für das andere Problem habe, nutzen,
um mein ursprüngliches Problem zu lösen.
Habe ich das Problem vielleicht nicht direkt attackiert,
habe aber trotzdem eine schöne Möglichkeit gefunden, das zu lösen.
Sowas kann man ja sonst auch gut benutzen und wird ja
auch benutzt. Genau, da steht es nochmal,
dass sich das jetzt durch ein anderes einfach lösen kann
Genau. Fragen, Fragen, Fragen. Dann kommt jetzt
dieser Übergang zur NP-Vollständigkeit. Bis jetzt wissen wir,
was P ist, wir wissen, was NP ist.
Wir wissen, was eine Reduktion ist. Wir können auch schon
mit der Reduktion hier so Sachen machen, die sagen,
okay, Probleme durch andere Probleme lösen, Entscheidbarkeit,
Unentscheidbarkeit, hat man sich auch noch mal kurz angeguckt,
aber das für uns jetzt wichtig ist, hier dieses Arbeiten mit Polemialzeit.
Und der Übergang zur NP-Vollständigkeit, der funktioniert jetzt wie folgt.
Wenn ich mir überlege, wenn ich sowas hier zeigen kann,
Ich kann A in Polymialzeit auf B reduzieren.
Dann kann man sagen, A ist höchstens so schwierig wie B. Deswegen auch mit diesem Kleiner gleich.
Wobei man jetzt so Aussagen wie höchstens und mindestens und so,
die stehen jetzt, steht hier unten auch noch mal in der Anmerkung,
das bezieht sich jetzt auf polynumiellen Mehraufwand, dass man quasi sagt,
wenn ich Pudding mir länger brauche oder so, das ist alles okay.
Also solange ich im P bleibe, ist alles gut.
Deswegen macht es hier Sinn zu sagen,
A ist höchstens so schwierig wie B,
weil wenn ich B jetzt schnell lösen kann,
in P oder so, dann haben wir eben gesehen,
dann kann ich A auch schnell lösen.
Nicht also ein langsam,
wenn wir nur ein langsamer Algorithmus für A,
ein Feld, aber ein schneller für B,
dann kann ich diesen schnellen für B jetzt eben benutzen,
dank der Reduktion,
um auch einen schnellen für A
zu haben
Also wird es nicht, es ist nicht möglich,
dass A nur in Exponentialzeit lösbar ist und B in Pudelmialzeit.
Sobald ich einen schnelleren Algorithmus für B habe, benutze ich
die Reduktion, benutze schnellen Algorithmus und habe einen schnellen Verar.
Und jetzt ist bei dem Übergang zur NP-Vollständigkeit,
man will ja jetzt was erfassen, dass man sagt,
ein Problem ist das Schwierigste in seiner Klasse.
Und um das zu machen, probiert man jetzt alle Sprachen
aus NP, auf eine neue Sprache zu reduzieren.
Und dann gilt ja für alle Sprachen aus NP, dieser Zusammenhang hier,
dass sie also höchstens so schwierig sind wie unser neues Problem.
Und dann kann man sagen, hey,
dann ist das neue Problem,
gehört zu den schwierigsten
Wenn ich das jetzt nämlich schnell lösen kann, kann ich alle eine NP schnell lösen.
Ich habe ja gerade alle aus NP darauf reduziert.
Wenn ich das eine jetzt schnell lösen kann,
dann kann ich alle einen NP schnell lösen.
Und wenn man sich jetzt überlegt, es gibt einen NP zigtausend Probleme,
an der zigtausend sehr intelligente Menschen lange,
lange Zeit gebastelt haben und keinem ist ein schneller Algorithmus eingefallen.
Wenn man jetzt also ein neues Problem hat und man kriegt es hin,
jede Sprache aus NP darauf zu reduzieren, dann kann man sagen,
oh, dann ist es wohl sehr unwahrscheinlich,
dass man das jetzt plötzlich schnell lösen kann,
weil ich dann dieses ganze Gros an Problemen, alles,
was in NP rumflattert,
das kann ich auch alles schnell lösen.
Und das ist halt
sehr unwahrscheinlich
Das macht dann, die Auswahl ist dieses LMP,
ist sehr unwahrscheinlich, weil dann P gleich NP gelten würde.
Problem dabei ist, jede Sprache aus NP,
auf eine neue Sprache zu reduzieren, sind halt unendlich viele.
Das macht jetzt nicht so viel Spaß und endlich viele Sprachen
auf eine neue zu reduzieren. Also so ganz praktikabel,
das ist an der Stelle noch nicht. Kann man
gleich nochmal gucken, wie man da drum herum kommt.
Aber erstmal kann man ja so damit arbeiten.
Sehen wir auch gleich, wie man dann da drum herumkommt.
Erfasst genau das, was wir im zweiten Punkt erfasst,
ist genau das, was da eben schon stand.
Eine Sprache wird als NP vollständig bezeichnet, wenn,
zuerst der zweite Punkt hier, wenn ich jede Sprache,
Strich aus NP, in Polymialzeit auf L reduzieren kann.
Also dann ist L gehört dann zu den schwierigsten Problemen so.
Und dann sage ich noch, außerdem möchte ich noch,
dass Alien NP ist, damit erfasse ich dann gerade,
dass ich sage, okay,
es ist in NP und es ist mindestens so schwierig wie all die anderen da drin,
also gehört es zu den schwierigsten in seiner Klasse.
Und wenn man nur die zweite Eigenschaft zeigen kann,
dann sagt man,
die Sprache ist NP schwierig
Weil man damit halt ausdrückt, die ist so schwierig,
mindestens wie alle, die in NP,
vielleicht aber noch viel, viel, viel schwieriger.
Die muss gar nicht dringend in NP sein,
die kann ja noch weit jenseits dessen liegen.
Aber wenn sie eben auch in NP ist,
dann sagen wir, sie ist irgendwie vollständig,
die ja fast quasi vollständig die Komplexität dieser Klasse NP.
Und sonst ist sie NP schwierig. Und als Abkürzung hat
sich so ein bisschen eingebürgert für NP vollständig NPC zu nehmen,
NP Complete, deswegen C.
Und für NP schwierig, nimmt man oft NPH für NP
Hart.
Im Englischen
Okay. Sonst kennen wir alles da vorhin schon.
Also wir wissen schon erstens, wie man für ein Problem nachweist,
dass es in der NP ist. Wir wissen für zweitens,
wie man Reduktionen angibt, was wir noch nicht so genau wissen,
ist, wie man jedes Problem irgendwie auf einen reduziert.
Das klingt irgendwie unglücklich. Wenn da stehen würde,
nur eins, das würden wir hinkriegen können,
so eine Reduktion angeben, aber unendlich viele.
Aber das ist erstmal die Definition für NP vollständig.
Und das, was man nachher machen wird, ist,
man wird einmal alle Probleme aus NP auf ein spezielles Reduzieren,
dass wir dieses Erfüllbarkeitsproblem in der Aussagenlogik sein.
Deswegen hat das auch so eine zentrale Rolle.
Und danach kann man quasi über so eine Transitivitätsidee immer einfach
von diesem Erfüllbarkeitsproblem ausgehen und das auf ein neues reduzieren.
Dann weiß man nämlich, ich kann alle auf Erfüllbarkeit
reduzieren und Erfüllbarkeit auf dieses Neue. Also kann ich auch
gerade alle über zwei Schritte auf das Neue reduziert.
Das ist dann so die Transitivitätseigenschaft. Sehen wir auch gleich nochmal
, dass das funktioniert. Erstmal zwei ganz wichtige Theorieme,
warum es jetzt Sinn macht zu zeigen, dass ein Problem NP vollständig ist.
Nehmen wir mal an, wir könnten da schon und wir
haben jetzt Probleme, die NP vollständig sind.
Wenn ich das jetzt habe, ich habe jetzt ein 11,
von dem ich nachgewiesen, dass es NP vollständig ist.
Und wenn ich jetzt plötzlich zeigen könnte,
dass es NP ist, Dann ist P gleich NP.
Und das glaubt man eben nicht, weil dann, wie gesagt,
alle Probleme aus NP und ein paar haben wir ja schon gesehen,
die müssten dann plötzlich alle schnell lösbar sein.
Und das ist halt sehr unwahrscheinlich. Deswegen sagt man,
sobald ich für ein Problem nachgewiesen habe,
dass es NP vollständig ist, ist es sehr unwahrscheinlich,
dass ich dafür einen effizienten Algorithmus finde und da muss ich eben was anderes machen.
Und der Beweis dafür geht relativ schnell, der verknüpft einfach nur das,
was wir eben gemacht haben und die Definition von NP vollständig.
Wenn man ein Problem hat, das NP vollständig ist und NP,
jetzt will ich ja zeigen, dass P gleich NP ist,
P-Time-Menge von NP weiß ich schon, das gilt immer.
Jetzt muss ich noch zeigen, dass jedes Problem aus NP auch ein P ist.
Wenn ich also ein Problem nehme, ey, Strich,
das in NP ist, dann weiß ich,
wegen der Definition von NP Vollständigkeit, ich kann L-Strich auf L reduzieren.
Und wenn ich nur noch weiß, dass LNP ist,
naja, dann mit dem vorherigen Satz zwei Polynome hintereinander sozusagen,
weiß ich,
dass L-Strich auch in P ist und dann habe ich gerade für jedes L-Strich aus NP gezeigt, dass es auch in P ist.
Also unter der Annahme, dass es ein Problem gibt,
dass NP vollständig ist und NP unter der Annahme folgt sofort
P gleich NP
Und nochmal eine äquivalente Formulierung, wenn es ein Element gibt,
das ein NP ist und nicht NP, dann weiß ich,
dieser Schnitt hier muss leer sein. Das ist quasi die Umkehrung,
weil wenn der Schnitt nicht leer ist,
dann passiert gerade das, was da drüber steht,
dass nämlich P gleich NP ist, also muss,
wenn es ein Problem gibt, das in NP ist,
aber nicht in P, wenn die Klassen also echt unterschiedlich sind,
dann muss dieser Schnitt leer sein.
Und noch ein wichtiges Problem, noch ein wichtiges Theorie,
da brauchen wir noch ein Lämmer gleich für
Genau, das habe ich zwischendurch alles schon erzählt,
aber dass ihr das nochmal zur Nachbereitung da stehen habt,
was eben die Bedeutung von diesem PNP ist und warum man denn glaubt,
dass wenn ich nachgewiesen habe, dass ein Problem NPV ständig ist,
dass es dann wohl nicht NP liegt.
Mit der äquivalenten Formulierung von der Folie vorher,
da wird ja auch gesagt, wenn es ein Problem gibt,
das in NPS, aber nicht in P,
dann ist eben dieser Schnitt NPC und P auch leer,
eine äquivalente Informierung
Und es gibt eben noch ganz viele andere Sichtweisen,
wie man auf dieses PNP-Problem gucken kann, also nicht nur über diese Probleme,
sondern auch noch über etliche andere Sachen.
Und bei all diesen Sichtweisen kann man nicht glauben,
dass P und NP das Gleiche sind.
Und wenn die eben nicht gleich wären, dann würde
eben folgen NPC und P, der Schnitt ist leer.
Und deswegen glaubt man da auch nicht dran. Weil es
eben so viele Sichtweisen gibt, darauf zu gucken,
wegen all dieser glaubt man, dass P ungleich NP ist.
Und das würde eben bedeuten, für ein NP-vollständiges Problem gibt
es keinen effizienten Algorithmus
Okay. Da nochmal jetzt die Transitivität, damit man dahin kommt,
ein Verfahren zu haben, um Probleme gut als NP vollständig nachzuweisen.
Da brauchen wir einmal die Transitivität. Das geht so ähnlich wie das,
was wir vorhin gemacht haben für Probleme anders lösen.
Also L1 im Pulimalzeit auf A2 reduzieren und wenn ein L2 jetzt NP ist,
dann auch L1. Das hier funktioniert fast genauso,
weil es ja auch einfach zwei Polynome sind,
die ich hintereinander ausführe.
Also wenn ich die Aussage hier ist,
wenn ich L1 auf A2 reduzieren kann und A2 auf L3,
dann kann ich auch L1 auf L3 reduzieren und die Idee
ist im Grunde genommen,
ich wende beide Reduktionen hintereinander an und bin fertig
Also wenn ich F und G habe als Reduktionsfunktion für die
erste und zweite Reduktion, dann berechne ich zuerst F von X.
Irgendwie ein Polymnialzeit-P von End für so ein festgelegtes Polynom.
Und dann berechne ich die nächste Reduktion und da kommt jetzt
ja eben F von X rein und ich berechne,
gehe von F von X.
Die Zeit dafür ist dann eben ungefähr Q von P
von N. Ku von F von X-Star.
Ku von P von N. Und dann habe ich eben so
einen Aufwand in P von N plus Kuh von P von N
maximal nach oben schränkt.
Ich muss ja nicht in jedem Schritt
was für die Ausgabe produzieren
Genau, und die Eigenschaft, das tatsächlich X von X&L1 ist genau dann,
wenn G von F&X in L3 ist, das folgt direkt aus den Reduktionen.
X ist in LL1 genau dann, wenn F von X&L2
ist und F von X ist in L2, genau dann,
wenn G von F von X&L 3 ist, beides hintereinander ausgeführt.
Ergo, diese Polynialzeitreduktion ist transitiv und das kann ich benutzen für NP,
um NP Vollständigkeit, dann nicht jedes Mal für alle Probleme aus NP
eine Reduktion eingeben zu müssen, sondern eben nur noch für eins.
Dafür brauche ich gehen hier. Das zweite wichtige Theorien.
Wenn ich eine Sprache L habe und ich habe ein NP vollständiges Problem,
L Strich, Und über L will ich jetzt wissen,
ist das irgendwie MPV ständig oder nicht oder so.
Wenn ich jetzt so eine Reduktion angeben kann,
also von dem einem NPV vollständigen Problem, das ich habe,
auf dieses neue Problem, dann weiß ich, mein neues Problem L,
das ist NP schwierig und wenn es zusätzlich noch ein NP ist,
sogar NP vollständig.
Und da ist einfach die Idee, diese Transitivität,
die wir eben gesehen haben, die halt zu benutzen.
Was ich hier ja zeigen muss,
wenn ich zeigen will, LSNP schwierig,
ich muss zeigen, dass ich jedes Problem aus NP
darauf reduzieren kann
Elstrich ist ja schon ein NP vollständig. Das heißt,
ich kann jedes Problem aus NP auf L-Strich reduzieren.
Und ich möchte jetzt aber gerne jedes Problem aus NP auf L reduzieren.
Aber ich kann ja jetzt alten Beliebiges aus NP nehmen, dieses L-Strich-Strich.
Das kann ich auf L-Strich reduzieren. Und die Reduktion,
die habe ich ja auch von L-Strich auf L. Und mit
der Transitivität kann ich eben auf L-Strich reduzieren und auf L,
also insgesamt auf L, unheimlich fertig.
Dann ist L-NP schwierig. Ich habe jedes Problem auf NP
da aufreduziert. Und wenn es zusätzlich noch ein NP ist,
Definition NP vollständig
Klar, soweit. Also NP vollständig einführen, indem man sagt,
jedes Problem aus NP auf dieses neue Problem reduzieren,
dann nenne ich es NP schwierig,
wenn es zusätzlich noch NP vollständig in NP ist,
dann ist es NP vollständig.
Und die ganzen Theorien, die hier nachkommen,
die helfen einem nur zu verstehen, warum das Sinn macht,
das so zu tun und so zu definieren und um Verfahren gleich zu haben,
um neue Probleme als NP vollständig nachzuweisen.
Da ist das Verfahren. Wenn ich jetzt eine neue Sprache
habe und ich möchte die als NP vollständig nachweisen,
dann zeige ich zuerst,
dass sie in NP ist
Dann wähle ich irgendein NP-vollständiges Problem aus, aus meinem Fundus,
den wir gleich anfangen werden, aufzubauen.
Und dann gebe ich einen Algorithmus an, der L-Strich auf
L reduziert. Das ist drittens, viertens, fünftens.
Die letzten drei Punkte. Also eine Reduktion angeben, zeigen,
dass die wirklich jede Instanz von L-Strich auf eine Instanz von L-Abbilde zeigen,
dass die Reduktion korrekt ist und dass sie im Polenialzeit abläuft.
Und das Problem, was wir gerade haben,
ist, wir haben immer noch kein einziges NP-V-ständiges Problem.
Sobald wir ein erstes haben,
können wir danach wegen dieser Transitivitätsgeschichte von dem ausgehen,
ein neues Problem als NP-vollständig nachweisen, dann haben wir schon zwei,
die wir benutzen können und immer so weiter.
Das macht es dann nachher
deutlich einfacher
Genau. Um im Verfahren eben so ein Dings auswählen
zu können, muss man erstmal gleich haben.
Josh, ich bin mir jetzt gerade nicht sicher.
Eigentlich habe ich noch irgendwo eine Frage-Session.
Ich weiß nicht, ob die jetzt kommt.
Da kommt sie. Okay, also Zusammenfassung. In P,
die Probleme, die ich empfunden Jahrzeit lösen kann,
in NP, die dich nicht deterministisch in Polymialzeit lösen kann?
Ich kann ein NP-Problem auf jeden Fall deterministisch in Exponentialzeit lösen.
Das geht auf jeden Fall. Geht ja aber manchmal auch schneller,
wenn ein Problem in NP ist,
schließt das ja erstmal nicht aus,
dass es auch ein P ist
Aber um zu zeigen, dass das wahrscheinlich eben nicht geht,
das ist wirklich in NP liegt und nicht in P,
zeige ich eben, dass es NPV-ständig ist.
Und die Begriffe, die wir hier so brauchten,
waren die fünfter unten. P, NP, NP,
schwierig, NPV-ständig und um die zu machen, eben die Reduktion.
Fragen? Fragen, erstens, zweitens, drittens,
okay, dann unter der Annahme P, Ungleich NP.
Wie hängen die Klassen P, NP und NPC?
Wie hängen die zusammen? Quasi, wie sieht das
Vendiagramm aus
Musik Musik 1, 2, 3, 4. Drei von,
also man kann das, man kann die entweder alle durchgehen und
dann so ausschließen, welche wohl nicht sein können und so.
Tatsächlich haben drei von vier eine Eigenschaft gemeinsam, die falsch ist.
Deswegen kann man drei von vier ausschließen. Ist auch gut,
soll ja nur eine richtige dabei sein,
drei von vier kann man ausschließen, die haben eine Eigenschaft gemeinsam,
welche.
Ganz oben?
Ja, du
Genau. Hier bei ersten, zweitens und viertens, bei erstens wird gesagt,
P ist, ignorieren wir mal das in der Mitte.
P ist eine Timemenge von NP Complete. Weil zweitens wird gesagt,
P ist eine Timemenge von NP Complete und bei viertens wird
auch gesagt, P ist eine Timing von NP Complete.
Also ohne zu gucken, was da sonst noch so steht.
Das kann nicht sein, weil das würde ja bedeuten,
es gibt ein Problem, dass ein P ist und NPV ständig,
nämlich jedes Problem, was ein P ist, ist,
nachdem ein P und NPV ständig.
Und dann würde ja gerade P gleich NP folgen,
was wir vorher andiskutiert haben.
Und dann werden sie ja gerade nicht ungleich.
Das ist irgendwie doof
Gibt noch mehr Gründe, warum die nicht schön sind.
Hier zum Beispiel bei erstens das NP eine Teilmenge von NP vollständig ist.
Das ist ja gerade andersrum definiert, dass jedes Problem,
das NPV ständig ist, soll auch in NP sein.
Und zusätzlich noch andere Dinge, also muss die Timing-Beziehung andersrum sein. Hier,
das geht schon so in die Richtung, wo man sagt,
ja, ja, ja, ja,
so NPC-Teilmenge von NP ist gut, das soll sein,
aber das erste hier P-Timing von NPC nicht gut.
Und beim vierten auch wieder,
NP eine Timingmenge von NPC und P eine Timing von NPC,
beides nicht gut
Und drittens, ne, Pene Timinge von NP,
ja, sogar eine echte, wenn wir die Annahmen haben,
P ungleich NP, da muss ja irgendwas geben,
was in NP ist, was nicht in P ist.
Das ist gut. Dann NPC eine Teilmenge von NP,
auch gut, ne, nach Definition einfach. Jedes Problem,
das NP vollständig ist, muss in NP drin sein.
Und jetzt kann man sich hier noch überlegen, so,
ist das okay, dahin zu schreiben,
dass das keine echte Teilmenge ist, so, ja,
das weiß man, ne, wenn NPC gleich NP wäre,
und P ist ja eine Teilmenge von NP,
dann wäre plötzlich doch wieder P eine Timing von NPC.
Auch doof, also gilt hier echte Teilmenge,
und hier wird noch gesagt,
P und NPC sind tatsächlich
des Jugend
Also als, wenn Diagramm,
habt ihr irgendwie so einen Kreis für P,
dann habt ihr drumherum einen großen Kreis für NP.
Und dann habt ihr oben so einen Blobble-NPC,
der ist oben irgendwo neben NP drin,
aber hat mit dem P nichts zu tun.
Also quasi ein Kreis P, ein Kreis NPC und einen großen NP-Kreis drumherum.
So sieht das, wenn ein Diagramm aus.
Und jetzt kann man sich noch fragen, geht ja auch schlimmer,
wenn NPH für die NP schwierigen steht,
wo wird das
jetzt noch so angesiedelt
Musik 1, 2, na hier, die,
wenn ihr Wenddiagramme malt, die vier Sachen,
die gehen genau alle Möglichkeiten durch, NPH-Timing von NPC
heißt ihr habt so ein NPH-Blobbel und drumherum ist NPC,
zweitens genau andersrum, ihr habt so ein NPC-Blobbel drumherum,
ist NPH
Drittens heißt, die haben gar nichts gemeinsam,
also ihr habt hier so ein NPC-Blobbel da
, so ein NPH-Blobbel, die haben nichts miteinander zu tun.
Und viertens heißt, der Schnitt ist nicht leer.
Also Hirnkreis, Dahnkreis, im Schnitt passiert irgendwas.
Aber NPC hat auch noch Dinge, die NPH nicht hat,
die sind dann so auf der linken Seite.
NPH hat auch noch Dinge, die NPC nicht hat,
die sind so auf der rechten Seite.
Alle vier Möglichkeiten, die es so gibt, ne?
Die Frage ist, welche davon stimmt. Wenn erstens stimmen würde,
dann NPC sagt ja, ich möchte bitte alle Eigenschaften haben,
die NPH-Probleme auch haben und noch weitere.
Auch noch zusätzlich ein NP zu sein.
Da kriegt ihr ja nicht mehr,
ihr kriegt weniger
Also jedes Problem, das NP vollständig ist, ist auch NP schwierig, aber nicht andersrum.
Ein Problem, das NP schwierig ist, ist zwar,
erfüllt eine Eigenschaft von NP vollständig, aber nicht alle.
Also klappt der zweite Punkt, dass man irgendwie sagt,
wenn ein Problem NP vollständig ist,
dann ist es auch NPHd, aber nicht jedes Problem,
das NPHd ist, ist auch NP vollständig,
weil eben diese erste Eigenschaft in NP zu sein nicht gelten muss.
Und drittens und viertens ist es eh Unsinn. Und wenn ihr das als Wenn-Diagramm malen würdet,
das wird dann schon so ein bisschen komplizierter,
dann macht man das so wie eben, so ein Blobble P,
so einen großen NP-Blobble drumherum und jetzt macht man das NPC irgendwo an Rand,
damit man dann sagen kann, das NPH ist alles,
was NPC ist und geht noch drüber hinaus.
Also geht irgendwie aus dieser Klasse NP hinaus
Wenn ich das schon weiß, so, ich weiß,
eins ist NPV-ständig, ich weiß,
die Komplexität von elf Fragezeichen ist mir unbekannt und welche Reduktion
muss ich jetzt machen, wenn ich zeigen will,
dass elf Fragezeichen NPV
vollständig ist
Musik Wenn ich elf Fragezeichen auf LNPC reduziere,
also das erste, dann kann ich nicht,
denkt an diese Transitivität von dem Kleiner gleich,
dann kann ich ja jetzt nicht alles aus NP auf L-Fragezeichen reduzieren.
Ich habe dann irgendwie Probleme, dass ich auf LNPC reduzieren kann und
ich habe elf Fragezeichen, dass ich auf LNPC reduzieren kann.
Und dann weiß ich quasi, ah, kleiner gleich B und Kleiner gleich B,
aber da kriege ich irgendwie keine Kette hin.
So, das ist irgendwie unglücklich. Wenn ich das zweite mache,
dann kann ich jetzt ein beliebiges Problem aus NP nehmen,
auf NPL, NPC reduzieren und das dann auf elf Fragezeichen reduzieren.
Also habe ich alles aus NP, auf LNPC und dann auf elf Fragezeichen reduziert.
Und das würde ich ja machen für NP Vollständigkeit. Ich muss zusätzlich noch zeigen,
dass elf Fragezeichen tatsächlich in NP liegt so,
aber besser wäre je gewesen, um zu zeigen,
dass das NP schwierig ist,
aber den Schritt muss ich auf jeden Fall auch machen mit der Geduktion.
Also zweitens, ne? Und beide Reduktionen brauche ich
auch nicht angeben, da mache ich zu viel.
Viertens ist es ganz schlecht, also welche Richtung ist nicht
wegen der Eigenschaft der Reduktion egal?
Bei der Reduktion kriege ich ja nur eine Richtung
Aber das zweite muss ich machen.
Beliebiges Problem aus NP kann ich dann auf NPC reduzieren,
weil ich da schon weiß, dass es NPV-ständig ist.
Und dann kann ich von da auf elf Fragezeichen reduzieren.
Dann habe ich alles von NPFL-Fragezeichen reduziert. Also immer die
Art von Reduktion von etwas, was ich schon kenne,
zu etwas, was ich noch nicht kenne.
Das zweite. Knappe Mehrheit mit zwei Punkten, relativ.
Und letzte knifflige Frage. Nehmen wir mal,
ich mache das doch so rum, wie ich das eigentlich
nicht machen soll. Hilft mir das bei irgendwas?
Weiß ich dann irgendwas
Musik Wieso drücken denn zwölf Leute B? Das ist doch
das, was wir eben auch schon ausgeschlossen haben.
Könnt ihr doch nicht machen, wie gemein. Nee,
das zweite kann ich stimmen,
das haben wir eben schon ausgeschlossen, dass wir gesagt haben,
naja, wenn ich das so rum zeige,
dann kann ich leider nicht Schluss folgen,
dass es irgendwie vollständig ist,
ich muss andersrum machen,
damit ich Schluss folgen kann,
dass es
der NPV vollständig ist
Erstens nichts Hilfreiches. Ja, Standpunktfrage. Kann sein,
dass man das nicht hilfreich findet. In NP,
ja, mit der gleichen Begründung wie bei dieser Geschichte,
ob die Sachen in P sind.
Wenn ich jetzt die Komplexität von Elf-Fragezeichen nicht weiß,
ich mache eine Polymial-Zeitreduktion auf LNPC und das löse ich jetzt in NP.
Dann habe ich genauso wie vorhin bei dieser Idee mit P,
ersten Polynom angewandt, dann noch ein Polynom,
auch wenn das jetzt nicht deterministisch ist.
Also habe ich insgesamt einen nicht deterministischen Algorithmus,
der im Polymialzeit abläuft. Halt erstmal eine deterministische Phase und
dann irgendwie was nicht deterministisch ist.
Also drittens funktioniert
Erstens kann man auch antworten, aber vielleicht findet man das
doch ja ganz hilfreich, dass es in einem Bier ist.
Und viertens nicht, weil das würde ja bedeuten wiederum,
wenn ich jetzt zeigen könnte, dass elf Fragezeichen in P ist,
dass dann plötzlich auch LNPC in P wäre.
Und das klappt ja auch wieder so rum nicht, sondern nur andersrum.
Also erbt das da auch nicht die Komplexität. Kann man
auch wieder sich mit dem Kleiner gleich so ein bisschen überlegen,
dieses kleine Gleichbedeutet, einfacher zu sein oder so,
wenn ich von etwas, von dem ich bisher nur bewiesen habe,
dass es einfacher ist, das L-Fragezeichen ist einfacher als LNPC.
Wenn ich von dem jetzt nachweise,
es ist tatsächlich einfacher, dann folgt ja nicht zwingend,
dass das andere jetzt auch plötzlich einfach ist.
Das kann ja weiterhin
irgendwie groß sein,
Also wenn ihr nachweist, irgendwie,
X ist kleiner als 10 und ihr stellt irgendwann fest,
ja, X ist 5,
ein Schluss macht man ja auch nicht die Schlussfolgerung,
dann ist 10, also 5 oder so,
sondern das 10 bleibt davon irgendwie unberührt.
Und hier halt auch, deswegen benutzt man ja gerade dieses Kleine gleich.
Also drittens ist richtig, knappe Mehrheit gegenüber der vierten Antwort
vielleicht, bei den anderen beiden leider nicht mehr.
Jetzt wiederholen wir die Fragen morgen einfach nochmal. Die sind
schon so ein bisschen kniffliger, ne? Also hier könnt ihr zum Üben,
wenn ihr die beiden Fragen euch nochmal anguckt,
macht mal die Wenddiagramme,
dann macht man sich grafisch so ein bisschen klar,
wie die Klassenzusammenhänge sind
Bei der ersten und zweiten, dass man quasi PNP,
NPC und NPH, dass man die in Van-Diagramm anordnen kann.
Das hilft. Und bei denen hier sich einfach nochmal klarmachen,
wie diese Reduktion genau definiert ist und wie NPV-Ständigkeit definiert ist.
Dass man halt weiß, von wo man wohin reduzieren muss.
Da nochmal zusammengefasst und mit den richtigen Begründungen.
Genau. So, und jetzt haben wir immer noch leider
kein Problem, das MPV-ständig ist. Das heißt,
diese schöne Idee, die wir hier vorne irgendwo haben,
dieses Verfahren wähle ein L-Strich aus.
Ja, das klappt im Moment noch nicht,
weil wir noch
gar keins haben
Irgendwie, das ist nicht so cool. Und um das erste zu kriegen,
wird man ja tatsächlich alle Probleme aus NP darauf reduzieren müssen.
Führt ja irgendwie keinen Weg daran. Wobei danach kann man dieses Verfahren benutzen und immer sagen,
jetzt gehe ich von einem los, von dem ich schon weiß,
dass es irgendwie vollständig ist und reduziere das.
Und das erste, von dem NPV-Ständigkeit nachgewiesen wurde,
Stephen Cook 1971, der hat nachgewiesen,
dass dieses Erfüllbarkeitsproblem der Aussagenlogik, dass das NPV ständig ist.
Das ist ein ganz schicker Beweis. Und zu der Zeit
dachte man noch so, ja, ist okay, so.
Dann kam 72 Carb und hat für 21 Probleme nachgewiesen,
dass die auch alle NP vollständig sind.
Und da ist dann Aufschrei durch die Community gegangen, dass man gesagt hat,
oh, jetzt gehen die plötzlich alle nicht effizient lösbar und so.
Und dann hat man erst gemerkt, was das für eine große Sache ist.
Bis dato hatte man von dem einen Problem das gezeigt,
dachte irgendwie, naja, okay, schade, aber hm.
Und dann ein Jahr später kam das nochmal mit 21 weiteren Problemen.
Und die Reduktion teilweise auch gar nicht so schwierig,
aber einfach dieser Knalleffekt, dass man sagen kann,
guck mal, all diese ganzen Probleme,
die durchaus relevant sind, weil man eben,
weil die quasi eine Abstraktion von in der Praxis auftretenden Problemen sind.
Also auch sowas wie Clique zu bestimmen oder so.
Das sieht irgendwie abstrakt aus, aber das ist halt oft der Kern,
der in irgendwelchen praktischen Problemen auftritt,
dass man das quasi machen muss und zusätzlich vielleicht noch mehrere andere Dinge.
Und da stellt man fest, oh Gott,
wenn das schon nicht geht,
dann geht das viele schöne drumherum, erst recht nicht.
Und das war dann
Carbs Paper
Dann haben sie auch beide dafür, ich glaube,
ein Jahrzehnt später, den Turing Award für gekriegt,
also die höchste Auszeichnung in der Informatik,
mit der man eben gewürdigt hat, was das für ein Durchbruch war.
Das sieht aus heutiger Sicht manchmal so aus, dass man denkt,
naja, liegt ja von der Definition irgendwie auf der Hand,
aber wenn man sich überlegt,
dass das alles noch nicht da ist und dann kommt ein und hat diese Idee,
dann ist das ein ganz schöner Durchbruch.
Ja, das hier, Erfüllbarkeit,
das erste NPV-vollständige Problem, Ist auch immer noch nützlich,
weil man quasi immer noch von satt ausgehen kann und
neue Probleme dann als NPV-ständig nachweisen muss.
Bei dem ersten muss man aber quasi alle Probleme aus NP auf dieses Problem satt reduzieren.
Das wollen wir nicht mehr im Detail gleich machen,
aber einmal kurz die Idee so ein bisschen mündlich antatschen,
wenn man zeigen will, dass das NPV vollständig ist.
Der Anfang ist einfach, haben wir auch schon gemacht.
Man zeigt, dass es in NP ist,
indem man für eine Formel alle Belegungen rät und dann testet,
ob da eine richtige dabei ist.
Oder mit der Verifikationsidee, ich kriege eine Belegung,
von der behauptet wird,
die macht die Formel wahr und dann überprüfe ich das
Und jetzt ist aber das Problem, wenn ich zeigen will,
dass das NPV ständig ist, dann muss man alle Probleme aus NP darauf reduzieren. Und für dieses,
alle Probleme aus NP, um das zu machen,
muss ich so losgehen, dass ich sage,
sei L ein Problem in NP und jetzt mache ich folgendes,
folgendes, folgendes und jetzt kommt eine Formel raus, die genau dann erfüllbar ist,
wenn meine ursprüngliches X in diesem Älteren war oder nicht.
Und alles, was ich aber weiß,
über ein Problem in NP ist,
dass es nun nicht die terministische Touring-Maschine gibt,
die das Problem entscheidet und die im Polemialzeit abläuft.
Mehr weiß ich nicht
Und genau das wird in die Formel reinkodiert,
indem man quasi die komplette Übergangsformel in die Tafel reinkodiert,
wenn ich so eine Instanz X habe und ich,
also wenn ich eine Sprache L habe, dann weiß ich,
es gibt nicht die terministische Touri-Maschine dafür.
Dann weiß ich, die hat irgendwie Zustände von Z0 bis
ZK und die hat irgendwie ein Eingabealphabet und so weiter.
So, das kann ich alles benutzen. Und dann weiß ich,
ich kriege so eine Eingabeinstanz X und die muss ich jetzt so in eine Formel umwandeln,
dass ich weiß, die Formel ist erfüllbar,
genau dann, wenn die Touring-Maschine X akzeptiert.
Und die ist Formel ist unerfüllbar, wenn die Tour Machine X eben ablehnt.
Und das, was man dann reinkodiert in die Formel,
ist, dass man quasi Aussagensymbole hat für,
wie das Wort am Anfang aussieht.
Also die konnten nicht das Wort, die Konfiguration.
Ich bin irgendwie im Zustand Q0 und dann kommt irgendwie das ganze Eingabewort.
Und dann mache ich mir quasi so eine Art Übergänge für
die ganzen Konfigurationsübergänge. Also dass ich sage, naja,
wenn ich jetzt irgendwie vier Möglichkeiten habe in der nicht-diterministischen Touring-Maschine was zu tun,
dann verknüpfe ich diese Sachen alle mit oder.
Und dann kommen wieder neue Worte raus.
Und dann kann ich die genau dann mit eins belegen,
dort wo es Konfigurationsübergänge in der Touring-Maschine gibt.
Und dann ist sie erfüllbar. Und wenn es
eben keine Konfigurationsübergänge in der Touring-Maschine gibt,
die mich zu einem Endzustand führen,
dann kann ich die Formel
auch nicht warm machen
Das ist so. Im Groben die Idee, das ist ein
ganz schönes Rumgefrickel. Wenn ihr das mal lesen wollt,
das ist im Hopcraft Ulman, ist das schön gemacht,
zieht sich aber so über, ich glaube, sechs,
sieben, acht Seiten hin,
weil man halt diese ganzen einzelnen Konstruktionsbausteine machen muss,
für alle ein bisschen was zeigen muss.
Aber er transportiert die Idee ziemlich gut. Also wenn ihr
da mal einsteigen wollt, könnt ihr das da noch mal durchlesen.
Und dann hat man das Erste, dann weiß man,
okay, satt ist NP vollständig.
Und jetzt wird es einfacher quasi. Jetzt kann man sagen,
okay, wenn ich jetzt eins habe,
dann kann ich immer von dem ausgehen,
da weiß ich dann viel mehr drüber,
da weiß ich nämlich,
dass es genau so ein Problem und die Jahnstanzen
sehen so aus und die Ninestanzen sehen so aus und damit
kann ich dann arbeiten
Und was man dann als erstes gemacht hat, ist,
weil Satt halt zwar schon schön ist,
aber immer noch so ein bisschen wenig Struktur hat,
weil es halt einfach erfüllbare Formeln sind oder unerfüllbare Formeln,
ist man noch losgegangen und hat weiter, ach so,
genau, ist für die Nachbereitung.
Was man dann gemacht hat, ist,
dass man noch weitere Logikprobleme genommen hat und die dann eben auch als NP vollständig nachgewiesen hat,
dass man dann sagt, naja, wenn Satisfiability oder NP vollständig ist,
habe ich ihm unerfüllbar gesagt, also wenn Satisfiability NP vollständig ist,
dann kann ich das reduzieren auf KNF,
also gegeben eine Formel, in konjunktiver Normalform, SIA-Füllbar,
ja oder nein.
Und dann eben auf dieses, was wir schon gesehen
haben,
drei CNF
Also das hier ist eine erfüllbare außerlusche Form in KNF und 3CNF
ist eine erfüllbare aussagelogische Form in KNF und jede Klausel hat genau drei verschiedene Literale.
Die kann man, ups, die kann man auch beide
als NP vollständig nachweisen. Und genau, da könnt ihr nochmal,
wenn ihr wollt, im Hauptgriff Unbe nachlesen.
Das Interessante ist, es funktioniert nicht so,
dass man zu einer Formel die KNF baut.
Das klappt nicht, weil die wird zu lang,
dann ist das nicht eine Podemialzeitreduktion.
Also muss man ein bisschen was anderes tun.
Geht aber auch recht gut,
kriegt man hin
Genau. Genau, und mit den drei Problemen,
mit denen wollen wir einfach starten, die wollen wir einfach jetzt gegeben voraussetzen.
Und mit denen können wir jetzt weitere Reduktionen machen. Jetzt kann man nämlich genau dieses Verfahren,
was davor entstand, anwenden für ein neues Problem, zeigen,
es ist in NP, dann eins von den NP vollständigen Problemen,
die man so hat aus seinem Katalog auswählen und versuchen,
von dem eine Reduktion hinzukriegen in Polymonialzeit.
Und wenn man das hingekriegt hat, weiß man,
mein neues Problem ist auch NP vollständig.
Und für das folgende Problem hier, Clique, wollen wir das jetzt einmal machen?
Dafür haben wir es ja letztes Mal, ich glaube,
das war am Dienstag, Am Dienstag schon gemacht,
aber das war ja sehr am Ende, machen wir das mal nochmal.
Was wir letztes Mal gemacht haben, ist, wir haben drei CNF darauf reduziert.
Und das ist ja fast schon der NP-Vollständigkeitsbeweis,
da fehlt quasi nur noch zu zeigen, dass es auch ein NP ist.
Aber die Idee geht ja auch schnell,
dass man sagt, naja, ich rate mir Karknoten,
prüfe, ob das eine Klicke ist.
Wenn ja, bin ich fertig. Und dann weiß man eben,
Klicke ist auch NP-vollständig. Frage, nein. Also,
das Problem und der Satz, es ist NP vollständig.
Gehen wir da mal nochmal durch
Zertifikat, Menge von Knoten, von denen behauptet wird,
dass es eine Klicke ist, polynomiell in Eingabelänge,
weil das ja nur irgendwie so viele Knoten sein können,
wie ich da in V habe.
Und dann prüfe ich eben in Polymialzeit,
ich nehme mir da immer zwei raus und gucke,
ob da wirklich eine Kante dazwischen ist, wenn ja,
wenn das immer gilt, dann weiß ich,
das ist eine Jahrinstanz, wenn nicht,
ist eine 9-Instanz oder eben nicht mit der Verifikationsbrille,
sondern mit der Nicht-Determinismus-Brille.
Ich rate mir k viele Knoten und gucke,
ob die paarweise miteinander verbunden sind.
Und dann weiß ich,
klicke es in den
Und jetzt kommt das, was wir letztes Mal schon gemacht haben.
Jetzt will man zeigen, dass ich drei CNF,
also ich will mir jetzt irgendein Problem aus,
von dem ich schon weiß, dass das NP vollständig ist.
Das ist ja eins von den dreien, die wir jetzt
mal jetzt gegeben voraussetzen wollen. Und ich muss zeigen,
dass ich das auf Klicke in Pudymialzeit reduzieren kann.
Denn auch da achtet mal darauf jetzt,
nachdem wir das mit so ein bisschen Vorspann jetzt alles gemacht haben,
achtet mal darauf, dass wir nicht damit arbeiten,
ob das jetzt gerade eine erfüllende, eine erfüllbare Formel ist oder nicht.
Wir arbeiten nur damit, dass die Formel eine gewisse Struktur hat,
basteln uns einen Grafen und eine Zahl
Und das machen wir halt so. Man hat das natürlich
so ein bisschen im Hinterkopf, dass ich was Richtiges bastel
für erfüllbare Formeln und was Richtiges für nicht erfüllbare Formeln.
Aber ich benutze es bei der Konstruktion nicht. Also ich mache nicht so Sachen wie,
gegeben diese Formel, wenn die Formel erfüllbar ist,
dann mache ich jetzt das und das mit den Knoten.
Das mache ich nicht. Sondern ich bastel mir irgendwie zu der Formel Knoten und Kanten.
Und dann zeige ich, wenn die Formel erfüllbar ist,
dann hat diese Konstruktion mit den Knoten und Kanten eine Karklicke. Also das Ganze erstmal benennen,
wenn ich die Formel 4 habe, von der ich jetzt prüfen will,
ist die erfüllbar oder nicht, dann hat die ja diese Struktur hier,
C1 bis, also C1 und C2 und CK,
Karklauseln, diese L1 R bis L3 R,
das sind die Literale in den einzelnen Klauseln,
also oben der Initier, mal in welcher Klausel das ist,
unten der in die C, das,
wievielte Literal das ist.
Und jetzt wollen wir eine Instanz von Clique konstruieren dazu.
Was ignorieren wir übrigens gerade? Kurze Fangfrage so am Rande
, was ignorieren wir gerade fällig
Was ist da gerade nicht gut? Das findet man auch
recht selten in Büchern diskutiert, weil man das vielleicht
auch einmal kurz vorneweg so sagt und dann davon ausgeht,
dass das alle mitgekriegt haben.
Oder es auch gar nicht beschreibt. Wovon wird da
gerade implizit ausgegangen, was eigentlich nicht so ist?
Also danach kommt jetzt so, wie irgendwie so ein Graf konstruiert wird.
Und dann kommt irgendein Graf raus und dann wird gesagt,
hey, der hat genau dann eine K-Klicke,
wenn die ursprüngliche Formel erfüllbar ist.
Aber da steckt noch eine Annahme drin,
die man machen müsste
Ja, drei Zehner für den Scheibe, aber wir wissen ja sogar,
dass der NPV ständig ist. Also es ist auch entscheidbar.
Aber das meine ich nicht, meine Konstruktion. Genau,
wir gehen implizit von ganz vielen Dingen aus, nämlich,
dass die Formel Vieh oder die Eingabe, dass die Eingabe tatsächlich so aussieht.
Die Eingabe könnte auch der Textering Hello World sein.
Dann würde der Algorithmus für 13F irgendwie sagen, nee,
ist nicht erfüllbar, weil das ja nicht mal eine Aussage logische Formel Oder in etwas sinnvollerem Setting,
vielleicht ist es keine Formel, in 3 CNF,
sondern nur in ganz normal konjunktiver Normalform oder irgendwie sowas.
Alles blöd. Alles Nein-Instanzen. Nur, und deswegen überspringt
man den Schritt meistens. Sintax-Prüfungen gehen im Grunde genommen immer
sehr schnell. Das heißt, man sagt, naja gut,
vorneweg, und das mache ich immer, gucke ich,
ob das überhaupt tatsächlich eine sinnvolle Probleminstanz ist.
Also ist das überhaupt eine Instanz,
wo ich mir darüber Gedanken machen muss, ja oder nein?
Oder ist das gleich von vornherein als Eingabe ein Textwing,
mit dem ich gar nichts anzufangen weiß,
also wo ich von vornherein nein sagen kann
Das teste ich einmal vorne vorher in Linearzeit.
Und wenn das deswegen eine 9-Instanz ist,
dann habe ich mir irgendwo eine Konstante gemacht,
keine Ahnung, drei Knoten ohne Kanten und die Frage,
ob da eine Drei-Klicke drin ist.
Das ist auch eine 9-Instanz. Da wird also eine 9-Instanz,
diese intaktischer Unsinn ist, auf eine 9-Instanz abgebildet, fertig.
Und weil man das immer machen kann,
überspringt man den Schritt meistens gedanklich und arbeitet nur mit Eingabeinstanzen,
die tatsächlich Sinn machen. Also dass man sagt,
naja, ich werde da schon eine Formel kriegen,
die drei CNF ist und dafür gebe ich was an,
ob das nicht
mehr Reduktion machen kann
Ja, aber streng genommen sollte man sich noch einmal
Gedanken machen, dass der Schritt vorneweg dabei sein sollte.
Also eine Sinntagsprüfung. Das, was man ja auch,
wenn man programmiert, typischerweise macht. Also wenn man sagt,
lieber User, gib mal bitte irgendwas ein,
dann testet man ja üblicherweise vorher, ob das gerade irgendwie Sinn macht,
was er da eingegeben hat oder nicht.
Okay, dann gehen wir also davon aus, wir haben eine Formel,
die ist tatsächlich in drei CNF und dann wissen wir,
die sieht so aus.
C1 bis CK, K-Klauseln, in jeder Klausel genau drei Literale.
Und jetzt müssen wir eine Instanz konstruieren von so einem Grafen mit einer Clique.
Und man hat natürlich so ein bisschen im Hinterkopf,
naja, wenn die Formel erfüllbar ist,
dann muss sich ja jede Klausel wahr machen,
also muss sich in jeder Klausel mindestens ein Literal wahrmachen
Und dann kann man sich so überlegen, so,
ja, dann vielleicht kriege ich das so hin,
dass ich quasi aus den einzelnen Literalen Knoten mache.
Und dann musst du ja von jedem dieser Literale,
aus jedem dieser Dreierblöcke von Knoten dann, muss ich ja einen auswählen.
Und dann versucht man noch so Kanten dazwischen zu machen,
dass das tatsächlich so ist, dass die dann auch eine K-Klicke bilden.
Und dann muss man wiederum aufpassen,
dass man nicht so viele Kanten reinmacht,
damit man keine K-Klicken reinkriegt, die man nicht haben will.
Aber man arbeitet schon so ein bisschen so mit der Idee und dann so,
ja, was müsste denn alles passieren,
wenn die Formel erfüllbar ist und wie kann ich das im Grafen abbilden?
Und andersrum muss man sich dann fragen, naja,
wenn ich das jetzt alles so im Grafen mache,
da darf aber auch nicht zu viel passieren.
Also es darf auch nicht so sein,
dass ich plötzlich K-Klicken habe,
obwohl die Formel unerfüllbar ist
Also wenn ich einfach sage, ich verbinde einfach alle Literale mit Kanten,
dann habe ich einen großen Grafen mit ganz vielen Kanten dazwischen.
Da ist aber auf jeden Fall immer eine Kark-Clique drin.
Das wäre irgendwie doof. Das will ich nicht. Und der Weg, der funktioniert,
ist, dass man halt so eine sogenannte Gadget-Konstruktion macht,
dass man sagt, ich konstruiere mir zu jeder Klausel erstmal so ein Gadget,
zu jeder Klausel konstruiere ich mir drei Knoten.
Da habe ich erstmal jede Menge Knoten, so ein Gadget.
Und dann überlege ich mir noch, wie ich die verbinde.
Und dann sage ich, naja, Knoten,
die so wie die drei hier zu einer Klausel gehören,
die verbinde ich nicht miteinander, weil es mir ja reicht,
wenn ich einen davon auswähle quasi. Wenn ich sage,
es gibt mindestens ein Literal, das pro Klausel wahrgemacht wird,
dann suche ich mir davon eins aus den zugehörigen Knoten nehme ich dann,
und da will ich, dass der dann nachher eine Clique bildet mit quasi den Knoten, die zu den anderen Klauseln gehören.
Das heißt, zwei solche verbinde ich nicht miteinander und dann sage ich zwei Knoten aus anderen,
die zu anderen Klauseln jeweils gehören, die verbinden nicht miteinander,
aber nur dann, wenn quasi bei der Auswahl kein Widerspruch auftritt,
wenn ich nämlich sagen würde,
ich nehme jetzt einen Knoten aus dem Triebel und einen Knoten aus dem Triebel,
aber ich kann die gar nicht gleichzeitig wahrmachen,
also wenn ich die wieder als Literale betrachte auf der anderen Seite,
dann ist das ja doof.
Also wenn der eine X ist und der andere nicht X, ist doof.
Also sage ich, ich verbinde die nur dann,
wenn die nicht widersprüchlich sind,
also wenn das keine komplementären Literale sind
Und dann ist der Wert, den brauche ich ja auch noch,
jetzt habe ich den Grafen komplett beschrieben und der Wert K,
das klang eben schon so an, das sind dann die K-Klauseln gerade.
Dann habe ich angegeben, wie ich eine Formel Vieh mit K-Klauseln,
wie ich die auf den Grafen gehe und eine Zahl K abbilde.
Das ist dann die gleiche Zahl,
also die Zahl K hier von der Click-Instanz ist die
gleiche Zahl wie die Zahl K. Bild dazu,
wenn ich die Formel habe, kriege ich irgendwie den Grafen.
Man sieht ganz gut,
die drei Literale hier aus der ersten Klausel,
die finden sich hier links wieder,
die drei Literale aus der zweiten Klausel finden sich oben wieder
und die drei Literale aus der dritten finden sich hier
unten wieder
Und dann sind die halt alle nicht miteinander verbunden aus so einer Dreiergruppe.
Die sind alle nicht miteinander verbunden, weil ich da,
sonst kriege ich da irgendwie zu große Klicken rein.
Das will ich nicht. Ich will halt,
dass er zwingend quasi bei der Konstruktion,
dass ich aus jeder genau einen auswählen muss,
wenn ich überhaupt eine Möglichkeit haben will für eine K-Klicke.
Und genau das ist jetzt gegeben.
Wenn es überhaupt eine Möglichkeit geben soll für eine K-Klicke,
dann muss ich aus jedem dieser Dreier-Klicke-Knotengruppen immer genau einen auswählen.
Und dann bilden die aber nur dann eine Klicke,
wenn die alle miteinander verbunden sind. Also hier ein Dreieck,
wenn jetzt noch eine vierte Gruppe dazu käme,
dann müssten die drei alle mit diesem vierten Knoten verbunden sein.
Und das ist nur dann gegeben, Wenn da keine komplementären Literale sind,
wenn da keine komplementären Literale sind, dann kriege ich eine erfüllende Belegung hin.
Dann kann ich nämlich einfach sagen, wenn ich hier Z auswähle,
mache ich Z zu 1, wenn ich hier nicht Y auswähle,
mache ich Y zu 0. Und dann wird jedes dieser einzelnen,
jede dieser einzelnen Klauseln wird dann wahr.
Ja, und ein kurzer Eckkurs, da muss man sich noch überlegen,
X tritt hier jetzt gar nicht auf,
also kann ich mit X was Beliebiges machen.
Wenn ich X zu eins mache, dann werden irgendwie die
zweite und dritte Klausel wird dann nicht nur an einer Stelle wahr,
sondern an zweien.
Und wenn ich X zu 0 mache,
dann wird die erste Klausel an zwei Stellen wahr.
Aber das ist mir ja egal. Mir reicht es ja
, wenn die Klauseln wahrgemacht werden
Konstruktionsidee. Und jetzt muss man noch beweisen, dass das tatsächlich klappt.
Dazu muss man einmal beweisen, dass das im Polimialzeit läuft und dann eben dieses,
die Formel ist erfüllbar, genau dann wende Graf eine K-Klicke enthält.
Also da nochmal, dass das in Polymalzeit geht,
das kann man sich schnell überlegen, dass man sagt,
naja, ich lese über die Formel rüber,
dann weiß ich,
wie viele Literale da drin sind und für jedes Literal,
hast du nicht mehr einen Knoten und dann gehe ich irgendwie
gegebenenfalls nochmal rüber und mache das mit den Kanten.
Das geht relativ fix
Hast du das mit O von V-Quadrat? Und dann muss
man sich noch überlegen, dass das tatsächlich funktioniert.
Und ich würde mal sagen, da machen wir dann morgen weiter, ne?
Ja. Dann habe ich den Beweis dreimal in den Folien,
macht ja nichts. Da machen wir dann morgen weiter,
dann kann man hier zweimal sehen, also das ist die eine Richtung,
wenn man einen Grafen hat, der eine Clique enthält,
zeigen, dass die Formel erfüllbar ist.
Nee, andersrum, wenn die Formel erfüllbar ist,
hat der Graf eine K-Klicke und wenn er eine K-Klicke hat,
ist es zerfüllbar.
Genau, das machen wir morgen nochmal und dann kann man
eben davon ausgehend noch für ganz viele weitere Probleme zeigen,
dass die auch alle NPV-ständig sind
Und ein paar kriegt ihr ja auch noch auf den zwei
letzten Übungszetteln, die wir nur noch in Präsenzzeit bearbeiten.
Also hier Blatt 13 und 14, da sind jeweils noch eins,
zwei Probleme drauf zum Beweisen, dass die NP vollständig sind.
Morgen machen wir auch noch eins. Und ja, die meisten davon
kennen wir auch schon. Und da nochmal die Zusammenhänge,
dass man halt weiß, Kruschel, Kruschel, Kruschel,
dass man weiß, PS-Teimmenge von NP.
Andersrum weiß man nicht so genau. Und diese ganze Theorie
der NP Vollständigkeit, die soll eben dahin führen,
dass man einen ziemlich starken Hinweis darauf hat, dass P Ungleich NP ist.
Und so als Take-Home-Message aus der Algorithmik,
wenn euch quasi für ein Problem kein schneller Algorithmus einfällt.
Und jeder eure Algorithmen irgendwie so darauf hinausläuft, irgendwie alle Möglichkeiten durchzuprobieren.
Also irgendwie den ganzen Suchraum durchzuprobieren. Dann kann man irgendwann
sagen, okay, dann vielleicht klappt das nicht.
Vielleicht gibt es tatsächlich keinen schnelleren Algorithmus, als eben alles durchzuprobieren.
Dann kann man sagen, dann probiere ich mal zu zeigen,
ob das Problem NPV ständig ist. Und da hilft es halt,
möglichst viele NPV-vollständige Probleme zu kennen, weil es quasi einfacher ist,
eine Reduktion anzugeben, wenn man in einem Setting bleibt.
Also wenn man im Setting Logik bleibt oder im Setting Graphen-Theorie oder so,
dann ist es einfacher, eine Reduktion anzugeben,
als wenn man quasi eine Brücke schlagen muss von einem Gebiet in ein anderes, so wie eben,
wo man von der Logik kam und zu Graphen kommen musste.
Das ist immer schwieriger, als in einem Setting zu bleiben.
Kriegt man aber trotzdem hin
Genau, und wenn ihr da ganz tief einstellen wollt,
einsteigen wollt, da gibt es so ein klassisches Buch hier,
Computers and Intractability von Gary und Johnson.
Das ist schon recht altes von 1977 und ich glaube,
zweite dann 81 oder so. Ist aber immer noch sehr
aktuell und tatsächlich immer noch schön zu lesen. Genau,
wenn man da tief einsteigen will, kann man sich das angucken.
Und morgen machen wir nochmal ein, zwei weitere NP vollständige Probleme.
Und dann sind wir auch fertig. Nächste Woche Montag
machen wir dann nochmal Wiederholung und dann sind wir durch.
Fragen? Wahrscheinlich nicht, ne? Mensa, Mensa,
Mensa. Gut, dann sind wir fertig und sehen uns