So. Der letzte Dienstag. Uh, genau. Danach immer
ausschlafen und so. Der Plan ist, den Rest meines
Lebens danach auszuschlafen. Mal gucken, ob das funktioniert.
Warte, das muss ich anders formulieren. Der Plan ist
, die nächsten 70 Jahre auszuschlafen. Ansonsten sind da
zu viele Variablen drin mit Rest meines Lebens und so.
70 Jahre, ja, ja. So. Aber heute müssen
wir das noch schaffen. NP Vollständigkeit haben wir gestern ja
schon eingeführt. Heute kommt der zweite Teil dazu,
wo quasi gar nichts Neues mehr
großartig passiert
Außer, dass wir uns noch ein paar Probleme angucken und
die als NPV ständig nachweisen. Also ich wiederhole gleich nochmal,
damit wir da nochmal wieder gut reinkommen und dann gibt es noch zwei,
drei Beweise für Probleme, wie man die als NPV ständig nachweist.
Und dann haben wir für FG1 auch alles so gemacht,
was ich so machen wollte und dann wiederholen wir nächsten Montag
nochmal und dann lassen wir das Semester ausklingen.
Genau. Also Wiederholung PNP und die ersten, ich glaube,
die ersten zehn Folien sind sehr viel Wiederholung.
Also wenn ihr irgendwo eine Frage habt,
schmeißt die mal gleich rein
Also Klassen-P, NP, erstmal nur Zeitschranke für deterministische Touring-Maschine oder nicht deterministische Touring-Maschine.
Zeitschranke sollen Polynom sein, Endquadrat N hoch 3, irgendwie sowas.
Und nach so vielen Schritten soll die Touring-Maschine dann spätestens aufhören und eben entscheiden,
ob eine Eingabe in der Sprache drin ist oder nicht.
Wenn ich das machen kann,
dann ist die Sprache eben wahlweise in P,
wenn ich das deterministisch machen kann oder in NP,
wenn ich das nicht deterministisch machen kann.
Und das sind so zwei ganz typische Komplexitätsklassen.
Und es gibt halt noch viele, viele weitere,
wir haben ja noch so P-Space und EndP-Space gesehen
Und dann gibt es aber noch sehr, sehr viele weitere.
Bei Pea-Space und NP-Space ist es übrigens so,
da hat man ja auch statt Zeitschranken, hat man hier Platzschranken.
Und da ist es dann so, dass man da zeigen
kann, dass die Klassen tatsächlich gleich sind.
Also bei P&NP können wir das ja irgendwie nicht zeigen.
Könnte aber trotzdem da so sein. Man kann auch
das Gegenteil nicht zeigen. Und bei Pea-Space und NP-Space
kann man zeigen, dass die gleich sind. So,
von der Idee hängt das wohl irgendwie damit zusammen,
dass man sagen kann, naja, Platz kann ich immer wieder benutzen.
Da hilft mir das sozusagen gar nicht so sehr,
dass ich den nicht deterministisch nutzen kann,
weil ich dann einfach polynymia deterministisch, Entschuldigung,
gleich deterministisch,
eben doch einfach alle Rechnungen auch machen kann und einfach
den Platz immer wieder benutze
Und bei Zeit scheint das irgendwie nicht zu funktionieren.
Und was man machen könnte als Ansatz,
um nicht gleich hier PNP zu attackieren, ist,
man könnte auch erstmal versuchen, P und P-Space voneinander zu trennen.
Das kann man nämlich auch noch nicht. Also auch da weiß man noch nicht,
ob P eine echte Teilmenge von P-Space ist,
sondern weiß nur, dass es eine Teilmenge ist.
Stelle Begründung, warum ist P eine Teilmenge von P-Space?
Hat noch gar nicht gemacht. Warum ist das so?
Also P ist ja oben die Definition.
Und P-Space steht da, statt zeitbeschränkt, Platz beschränkt.
Wenn wir jetzt erstmal sagen, naja,
so Zeit und Platz hat nicht so viel miteinander zu tun.
Trotzdem kann man ganz schnell zeigen, dass P
eine Timing von P-Space ist.
Wie ist da
die Idee
Warum muss das so sein? Genau. Genau.
Genau. Die Hauptidee, genau, der erste Satz,
da war gleich die ganze Hauptidee drin.
Wenn ich nur so und so viel Zeit habe,
kann ich auch irgendwie nicht mehr Platz benutzen.
Wenn ich zehn Schritte zur Verfügung habe,
kann ich nicht irgendwie 100 Variablen mit Dingen bewegen.
Das funktioniert irgendwie nicht
Also wenn ich eine Zeitschranke habe, dann ist das automatisch
auch eine Platzschranke. Aber was halt verwunderlich ist,
ist, dass man es nicht hinkriegen kann.
Wenn ich polemiell viel Platz zur Verfügung habe,
dann kann ich von der Idee her deutlich viel mehr machen als polemiell viel Zeit.
Wenn ich irgendwie 20 Bannzellen zur Verfügung habe und für jedes
irgendwie so und so viele Symbole,
dann kann ich eben Anzahl dieser Symbole hoch 20 verschiedene Bandenthalte generieren und aus allen irgendwie Rechnungsstarten und sowas.
Also da sollte von der Idee her
sehr viel mehr möglich sein als mit P.
So kann man aber trotzdem nicht trennen
NP ist auch eine Teilmenge von P-Space eben gerade,
weil man so argumentieren kann, da ja,
dann führe ich halt jede von denen nicht die terministischen Rechnungen
nach und nach auf dem Band aus.
Man platzt halt immer wieder benutzen für jede Rechnung. Sobald eine mal akzeptiert,
sage ich ja, also P-Timing von NP-Timing von P-Space,
teilweise von NP-Space und da kann man dann zeigen,
dass die beiden Platzklassen äquivalent sind.
Und was man eben als ersten Ansatz probieren könnte,
wäre P- und P-Space zu trennen,
weil man dann eben nicht diesen Konflikt hat zwischen Determinismus und Nicht-Eterminismus,
sondern weil man schön im deterministischen bleibt und irgendwie versucht,
Zeit und Platz
miteinander zu vergleichen
Und auch da ist spannend, dass uns das irgendwie
noch nicht so richtig gelingen will, das zu trennen.
Gut, am Key-Space und MPSC, jetzt brauchen wir aber
nicht so im Moment, sondern P- und NP-Zeitschranken.
Dann haben wir Reduktionen eingeführt. Da haben wir gesagt,
wenn wir eine Sprache L1 auf eine andere Sprache L2 reduzieren wollen oder eben Probleminstanzen von L1 und Probleminstanzen von L2 transformieren wollen,
dann nennen wir das so eine Polynialzeitreduktion,
wenn die Funktion F, die das tut,
in Polymialzeit berechenbar ist und wenn für die insbesondere gilt,
X ist in L1 genau dann,
wenn FONX in L2 ist.
Also die kriegt irgendwie
eine Probleminstanz von
Wandelt die um in eine andere Probleminstanz und dann
soll eben gelten, X ist in L1 genau dann,
wenn F von X in L2 ist.
Ja, genau, das sind Reduktionen und damit konnte man dann NP-Vorständigkeit einführen.
Wofür einen konkreten Algorithmus? Ja, wenn du sowas nimmst wie das,
was wir gestern noch hatten, drei Sat und Clique.
Du hast auf der einen Seite drei Sat,
auf der anderen Clique oder was hatten wir noch so,
Tautologie und Kontradition
Dass du eine Menge hast, L1,
wo alle Tautologien sind und eine Menge hast L2-Weile-Kontradiktionen sind.
Und der Algorithmus für Tautologie, der, keine Ahnung,
baut die Wahrheitstafel aufguckt, ob überall einzustehen und sagt dann,
ja, der für Kontradiktionen baut die Wahrheitstafel auf,
guckt, ob wir überall 0 stehen, sagt, ja.
Und die Reduktion, für die brauchst du ja die Algorithmen für L1 und L2 gar nicht.
Die sind ja davon komplett unabhängig. Also dieser Reduktionsalgorithmus hier,
diese Funktion F, der Algorithmus,
der F berechnet, ist der Reduktionsalgorithmus,
der hat ja mit dem Algorithmus der L1-Berechnung einen Algorithmus,
der L2 berechnet,
erstmal gar nichts zu tun
Wenn du den auch hast, das ist natürlich schön,
aber erstmal damit nichts zu tun. Und bei dem Beispiel von eben da,
Tautologie, Kontradiktion, naja, Christ eine Formel,
wo du prüfen willst, irgendwie eigentlich,
ob es eine Tautologie ist und um die umzuwandeln,
machst dann den Negationen davor und dann weißt du,
wenn das eine Kontradiktion ist, ist das ursprünglich eine Tautologie.
Aber dafür musst du halt nicht wissen,
ob die ursprüngliche Formel eine Tautologie ist oder nicht oder so,
sondern du machst halt diese Transformation, in dem Fall sehr einfach so,
aber und könntest dann eben, deswegen macht man das,
wenn du jetzt so einen Algorithmus hier für L2 hast,
dann kannst du halt gleich auch L1 lösen.
Dann transformierst du das, löst das in L2
und bist fertig
Genau. Und bei die Idee bei diesem Resolutionssachen,
bei Aussagenlogik und Predikatenlogik und so,
die war ja im Grunde genommen auch gerade solche Reduktionen zu benutzen.
Wenn ich sage, ja, Folgebarkeit können wir ja auf Unerfüllbarkeit zurückführen.
Da steckt gerade die Idee drin, dass man irgendwie sagt,
statt Folgebarkeit auszurechnen, bastel ich mir irgendwie eine andere Formel.
Und wenn ich weiß, dass Dion erfüllbar ist,
weiß ich, dass die ursprüngliche Folgebarkeit gilt.
Dann habe ich auch Folgebarkeit eigentlich gar nicht gemacht,
sondern ein Algorithmus für Resolution gemacht.
Und zum Beispiel haben wir in der Predikatenlogik auch nichts kennengelernt,
womit wir Folgebarkeit machen könnten
Somit wir das direkt machen können. Wenn hier L1 die Frage wäre gegeben,
zwei Formeln der Prädikatenlogik, folgt die eine aus der anderen,
dann stehst du irgendwie auf dem Schlauch.
So, weil Wahrheitstaffel aufmachen geht ja irgendwie nicht.
Aber dann kannst du halt mit dem Wissen,
dass du so gesammelt hast, kannst sagen, naja cool,
dann mache ich da halt F und nicht Geh raus und gucke,
ob das eine Kontraliktion ist.
Und wenn ja, dann weiß ich die ursprüngliche Folgebarkeit gilt.
Und das kannst du mit einem Resolutionsalgorithmus machen. Ist zwar
nur sieben ihr entscheidbar, aber immerhin so. Genau,
also da steckt ja auch schon eine Reduktion drin. Genau,
da nochmal das Bild dazu, dass man halt,
man kriegt dann irgendwie ein Wort hier aus Sigmar Stern,
das tut man in seiner Reduktionsalgorithmus rein,
kriegt ein Wort aus Gamma-Stern raus und dann gilt eben dieses Wort,
was jetzt aus Gamma-Stern ist, ist eine Nein-Instanz,
also so ein Routerpunkt, genau dann,
wenn das vorherige auch eine Nein-Instanz war und mit Jahrinstanzen genauso.
Genau. PNP-Reduktionen. Dann haben wir damit NP vollständig eingeführt,
weil man jetzt so einen Begriff haben wollte für die
schwierigsten Klassen,
die schwierigsten Probleme einer Klasse
Dann hat man gesagt, wenn ich so eine Sprache finden kann,
die erstmal in NP ist, weil es soll ja eine
eines der schwierigsten Probleme in der Klasse sein.
Dazu sollte sie in NP sein. Und wenn ich dann noch zeigen kann,
dass sich jedes andere Problem aus NP, also jedes L-Strich,
aus NP auf L reduzieren kann, dann weiß ich,
L ist jetzt eines der schwierigsten Probleme in dieser Klasse.
Und die Idee dahinter ist, deswegen auch dieses kleine Gleichzeichen,
wenn ich L jetzt plötzlich schnell lösen kann,
schnell ist immer so bezogen auf Polyumialzeit,
dann kann ich L-Strich jetzt auch schnell lösen,
indem ich das einmal in Polyumialzeit reduziere,
auf L und dann L im Polyumialzeit löse.
Also kann ich plötzlich
auch strich schnell lösen
Deswegen auch so kleiner gleich. L-Strich ist höchstens so schwierig
wie L bezüglich Polymialzeit. Genau, und wenn man halt
nur das Zweite zeigen kann und nicht das Erste,
dann nenne ich L eben NP schwierig.
Und abgekürzt habe ich die Klassen hier mit NPC für NP
Complete und die andere meistens nur mit NPH.
Genau, das ist der NP-Vollständigkeitsbegriff. Und dann hatten wir
die Sätze und Lämmertar. Das erste eben,
was wir eben schon kurz hatten,
wenn ich L1 jetzt im Polymialzeit auf L2 reduzieren kann und
ich kann L2 dann in Polymialzeit lösen,
dann kann ich auch L der Einzelpolymialzeit lösen
Das ist quasi die Begründung dafür, warum man so ein
kleiner Gleichsymbol da benutzt und warum man jetzt sagen kann,
nach dieser Definition hier, das L zu den schwierigsten Problemen in NP gehört.
Aber wenn es irgendwie dann auch schnell geht. Dann haben wir gezeigt,
warum das so wichtig ist oder warum es sehr unwahrscheinlich ist,
wenn ich ein Problem habe und ich zeige,
dass das NP vollständig ist, worum es unwahrscheinlich ist,
dass es jetzt auch ein P ist.
Das sagt uns das Theorie hier, wenn ich ein Problem habe,
das NP vollständig ist und ich könnte plötzlich zeigen,
das ist auch ein P,
dann weiß ich plötzlich,
NP ist gleich
Idee dahinter, wenn ich halt ein Problem habe, dass NP vollständig ist,
dann kann ich ja jedes Ding aus NP darauf reduzieren.
Wenn ich dann weiß, dass das Ding auch in P ist,
dann greift das hier oben und ich kann plötzlich jedes L1,
also jedes Ding, das in NP ist,
auch in P lösen.
Und dann ist NP gleich P.
Wenn was?
Ja. Genau
Die Frage ist gerade, wenn für die NP schwierigen Probleme hier,
wo gesagt wird, da kann ich nur die zweite Eigenschaft zeigen,
wo das Problem dann liegt oder liegen könnte.
Erstmal ganz kurz zu dem Begriff hier, NP schwierig nimmt man deswegen,
weil dieses Problem dann ja mindestens so schwierig ist wie alles in NP.
Alles andere ist kleiner gleich in Anführungsstrichen, das ist mindestens
so schwierig wie alles in NP. Und wo es liegt,
weiß man dann halt nicht, so,
wenn man nicht zeigen kann, dass es in NP liegt,
dann soll das jetzt erstmal nur bedeuten,
nicht, dass man tatsächlich zeigen kann,
dass es nicht in NP liegt, sondern nur,
dass man es nicht schafft zu zeigen,
dass es in NP liegt,
so rumformuliert
Und es könnte zum Beispiel, du hast ja P,
NP-P-Space, das könnte zum Beispiel ein P-Space liegen,
dann ist es auch schwieriger, als alles da drunter so.
Und wenn es jetzt quasi echt in Peacepace liegt und nicht
in den drunter liegenden Klassen, dann ist halt NP schwierig,
aber ich brauche halt tatsächlich doch noch diese Fähigkeit mehr aus Peacepace.
Also beispielsweise,
wenn man genau die gleiche Definition macht und überall NP durch Peacepace ersetzt,
dann definiert man Peacepace vollständige Probleme und alle NP schwierigen,
alle Peacepace vollständigen Probleme sind auch endlich schwierig.
Aber da hat man halt nicht zeigen können,
dass DNNP sind,
sind die halt nur NP schwierig
Und bei anderen Komplexitätsklassen, wenn man für andere Komplexitätsklassen,
Vollständigkeitsbegriff einführen will, dann muss man teilweise aufpassen,
dass man hier unten andere Zeitschrank nimmt.
Also das meine ich polemiell viel Zeit erlaubt, sondern irgendwie möglicherweise weniger.
Zum Beispiel, wenn man P vollständige Probleme einführen will,
dann macht es keinen Sinn, hier polemiell viel Zeit zu erlauben,
weil dann ist irgendwie alles P vollständig.
Das klappt da nicht. Da muss man dann da
weniger erlauben, da erlaubt man dann nur lugorithmisch viel.
Platz. Genau. Genau, da sie viel schwieriger liegen,
also irgendwie dann außerhalb
Wo war ich hier da beim dritten? Also das erste sagt uns
dann wirklich, warum dieses Kleine gleich so geschrieben wird.
Das zweite sagt uns, warum es unwahrscheinlich ist,
dass ein Problem, das NP vollständig ist, auch NP liegt.
Und das dritte, das ist so ein Hilfslammer für das letzte Theorie mir unten,
das dritte sagt uns einfach diese kleine gleiche Relation,
so wie man das auch von Kleiner gleich kennt.
Die ist transitiv, wenn ich L1 auf L2 reduzieren kann und L2 auf L3,
dann kann ich eben, indem ich beides hintereinander mache,
auch L1 auf L3 reduzieren. Dass das korrekt ist so,
also dass diese X in L1 genau dann,
wenn F-Folix in L3 ist, dass die Eigenschaft gilt,
das sieht man ziemlich schnell.
Da muss man sich halt einem überlegen,
dass die Polimialzeitschranke da auch funktioniert,
wenn ich die zwei Polynome hintereinander mache
Und das klappt eben auch im Grunde genommen genauso wie hier oben auch.
Hier hat man ja auch einmal ein Polynom bei der Reduktion
und dann nochmal ein Polynom, um zu entscheiden,
ob das Element in L2 ist.
Das ist im Kollegen die gleiche Idee. Genau,
wenn man das hat, wenn man weiß, dass sie es transitiv,
dann kann man jetzt eben als Hilfsmittel dieses schöne Theorien da drunter beweisen.
Wenn ich jetzt nämlich für neue Probleme zeigen will,
für so ein neues L, dass das NP vollständig ist,
dann muss ich nicht das machen, was in der Definition steht.
Hier alle Probleme aus NP, auf dieses neue Problem reduzieren,
sondern es reicht eben zu zeigen,
dass sich ein NP vollständiges Problem L-Strich nehmen kann und das
in Polimialzeit auf L reduzieren kann
Weil mit der Transitivität von dem da drüber besagt das da
nicht kein beliebiges Problem aus NP nehmen,
das auf L-Strich reduzieren und das dann auf L reduzieren.
Also habe ich ein beliebiges Problem aus NP, auf L reduziert.
Klappt das. Und dann ist L,
wenn El Susi noch ein NP ist, was zu sagen,
NP ist, dann ist das NP vollständig.
Genau. Und da dann daraus aus dem letzten Punkt
hier kriegt man dann eben dieses Verfahren, um nachzuweisen,
dass eine Sprache NP vollständig ist.
Ich zeige als erstes, dass sie ein NP ist,
dann wähle ich irgendein Problem, das NPV-ständig ist,
aus und mache eine Reduktion von diesem NPV-ständigen Problem auf das Neue.
Und wenn ich da jetzt den ersten Punkt nicht machen kann,
wenn ich den irgendwie nicht hinkriege,
dann weiß ich ihm immerhin,
das Problem ist endlich schwierig
Bitte? Zwischen NP und NP schwierig. Ein Problem in NP heißt ja,
du kannst einen Algorithmen, nicht die terministischen Polimialzeitalgorithmus angeben.
Dann weißt du, das Problem ist in der NP.
Und NP schwierig. Da kannst du gerade das nicht machen.
Da gelingt dir das gerade nicht. Aber du kannst halt
alle Probleme aus NP auf dieses neue Problem reduzieren.
Dann ist es endlich schwierig. Oder eben ein NP vollständiges
darauf reduzieren oder ein NP schwieriges reicht auch darauf reduzieren.
Dann weißt du, das ist NP schwierig
Ob es Probleme gibt,
die weder in P noch in NPC, war die Frage.
Was meint ihr? Gibt es Probleme,
die weder in P liegen, noch in NPC?
Frage könnte von mir sein, sehr schön.
Was meint ihr?
Gibt es solche
Das ist... Genau. Eher nicht. Also wenn ich weiß,
es gibt ein Problem,
das nicht in P ist und auch nicht in NPC,
dann vorausgesetzt, ich habe die Frage jetzt so verstanden,
aber es liegt irgendwie in NP.
Wenn das irgendwo in NP liegt, dann hast du gerade bewiesen,
jetzt kannst du mal den Kram mit NPC ignorieren.
Du hast gerade bewiesen, es gibt ein Problem,
das in NP liegt, aber nicht in P.
Du lässt die beiden Klassen getrennt. Also dann weißt du
, P ist eine echte Teilmenge von NP.
Anders könnte man die Frage noch ganz schnippisch beantworten. Problem,
dass nicht in P liegt und nicht in NPC,
gibt es natürlich eins, das weit, weit,
weit, jenseits davon liegt.
Also jedes unentscheidbare Problem zum Beispiel liegt weder in P noch
in NPC, sondern weit, weit, weg davon.
Aber ich glaube, das hast du nicht gemeint.
Ich glaube, du meintest irgendwie, dass es in
NP liegt
Genau. Genau, und da gibt es nur,
die Klasse nennt man manchmal NPI für NP Intermediate, also so irgendwo dazwischen.
Und da gibt es nur ganz wenige Kandidaten.
Da gibt es tatsächlich nur so drei, vier Kandidaten,
wo man sagen kann, da vermutet man,
dass die weder in P sind noch in NPC,
kann es aber auch nicht zeigen,
weil man dann halt dieses Problem da gelöst hätte.
Aber der Bereich ist relativ dünn da. Gut, da
noch das Verfahren. Sonst noch Fragen? Das ist so,
dass alles Wichtige jetzt, glaube ich,
so P, NP, NP vollständig,
wie man das macht und so die zwei,
drei Theorien und Lemmerta
Also so im Groben, warum man das macht und warum das funktioniert.
Und da hatten wir ja gestern schon diskutiert,
da muss man auf engen Problemen überhaupt das erste Mal zeigen,
dass das MP vollständig ist und dass man dafür eben historisch
dieses Erfüllbarkeitsproblem der Aussagenlogik genommen hat.
Und eben dann tatsächlich jede in Polymialzeit arbeitende,
nicht die terministische Touring-Maschine, die irgendwie eine Sprache entscheidet,
die eben auf dieses Erfüllbarkeitsproblem reduziert hat.
Das war dann hier dieses Satisfibility-Problem.
Das war das erste MPV-ständige und dann kamen die zwei hier
schnell danach
Dass dann eben nicht irgendeine Aussage logische Formel gegeben ist, sondern dass die ein bisschen mehr Struktur hat.
Und die beiden hier braucht man vor allem deswegen. Die beiden unteren CNF und 3 CNF,
die brauchen wir vor allem deswegen, damit man,
wenn man jetzt nach diesem Verfahren hier ein NPV-ständiges Problem auswählen will und von dem dann eine Reduktion angeben will,
dann ist es meistens sehr viel einfacher mit einem von den beiden unteren zu arbeiten oder eben sogar mit dem untersten hier mit 3 CNF,
als mit diesem Erfüllbarkeitsproblem,
weil man bei dem 3 CNF weiß, die Probleminstanz,
die es irgendwie hat, deutlich mehr Struktur.
Das ist nicht nur irgendeine außerlogische Formel, sondern die ist eben in konjunktiver Normalform.
Alle Klauseln haben drei Literale und so, damit lässt sich
sehr viel mehr arbeiten. Also wenn ihr noch erinnert von gestern,
ist ja nicht ganz bis zum Ende gemacht,
aber die Konstruktion haben wir gesehen, bei diesem Clique-Problem,
da sind wir auch nicht vom Erfüllbarkeitsproblem ausgegangen,
sondern von diesem 3CNF-Problem,
hatten dadurch sehr viel mehr Struktur in der Formel und konnten das ausnutzen,
um Strukturen in dem Grafen zu generieren.
Das macht es deutlich einfacher. Deswegen ist es halt schön,
hier irgendwie die beiden noch zu haben, vor allem den untersten und dann
kann man eben losgehen und kann beispielsweise Clique zeigen.
Das haben wir ja gestern angetouched, machen wir gleich nochmal zu Ende und Independence
Set sollt ihr ab heute mal in den Präsenzaufgaben machen.
Das klingt so ähnlich wie Clique,
nur dass man eben nicht K-Knoten hat,
die alle paarweise miteinander verbunden sind, sondern man fragt eben,
wenn ich einen Grafen habe,
gibt es K-Knoten,
die alle paarweise nicht miteinander verbunden sind
Und dann insofern unabhängig voneinander sind. Das kann man noch
sehr schön machen und große Klicke wie Klick,
das ist dann auf den Präsenzaufgaben fürs nächste Blatt,
nächste Woche nochmal drauf. Da ist die Frage,
wenn ich einen Grafen habe, gibt es eine Clique,
die mindestens die Hälfte der Knoten des Grafen umfasst,
also eine sehr große Clique in dem Grafen.
Das kann man dann auch nochmal machen, die sind beide
nicht so schwierig. Wenn wir noch Zeit haben,
sehen wir uns heute nochmal eine an,
die deutlich schwieriger ist, aber die beiden,
die gehen
noch ganz gut
Und dann halt hier, wir haben ja im letzten Foliensitz
auch noch mal kurz über unterschiedliche Probleme rüber geskippt oder
auch als wir NP oder Algorithmen behandelt haben,
die nachweisen, dass ein Problem in NP ist.
Da haben wir ja noch so etliche Sachen gesehen,
so Teil so ein Problem, Mengenpartitionsproblem,
also Teil so ein Problem hier, gegebene Menge von natürlichen Zahlen.
Kann ich da eine Teilmenge draus finden,
sodass ich das gerade zu einer gegebenen Zeit Tee aufsummiert,
sowas, oder Mengenpartitionsproblemen gegeben, eine Menge von Zahlen,
kann ich die so in zwei Teilmengen partitionieren,
dass die Summe von beiden gleich ist.
Und die sind nicht nur alle in NP,
das haben wir ja gemacht,
dass die in NP sind,
sondern die sind tatsächlich
auch alle NP vollständig
Und wenn man das nachweisen will,
dann hat man so ein ähnliches Problem wie bei der Reduktion von 3CNF auf Clique, dass man,
wenn man jetzt beispielsweise hier beim Teil so ein Problem ist,
dass man ja plötzlich irgendwie so im, nennen wir es mal,
Zahlen theoretischem Setting.
Und da muss man wieder irgendwie eine Brücke schlagen,
entweder von der Logik dahin oder eben von grafentheoretischen Aufgaben dahin.
Und das ist immer ein bisschen komplizierter,
als wenn man in einem Setting bleibt.
Genau, aber die kriegt man halt trotzdem hin oder da
sind die Konstruktionen dann eben deutlich anspruchsvoller.
Gut, Fragen bis dahin, das sind noch mal so exemplarische Probleme.
Wir machen auch gleich noch ein paar NP-Vorständigkeitsbeweise,
aber erstmal so Überflugfragen bis dahin
1, 2, okay. Dann,
wenn man das weiß, ursprünglich ist es ja so,
man geht los, man hat irgendwie ein neues Problem,
man überlegt sich erstmal, ist das Entscheidboard oder ist das unentscheidbar.
Wenn ich weiß, das ist unentscheidbar, dann kann ich gleich aufhören.
Oder muss das Problem irgendwie anpassen oder so. Wenn ich dann weiß,
es ist entscheidbar, dann hilft mir das aus praktischer Sicht
auch erstmal noch nicht, dann will ich das irgendwie schnell lösen.
Wenn ich jetzt irgendwie feststelle, so alle meine Ansätze führen dahin,
dass sich irgendwie alle Möglichkeiten durchprobiere, also beispielsweise bei der Aussagenlogik,
dann gehe ich vielleicht los und sage,
naja, Wahrheitstafel fällt mir ein,
das ist eine ziemliche Brutforce-Attacke,
das ist
irgendwie so alles durchprobieren
Dann überlege ich vielleicht weiter, komme vielleicht nach ewigem Überlegen
irgendwie auf ein Resolutionsverfahren oder so. Und dann stelle ich auch fest,
naja, im schlimmsten Fall muss ich da auch alles durchprobieren.
Also bin ich immer noch irgendwie nicht wirklich schneller,
zumindest nicht im Worst Case. Und wenn mir so nach langen,
langen Nachdenken irgendwie immer nichts Besseres einfällt, als irgendwie solche Exponentialzeitgeschichten hier,
dann kann ich mir mal überlegen, so ist das vielleicht NPV ständig.
Wenn ich dann zeigen kann, dass das NPV vollständig ist,
dann kann ich zumindest mal aufgeben, schnelle Algorithmen zu entwickeln.
Also zu versuchen, direkt irgendwie so einen Polemialzeitalgorithmus zu entwickeln. Kann ich natürlich weiterhin machen,
wenn ich gerade eine sehr große Herausforderung suche, aber dann würde ich eben,
wenn ich das Schaffe P gleich NP zeigen so,
also vielleicht verlasse ich die Straße dann erstmal und sage,
okay,
dann habe ich jetzt ein NPV vollständiges Problem
Und auch wieder aus praktischer Sicht würde ich jetzt sagen,
naja, aber jetzt will ich ja nicht aufhören.
Dieses Problem liegt ja weiterhin auf dem Tisch.
Ich will es ja weiterhin bearbeiten. Und dann gibt es
halt unterschiedliche Möglichkeiten, wie man da jetzt rangehen kann.
Man kann halt nur nicht direkt rangehen und einen P-Algorithmus entwickeln,
aber man kann versuchen, mit anderen Sachen zu arbeiten.
Zum Beispiel kann man sagen, vielleicht liegt die Eingabe in
der bestimmten Art und Weise vor oder ich kann da zwingen,
dass die in einer bestimmten Art und Weise ist.
Wenn ich zum Beispiel weiß,
dass meine eigentliche Eingabe gar nicht alle Arten von Grafen sind,
sondern nur bestimmte Grafen, dann hilft mir das vielleicht schon,
wenn wir nicht Extrembeispiel, wenn ich weiß,
ich habe gar keinen Graf,
sondern ich habe einen Baum,
auf dem Baum lässt sich meistens alles ziemlich schnell und
ziemlich gut ermitteln
Dann bin ich schon mal weiter, aber es gibt auch
ganz viele Grafklassen, die deutlich umfangreicher sind als Bäume.
Und wenn man weiß, dass die Eingabe von dieser Art
ist, dann kann man eventuell einen schnellen Algorithmus entwickeln.
Dann hat man halt keinen schnellen Algorithmus für das zum Beispiel allgemeine Clique-Problem,
aber vielleicht einen schnellen Algorithmus für eine große Klasse von Grafen.
Das hilft dann auch schon. Und Beispiele können sein für Grafklassen,
die sehr viel eigentlich schon umfassen,
wenn man dann sagt, naja, ich habe Grafen,
aber da treten auf jedem Fall oder der größte Kreis in dem Grafen
hat die Größe 100 oder so oder der kleinste Kreis hat die Größe 100.
Dann weiß man schon, lokal sind es überall Bäume und
er ist global,
sind es
keine Bäume
Wenn der größte Kreis irgendwie die große, der kleinste Kreis,
die Größe 100 hat, dann ist das davor alles Bäume so.
Und sowas hilft schon enorm. Wenn man nicht weiß,
dass die Eingabe irgendwie eine besondere Struktur hat,
dann kann man versuchen, hier mit einem dieser drei Dinge da loszugehen.
Bei Approximationsalgorithmen sagt man, naja,
ich will vielleicht gar nicht das Optimum kriegen,
vielleicht reicht es mir, wenn irgendwie ich nicht den besten Preis kriege,
aber 99 Prozent dicht dran bin oder irgendwie sowas.
Auch okay. Das ist vor allem deswegen interessant,
weil man relativ häufig bei Algorithmen so mit so einer Brille rangeht,
wo man sagt, von der Idee, ja, die Eingabe ist perfekt.
So und das macht bei ganz vielen Sachen gar keinen Sinn.
Also wenn ihr jetzt Kantengewichte am Grafen habt, die keine Ahnung,
den Preisen eines HVV-Tickets entspricht, dann kann man sagen,
ja okay, das kann man perfekt modellieren.
Da weiß man, der Preis ist so und so,
kann ich perfekt modellieren. Wenn man Kanten hat am Graphen,
die irgendwie modellieren, wie schnell durchschnittlich eine Person eines
gewissen Alters von diesem Punkt zu diesem Punkt geht,
dann ist das sowieso schon eine sehr Pi mal Daumen-Messung.
Vielleicht steckt da irgendwie ein statistisches Modell hinter,
aber das ist halt nicht mehr super exakt.
Und da dann zu erwarten, dass ich mit den Eingabedaten
perfektes Ergebnis liefere, brauche ich gar nicht.
Da kann ich einfach sagen, naja, die Daten,
die sind ja sowieso schon so ein bisschen schwammig,
dann reicht es auch, wenn das Ergebnis auch nur einen gewissen Korridor abdeckt.
Dann ist das immer noch super. Und wenn mir das hilft,
um alles schnell zu berechnen, ist ja toll,
sowas machen da Proximationsalgorithmen
Andomisierte arbeiten irgendwie mit Zufall. Klassisches Beispiel, Primzahlen.
Für Primzahlen weiß man also, gegebene Zahl ist sie prim,
ja oder nein. Da hat man mittlerweile auch ein Polimialzeitalgorithmus für.
Aber die Randomisierten schlagen den immer noch, um Längen.
Und da ist halt das Problem, manchmal liefern die halt kein Ergebnis.
Manchmal sagen die so, ja, weiß ich nicht.
Dann startet man den halt nochmal, weil der so schön schnell ist.
Stört das auch nicht und der liefert ja irgendwann gute Ergebnisse.
Und Heuristiken, so ähnlich wie Proximationsalgorithmen oder so,
die arbeiten halt so mit bestimmten Annahmen
Und das Spannende bei Heuristiken ist,
dass wir die mittlerweile ganz gut entwerfen können,
dass die mittlerweile auch ziemlich gut bei ganz vielen Sachen funktionieren.
Also dieses Erfüllbarkeitsproblem zum Beispiel, da gibt es sogenannte Setzhäuber
mittlerweile, die arbeiten halt alle mit Heuristiken.
Und die kommen mit unglaublich großen Probleminstanzen, klar.
Problem ist nur, man weiß gar nicht so genau, warum.
Also weißt du irgendwie so, ja, schön schnell,
kann ich ausprobieren, läuft schnell. Und man weiß nicht
genau, warum. Und es ist dann sehr schwierig,
sowohl die Laufzeit als auch irgendwie die Güte dieses Ergebnisses genau zu fassen.
Also dass man irgendwie bei der Proximationsalgorithmen,
kann man meistens sagen, dieser Algorithmus liefert immer ein Ergebnis,
das mindestens halb so gut ist wie das Optimum
Oder 95 Prozent so gut wie das Optimum und so.
Das kann man relativ häufig sagen. Bei Heuristiken kann man das nicht so gut sagen.
Da kann man meistens nur sagen, also immer,
wenn wir den Algorithmus gestartet haben, war das Ergebnis hübsch.
Das ist irgendwie nicht so die Aussage, die man haben will.
Und trotzdem sind die halt in der Praxis sehr, sehr effizient.
Also gerade bei diesen Satzhäuber-Geschichten. Und wenn ihr euch für sowas interessiert,
dann könnt ihr in die, nächstes Semester A und D,
da wird sowas noch nicht gemacht, aber vielleicht mal so kurz angetatscht,
aber dann in den Masterveranstaltungen so zur Algorithmik und sowas,
da kommt sowas dann.
Und dass man sich sowas angucken kann. Genau,
das so als Ausblick, dass man noch nicht aufgeben muss,
wenn man für ein Problem zeigen kann,
dass das NP vollständig ist,
sondern dass man dann eben einfach anders versuchen muss,
das Problem anzugehen
Für Unentscheidbarkeit gilt das übrigens auch. Also dass wir nicht
ein unentscheidbares Problem haben, muss ich auch nicht zwingend gleich aufgeben,
sondern dann weiß ich halt, naja gut,
das Problem ist unentscheidbar. Und dann gucke ich eben,
ob ich das irgendwie anders formulieren kann oder irgendwie so einen
anderen Angriffsvektor finden, um da irgendwie ranzukommen.
Aber bei NPC sind wir da schon deutlich weit. Genau,
und da nochmal, was man so machen muss,
wenn man so ein neues Problem hat,
meistens muss man es erstmal irgendwie modellieren,
dass man noch gar nicht so richtig weiß,
wie die Fragestellung
genau zu fassen ist
Dann hilft es, das eben besser auszudrücken, modellieren,
formalisieren. Und dann guckt man sich eben an,
entscheidbar, nicht entscheidbar, wenn es entscheidbar ist,
ist es dann ein P oder es ist ein NPC oder irgendwo ganz anders.
Und wenn man eben bei beiden, wenn man hier das schlechter erwischt,
also dass es NP vollständig ist, dann kann man eben versuchen,
mit den eben genannten Sachen das Problem doch zu attackieren.
Genau, dass so die letzten Veranstaltungen so als kleiner Einstieg da rein,
wenn du mal so ein Buch zur Komplexitätstheorie in die Hand nimmst,
dann werdet ihr feststellen, es gibt deutlich mehr Klassen als P und NP.
Das geht so in die Hunderte bis Tausende
Und da wird viel Arbeit gemacht und auch viel sinnvolle Arbeit,
so ein Wechselspiel zwischen Algorithmenentwurf und Komplexitätstheorie, Algorithmen,
wo versucht immer Grenzen von oben zu finden.
Ich kann dieses Problem in O von N hoch 3 lösen. Ich bin schneller,
ich kann es in O von Endquadrat lösen und so weiter,
immer wieder Grenzen von oben und Komplexitätstheorie versucht,
Grenzen von unten zu finden und gleichzeitig auch nicht nur einzelne Probleme zu betrachten,
sondern ganze Klassen und zwischen denen halt Zusammenhänge aufzutun.
Fragen. Nach dem Redeschwall
Dann habe ich sechs Stück, glaube ich.
Die meisten hatten wir schon so gestern, vorgestern irgendwie,
aber vorgestern nicht. Gestern einfach mal gucken,
die Ergebnisse waren ja gestern eher so halb halb.
Mal gucken, was heute besser wird.
Sie sind auch neu sortiert. Also es ist nicht
die gleiche Nummer
wie gestern
1, 2, 3, 4.
Wie viel das? Oben steht es ja 16, 17.
Genau. Jetzt kann man sagen, die Mehrheit sieht.
1, 2, 3, da steckt irgendwie drin,
P ist eine Teilmenge von NP Complete.
Das kann gerade unter der anderen Appeo gleich NP irgendwie nicht sein.
Wenn P eine Teilmenge von NP vollständig ist,
dann weiß ich, es gibt ein Problem,
das NP ist und NP vollständig ist.
Und dann weiß ich gerade, dass P gleich NP ist.
Also gerade das, was oben ausgeschlossen wird.
Also 1, 2, 3 kann ich stimmen.
Jetzt könntest du noch vier oder fünf sein.
Und vier passt. P ist eine echte Timing von NP
. NPC ist eine echte Timing von NP.
Beides echte Timing nur unter der Annahme P. Ungleich NP.
Wenn man die Annahme fallen lässt, dann weiß man nur,
P ist eine Teilmenge von NP und NPC
ist eine Timing von NP
Und dann eben, wenn das hier eine echte,
die ungleich sein sollen,
dann muss eben auch der Schnitt hier von P und NPC leer sein,
weil sonst die beiden ja gleich sind.
Hatten wir auch gestern schon
Dann habe ich
7. 7.
Ist immer noch eine Mehrheit, aber eine Knappe, einem so.
Viertens, ne, weil, wo sagt er das?
NPC, die NP-Vollständigen, jedes Problem, das NP-vollständig ist,
ist auch NP schwierig. NP-vollständig bedeutet, ich habe zwei Eigenschaften,
erstens und zweitens, NP-vollständig bedeutet, die zweite gilt.
Und die erste NP. Schwierig gilt nur, heißt nur
die zweite gilt. Jedes Problem, dass die erste und
zweite Eigenschaft erfüllt, erfüllt also auch die zweite.
Also ist es auch NP schwierig. Und wenn die dritte hier,
da würdet ihr sagen, jedes Problem,
das die zweite Eigenschaft erfüllt, also jedes Problem,
das NP-Hart ist,
erfüllt auch die erste und zweite
Das macht irgendwie, also kann sein, dann wären die alle gleich und so.
Aber das, was man halt weiß, ist irgendwie das
vierte hier. Das dritte und solche Sachen, nee,
das dritte gilt tatsächlich gar nicht, aber würde sonst nur gelten,
wenn man halt wieder die Klassen irgendwie alle zusammenfalten kann,
was nicht der Fall ist.
Und erstens, genau, erstens kann ich sein,
dass die gar nichts gemeinsam haben, jedes Problem,
das NP vollständig ist, ist auch NP schwierig.
Und beim zweiten würde man sagen, dass es Probleme gibt,
die NP vollständig sind, aber nicht NP schwierig und Probleme,
die NP schwierig sind, aber nicht NP vollständig.
Und das kann alles nicht sein mit dieser Idee,
wenn ein Problem NP vollständig ist,
muss es auch NP
schwierig sein
Auf Unentscheidbarkeit bezogen
Wenn eins unentscheidbar ist, dann auch L2. Das klingt doch gut.
Wenn L1 unentscheidbar ist, Dann auch L2. Wenn L2 jetzt nämlich entscheidbar wäre,
dann könnte ich ja gerade L1 auch entscheiden.
Dann kann ich ja von L1 auf L2 reduzieren,
L2 entscheiden und habe damit auch meine Probleminstanz in L1 eben,
weiß ich auch, ob die drin ist oder nicht.
Also erstens hier, wenn er eins unentscheidbar ist,
dann muss auch L2 unentscheidbar sein,
weil im anderen Fall kann ich zeigen,
dass L1 dann eben nicht unentscheidbar ist.
Und hier beim den zweiten, das kann ich halt nicht sagen,
weil wenn ich weiß, dass L2 unentscheidbar ist,
dann muss ja L1 nicht unentscheidbar sein.
Durch die Reduktion habe ich nur gezeigt,
ich kann jede Probleminstanz für L1 und Probleminstanz von L2 transformieren.
Und wenn das jetzt unentscheidbar ist, naja,
dann ist es halt unentscheidbar
Es schließt nicht aus, dass sich das andere auch trotzdem tun könnte,
wenn man in diesem kleiner Gleich,
wenn man mal kurz in diesem Kleiner gleich denkt und quasi sagt,
schlimmere Komplexitäten kommen immer,
wir sind immer größer und unentscheidbar ist quasi die schlimmste Komplexität,
da brauche ich sozusagen unendlich lange,
das ist dann ganz weit weg.
Denn wenn ich das zeigen kann,
dann weiß ich nur, L1 ist kleiner gleich L2.
Und wenn ich dann weiß, dass L2 unentscheidbar ist,
weiß ich ja, das ist also sehr groß.
Das schließt ja nicht aus, dass L1 eben doch entscheidbar ist.
Ich habe ja bisher nur gezeigt, dass es kleiner ist.
Während bei dem anderen L1,
kleiner gleich L2 und L1 ist unentscheidbar und L2 ist noch größer,
naja, das ist also noch größer,
noch schlimmer als unentscheidbar zu sein,
das kann halt
nur weiterhin
unentscheidbar sein
Wir haben so mit dieser informalen Merkhilfe so arbeitet.
Wenn man es formal machen will, macht man Widerspruchsbeweis.
Dann sagt man, wenn eine L1-Unentscheidbar ist,
muss L2 unentscheidbar sein. Angenommen, es wäre entscheidbar,
nö nö nö, dann ist L1 auch entscheidbar.
Das kann halt gerade nicht sein.
Die hatten wir gestern noch nicht. Sei ANP schwierig,
also in NPH drin. Was stimmt jetzt unter dieser Annahme
Musik Wer hat zweitens gemacht? Niemand. Das ist das Gute an
anonymen Klickern. Wer zweites macht niemanden, ich weiß nicht.
Wenn ich zweitens wüsste, was wüsste ich dann?
Also wenn ANNP ist, was ist dann?
Genau, wenn ich wüsste, es ist NMP,
dann wäre es NP vollständig
Schließt das, also streng genommen schließt die Frage das nicht aus.
Wenn ich sage, sei ja NP schwierig, was stimmt
unter der Annahme? ANNP könnte schon sein, so,
aber kann man eigentlich aus dem, was oben gegeben ist, nicht schlussfolgern?
Das ist NP, weil dann wäre es NP vollständig,
nicht bloß NP schwierig. Drittens, im Grunde genommen so ähnlich,
bei drittens steht ja auch, dass es in NP ist und zusätzlich nicht in P,
dann wüsste ich eigentlich auch so sehr, wie vollständig.
Erstens und viertens, das finde ich sehr gut, dass das null Leute geklickt haben. Erstens und viertens macht irgendwie gar keinen Sinn,
wenn es erstens, erstens würde der Annahme P ungleich NP widersprechen,
dann erstens wäre, wenn ich in NP schwieriges Problem habe, zeige,
dass das NP ist, dann habe ich gerade gezeigt,
dass A sogar NP vollständig ist und ich habe gezeigt,
dass ich ein NPV-ständiges Problem habe,
das im P ist, dann weiß ich,
P ist gleich NP, also das kann nicht sein.
Viertens macht überhaupt keinen Sinn, weil P ohne NP ist leer,
dann passiert ja gar nichts mehr. Also das 1 und 4 ist Blödsinn,
zwei und drittens würde implizieren, dass ANP vollständig ist,
muss also beides nicht sein,
streng genommen kann man nur keins davon Schluss folgern,
weil man nur weiß, was wir vorhin einmal diskutiert hatten,
wenn ich weiß,
es ist irgendwie schwierig,
dann liegt es eben üblicherweise irgendwo außerhalb von NP
Oder ich weiß es noch nicht,
vielleicht kann ich es nachher irgendwie nach MP ziehen,
aber wenn ich das schon gemacht hätte, dann wüsste ich,
ist es MPV ständig. Also gute Antworten sind eigentlich alle geklickten,
zweitens, drittens und fünftens, nur zweitens und drittens,
muss man so ein bisschen begründen, dass man irgendwie sagt,
naja, da könnte es liegen,
aber man weiß es noch nicht.
Und es könnte eben auch
außerhalb liegen
Musik Also es wird besser, aber es ist noch nicht
so richtig überzeugend. Es ist noch nicht so,
dass man sagen würde, alle 20 klicken das Richtige an.
Wenn ich ein neues Problem, elf Fragezeichen, von dem
ich auch nichts weiß und ich möchte das als NP vollständig nachweisen.
Eine Reduktion reicht, Definition wird ja nirgendwo von mehreren gesprochen,
eine reicht und ich muss ein NP vollständiges auf dieses Neue reduzieren,
dann kann ich alles aus NP auf das NP vollständige reduzieren
und von dem NPV-Ständigen auf das Neue.
Da habe ich quasi alles auf das Neue reduziert
Und wenn ihr in dieser kleiner Gleichsprechweise so ein bisschen informal denkt,
denn ihr wollt ja zeigen, dass elf Fragezeichen schwierig ist.
Also müsst ihr zeigen, dass ihr,
dass die NP vollständigen, dass die kleinergleich diesem Neuen sind.
Dann könnt ihr zeigen, dass das Neue halt schön schwierig ist.
Wenn ihr das andersrum macht, dann zeigt ihr nur,
dass euer neues Problem einfacher ist als ein NPV-ständiges.
Und dann könnt ihr euer neues Problem ja auch irgendwie in konstanter Zeit
lösbar sein oder so, dann habt ihr nichts gewonnen.
Ihr wollt ja zeigen, dass der NPV vollständig ist.
Also dass es schwer ist. Und dann müsst ihr
die Reduktion machen von dem NPV-vollständigen Problem auf das Neue,
also das Zweite,
was die machen
Genau, und beide muss man nicht machen,
wenn man beide macht, dann weiß man noch ein bisschen mehr,
nämlich das, was hier die nächste Frage noch suggeriert.
Was war da die Antwort quasi,
wenn man die Reduktion jetzt doch andersrum macht?
Was weiß ich dann? Da bin ich,
ich weiß dann, ja
Nein, das, also das zweite weiß ich gerade nicht,
das dritte weiß ich dann,
genauso wie wir das auch bei P gemacht haben,
wenn ich elf Fragezeichen reduziere,
auf LNPC und ich kann LNPC jetzt in NP lösen,
dann habe ich quasi durch die Reduktion irgendwas,
was polemiell viel Zeit braucht, deterministisch, polemiell viel Zeit
Und dann noch etwas, was nicht deterministisch polymär viel Zeit braucht.
Also habe ich insgesamt irgendwie ein Polynum für die deterministische Rechnung
und noch ein Polynum für die nicht deterministische Rechnung.
Außerdem bin ich nicht deterministisch, weil ich habe nicht
die Terminismus irgendwie ausgenutzt habe im zweiten Schritt.
Also bin ich in Polymialzeit und nicht deterministisch.
Also bin ich in NP. Also das dritte kann ich dann
immerhin Schluss folgern. Aber wenn ich NP Vollständigkeit zeigen will,
dann mache ich die Reduktion andersrum. Und üblicherweise ist das hier,
also sowas zu machen, ist Overkill meistens,
um zu zeigen, dass ein Problem in NP ist.
Das macht man einfach, indem man nicht die terministischen Polymialzeitalgorithmus angibt.
Also für die meisten Probleme, wir haben ja schon mal
so ein paar gemacht, geht das deutlich schneller.
Lösung, Raten, ausprobieren, ob es eine ist,
Das geht deutlich einfach. Stellt euch mal vor, ihr würdet versuchen,
eine Reduktion zu machen von Clique auf Dreisat oder so.
Das ist deutlich komplizierter, als zu sagen, naja,
ich löse Clique, indem ich K-Knotenrate und Prüfe,
ob es eine Clique ist.
Das geht deutlich schneller. Genau. Da nochmal die Zusammenfassung
. Habt ihr Fragen? Alles gut. Clique von
letztem Mal wollte ich einmal noch, schaffen wir das noch
Ja, lass uns noch mal kurz Clique vom letzten Mai machen.
Clique ist deswegen ein schöner Beweis, weil man,
weil der noch relativ übersichtlich ist und man sich
gut klarmachen kann,
wie diese Gadget-Konstruktion funktionieren
Weil man relativ übersichtlich, weil man das ganz gut noch
mit einem Bild illustrieren kann. Und trotzdem sieht man eben,
wie irgendwie aus bestimmten Bausteinen der Formel bestimmte Bausteine in dem Grafen werden.
Und was man sich dabei wohl so gedacht hat.
Und die Idee war da ja, also klicke erstmal das Problem gegeben,
so ein Tupel-G und K und G ist halt der Graf
und K ist irgendwie eine Zahl.
Und die Frage ist dann eben, ob G K-Knoten enthält,
die alle paarweise miteinander verbunden sind.
Also eine K-Klicke. Und dann musste man ja erstmal zeigen,
dass das in NP ist. Und entweder macht man das
so wie hier jetzt mit diesem Zertifikat, dass man sagt,
das Zertifikat ist eben gerade die K-Knoten,
von denen man meint,
dass das
ein Clicke wäre
Oder man macht das nicht deterministisch schnell, dass man sagt,
okay, ich rate mir keine Knoten und danach überprüfe ich,
ob die eine Taglicke bilden.
Und wenn es eine Karklicke gibt in dem Grafen,
dann wird die auch geraten. Und wenn es gar keine
gibt, habe ich keine Möglichkeit, die zu raten.
Also ist der korrekt und läuft irgendwie ein O von V plus E,
weil ich irgendwie in der Ratephase V-Schritte brauche,
um die Knoten zu raten und dann nochmal E-Schritte,
um zu gucken, ob die alle mit Kanten verbunden sind.
Also wenn man das jetzt umständlich macht, kann man auch ein bisschen schneller machen.
Um zu zeigen, dass das in einem P ist,
reicht das ja. Und die Idee bei der Reduktion war dann,
als man gesagt hat, in so eine Probleminstanz von 3CNF,
die sieht ja irgendwie so aus,
dass ich mehrere Klauseln habe,
C1 bis CK und jede dieser Klauseln aus genau drei Literalen
besteht,
L1R bis
Und er eben für die Klausel oben. Und jetzt konstruiere ich mir Zoom-Grafen,
dass ich sage, ich will irgendwie in dem Graf-Konstrukt abbilden,
wenn ich einen Knoten wähle aus dem Grafen,
der zur Clique gehört, dann soll dieser Knoten symbolisieren,
ich mache ein bestimmtes Literal wahr.
Und jetzt kann man, man könnte auch das mit so Konstrukten probieren,
dass man sagt, ich habe irgendwie drei Knoten oder zwei
und einen davon kann ich immer nur nehmen.
Und wenn ich den einnehme, heißt das,
ich setze die Variable auf True und wenn ich den anderen nehme,
heißt es jetzt die Variable Falls.
Sowas könnte man auch versuchen. Das ist in
dem Setting schwierig
Das merkt man relativ schnell, dass es da schwierig ist,
damit zu arbeiten. Und dann versucht man stattdessen damit zu arbeiten,
dass man mit den Knoten symbolisiert, dass man ganze Klauseln irgendwie wahrmacht.
Dass also quasi die einzelnen Knoten nicht direkt für ein Aussagensymbol
stehen, sondern für die Literale in den Klauseln.
Und dann baut man halt zu jeder dieser Klauseln,
baut man sich so ein Triebel aus Knoten. Okay,
die habe ich jetzt erstmal und jetzt will man halt darauf hinaus,
dass man aus diesen Triebeln genau dann Knoten nimmt,
wenn die Klausel wegen dieses Literals wahrgemacht wird
Und das muss man dann irgendwie versuchen mit den Kanten hinzukriegen,
dass man sagt, naja,
jetzt wird der wahrgemacht und jetzt verbinde ich den Soom mit den Knoten,
die zu den Literalen der anderen Klauseln gehören,
dass die genau dann da auch ausgewählt werden,
wenn die sich nicht widersprechen und dann weiß ich,
ich kann den nehmen, um diese Klausel wahrzumachen,
ich kann den nehmen, um die Klausel wahrzumachen und so weiter.
Bildet dazu, also die Kanten waren dann so,
dass man gesagt hat, drei Knoten,
die zu einer Klausel gehören, verbinde ich nicht miteinander,
aber wenn sie aus anderen Klauseln sind,
dann verbinde ich sie miteinander, es sei denn,
die sind gerade komplementär zueinander.
Der eine steht für X,
der andere steht für nicht X. Achso, genau,
der Wert K ist dann,
hat die Anzahl der Klauseln
Wenn man dann die drei Klauseln nochmal hat, dann sieht das eben im Grafen so aus,
dass man zu den drei Liter, zu den drei Literalen,
die drei Knoten hier konstruiert, zu den drei Literalen in der Mitte,
die drei in der Mitte, zu den dreien hier rechts dietreiche rechts.
Und dann ist die Idee halt, dass man es jetzt hinkriegt,
in dem Grafen, wenn ich überhaupt eine K-Klicke konstruieren kann,
dann, ich habe K-Klauseln oben in der, gut,
ich habe K-Klauseln hier oben in der Formel,
wenn es jetzt in dem Grafen eine K-Klicke gibt,
dann geht das nur,
wenn ich aus jedem dieser Dreier-Triebel genau einen Knoten auswähle,
an das kann das gar nicht passieren,
weil die Knoten eines Triebels immer gar nicht miteinander verbunden sind
Das heißt, wenn ich Kar-Knoten potenziell überhaupt nur kriegen kann,
die alle miteinander verbunden sind, muss aus jedem Triebel einer gewählt werden.
Und dann kann ich mir noch überlegen, ja,
impliziert das jetzt wirklich eine erfüllende Belegung?
Ja, aber wenn ich hier einen auswähle,
der ist jetzt ja mit allen anderen verbunden aus diesen Triebeln.
Und da ich nur dann da Kanten hingemacht habe,
wenn die sich nicht widersprechen, kann es also nicht sein,
dass ich hier mein Z wähle und in der anderen nicht Z.
Wenn ich das gemacht hätte, dann wäre die gerade nicht miteinander verbunden,
dann habe ich so eine Kante gerade nicht eingebaut.
Also impliziert das irgendwie eine Belegung,
die ich tatsächlich machen kann
Dann kann ich mir noch überlegen, muss die auch erfüllend sein,
ja, wenn ich die tatsächlich machen kann und ich habe
jetzt aus jeder Klausel hier einen ausgewählt,
dann mache ich also jede Klausel wahr.
Funktioniert das, habe ich eine wahrmachende Belegung. Und andersrum muss man noch argumentieren,
wenn ich eine warmmachende Belegung habe,
kriege ich dann auch in meinem Grafen eine Clique hin und
mit einer ähnlichen Begründung in leichter Abwandlung geht das dann halt
auch,
aber lass das
die Konstruktionsidee
Und da muss man halt, nachdem man die Konstruktionsidee hat,
muss man dann nochmal losgehen und tatsächlich diese drei Sachen beweisen,
dass das in Polynialzeit geht, dass wenn die Formel erfüllbar ist,
der grafende K-Klicke hat und wenn der Graf eine K-Klicke hat,
die Formel erfüllbar ist.
Das macht doch immer Sinn, das noch so zu machen,
weil man relativ häufig irgendwie bei der Konstruktion,
hat man ja schon so eine Idee,
dass man sagt, naja, wenn ich so konstruiere,
dann kriege ich das hin, dass wenn die Formel erfüllbar ist,
ich hier eine K-Klicke habe oder so.
Und dann passiert es reichweilig,
dass man vielleicht bei der Rückrichtung hängt, was doch nicht funktioniert,
dass man den Fall doch nicht gut abgedeckt hat und so.
Deswegen ist es wichtig, dass danach dann auch auf
jeden Fall nochmal ganz formal auch zu beweisen
Genau, Überlegung, warum das in Polynialzeit geht, geht relativ schnell.
Ich lese ja quasi einmal über die Formel rüber,
erstelle mir die ganzen Knoten für jedes Literal.
Und dann lese ich nochmal über das Ding rüber und verbinde die Knoten miteinander.
Das geht relativ schnell. Das ist irgendwie hier so ein
O von V-Quaddrat, wenn man das ein bisschen blutforce-mäßig macht.
Das ist auf jeden Fall Polyimialzeit in der Eingabe.
Und dann muss man eben sich überlegen, dass diese Reduktion
wirklich korrekt ist. Und also der Graf, genau,
da eine Klick enthält, wenn die Formel erfüllbar ist.
Angenommen,
die Formel ist erfüllbar
Dann gibt es eine Belegung, die in jeder Klausel mindestens
ein Literal wahrmacht. Vielleicht macht die in einigen Klauseln noch mehr
als ein Literal wahr, aber mindestens eins pro Klausel.
Und wenn ich jetzt aus jeder dieser Klauseln,
die werden ja alle wahrgemacht, nehme ich jetzt eins dieser Warnliterale heraus.
Ich brauche halt überall nur eins, jetzt nicht überall eins raus.
Und die Behauptung ist, die Knoten, die dann zu
diesen gewählten Literalen gehören, die bilden eine K-Klicke.
Nachkonstruktion sozusagen. Und dann überlegt man sich,
was muss ich eigentlich zeigen für eine K-Klicke?
Ich muss zeigen, dass das wirklich K-Knoten sind und dass
die alle paarweise miteinander verbunden sind
Kark Knoten müssen es sein, weil ich
gerade aus Kark Klauseln jeweils einen Knoten ausgewählt habe.
Oder aus den Kark Klauseln habe ich einen zugehörigen Knoten ausgewählt.
Also habe ich Kark Knoten gewählt. Das klappt. Kark
Knoten sind es, weil ich Kark Klauseln vorher hatte.
Und wenn ich mir jetzt zwei Knoten angucke,
jetzt benenne ich die, parametrisiere die,
dann überlege ich mir jetzt, müssen die jetzt wirklich miteinander verbunden sein.
Und dann gilt halt erst mal, dieses R&S oben muss unterschiedlich sein.
Ich habe aus jeder Klausel nur ein Literal ausgewählt und dann
auch nur einen zugehörigen Knoten.
Also gehören die nicht zu gleichen Triebeln, zu unterschiedlichen Triebeln.
Also ist der Indize oben verschieden
Und dann muss ich mir noch überlegen, eine Kante habe ich nur gemacht,
wenn die nicht zu komplementieren, Literalen gehören. Naja,
und zu komplementären Literalen können die aber nicht gehören,
weil dann die Belegung ja gesagt hätte,
in der einen Klausel mache ich X wahr,
in der anderen Klausel mache ich nicht X wahr.
Das kann irgendwie auch nicht passieren. Also kann ich
in der einen X ausgewählt haben und in der anderen nicht
Y oder sowas, aber halt nicht X und nicht X.
Also ist da eine Kante dazwischen. Fertig. Da habe ich gezeigt,
dass ich für zwei beliebige Knoten aus meiner behaupteten Clique
genommen und habe gezeigt, dass wirklich eine Kante dazwischen.
Damit habe ich gezeigt, dass aus all diesen Klarknoten,
dass die alle paarweise miteinander verbunden sind und dann habe ich meine K-Clique.
Dann habe ich die Richtung gezeigt, dann weiß ich,
wenn die Formel erfüllbar ist, dann muss der Graf eine Karklicke enthalten.
Andersrum, wenn da eine Karklicke drin ist,
dann weiß ich, nach Konstruktion kann erst mal,
muss jeder Knoten aus einem anderen Triebel sein, genau.
Nach Konstruktion kann ich ja nicht zwei Knoten aus einem Triebel genommen haben,
weil die ja gerade nicht miteinander verbunden sind.
Ich habe also aus jedem Triebel nur einen Knoten genommen und
zu diesen Knoten gehören irgendwelche Literale und die Behauptung ist jetzt,
wenn ich die warm mache,
dann mache ich die ganze Formel warm
Man sich überlegen, da die Knoten dann nicht miteinander,
wir können uns zu deinem Knoten, zugehörig literal, den Wert eins zuweisen,
so, das klappt, das wird wirklich eine Belegung,
weil ich ja gerade nur nicht komplementäre Literale miteinander verbunden habe,
also entsteht da kein Unsinn.
Das bleibt alles, ist gut. Und dann muss ich mir überlegen,
und dann muss ich mir überlegen,
mache ich jetzt wirklich jede Klausel wahr,
wenn ich aus jeder Klausel literal ausgewählt habe,
dass ich jetzt auf eins setze,
ja,
dann mache ich jetzt in jeder Klausel mindestens ein Literal wahr,
also mache ich die ganze Formel wahr,
Und dann ist man fertig. Jetzt hat man gezeigt,
dass es in Polymalzeit ist. Man hat beide Richtung
der Reduktion gezeigt, oder nicht, man hat gezeigt,
dass die Reduktion korrekt ist, beide Richtungen der genau Dan-Wen-Beziehung.
Und dann ist man fertig. Genau. Grob klar.
Man kann meistens in Vorlesung nur so grob die Idee transportieren
und dann muss man sich das nochmal zu Hause angucken.
Aber so von der Idee ist das, glaube ich,
auch so mit dem,
mit dem Bild wird das vielleicht auch so ein bisschen klarer,
wie man da die Kanten macht.
Und dass da tatsächlich, wenn da eine Clique drin ist,
die Formel erfüllbar sein muss
Genau. Und hier waren dann noch so ein paar andere Probleme,
die auch alle in NP sind,
für die meisten davon haben wir auch gezeigt,
dass die in NP sind und man kann sogar zeigen,
dass die alle NP vollständig sind.
Teil so ein Problem, Meng-Partitionsproblem haben wir gehabt.
Klo-Überdenkungsprobleme haben wir, glaube ich, nicht gehabt.
Geht aber auch. Und die Independence Set habt ihr jetzt
in den Präsenzaufgaben, Färbungsprobleme hattet ihr letztes Mal in den Präsenzaufgaben.
Und genau,
im Mittenkreisproblem
Fragen dazu von eben. Also was bei diesen MP vollständigen Problemen,
was wichtig ist, ist,
erstmal muss man das generelle Verfahren verstanden haben,
dass man weiß, okay, ich muss irgendwie so eine,
von einem MP vollständigen Problem eine Reduktion angeben und ich muss dann,
wenn ich das mache, erstens die Reduktion angeben,
zweitens zeigen das die Reduktion insofern korrekt ist,
als das tatsächlich gilt.
X ist in NL1,
genau damit in Evolution 2 ist und drittens,
ich muss zeigen, dass die Reduktion in Polynialzeit geht,
dann bin ich fertig
Das muss man erst mal so grob als Abstraktion verstanden haben.
Und dann hilft es halt, wenn man sich mehrere von diesen Beweisen anguckt,
einfach um Gefühl dafür zu kriegen, was da so passiert.
Manchmal gehen ja auch ähnliche Konstruktionen in anderen Settings so.
Und danach ist es halt viel Übung.
Also jedes von diesen Dingern geht halt genauso wie ein Algorithmenentwurf,
ist jedes von diesen Dingern ein bestimmter Kreativitätsakt so.
Und den kann man halt nicht,
da kann man jetzt nicht sagen, macht das,
das, das und dann habt ihr eure Reduktion.
Es gibt halt keinen Algorithmus, um Reduktionen zu entwickeln,
die Reduktion selbst ist ein Algorithmus.
Und dem muss man halt kreativ entwerfen.
Und es hilft halt, wie gesagt,
sich irgendwie mehrere anzugucken
Und so ein bisschen zu verstehen, was da so als Techniken
und so im Hintergrund sind. Zwei habe ich noch,
ich glaube, die zweite schaffen wir gar nicht mehr,
aber ich lasse die dann mal drinnen, die ist auch so ein bisschen,
also die erste jetzt gleich, die geht noch,
da kann man auch die Idee so mitnehmen und sagen,
ja, okay, so funktioniert das.
Das zweite ist umfangreich, die lasse ich mal drinnen,
damit ihr mal sehen könnt, wo das hingehen kann später,
aber ich weiß gar nicht,
ob wir das heute noch schaffen.
Na, wenn man die erste erstmal, zwei satt.
Satt hatten wir schon, Satt war gegebene Formel,
ist die erfüllbar. Zwei satt, so ähnlich,
Zweisat fragt gegebene Formel,
gibt es mindestens zwei Belegungen,
die die erfüllen
Also nicht eine, so nicht mindestens eine, wie bei satt, sondern mindestens zwei über zwei satt. Wenn ihr nach sowas übrigens guckt,
also wenn ihr auch so im Kormen liest oder so,
im Opcraft Ullmann meine ich,
relativ häufig gibt es diese Schreibweise zwei satt für das Problem,
das so ähnlich definiert ist wie dieses drei CNF,
also eine KNF gegeben, in dem jedes Literal drei Littman,
in dem jede Klausel drei Literale enthält und dann wird hier gesagt,
zwei Literale, also eine KNF,
in der jede Klausel zwei Literale enthält.
Das war ein anderes Problem, ne? Also da schreibt auch viele zwei Seiten,
ich habe jetzt mal zwei satt geschrieben, um zu sagen,
zwei erfüllende Belegungen, vielleicht wäre irgendwie doppelsatt besser gewesen,
um da Verwirrung zu vermeiden, aber Wenn man das liest,
weiß man ja, da steht ja deutlich was anderes,
als zu sagen,
das ist eine KNF mit zwei literalen pro Klausel,
da steht ja zwei erfüllende Belegungen.
Ideen? Als erstes wäre es gut, ein NP vollständiges
Problem auszuwählen, von dem man eine Reduktion machen möchte.
Das kann man sagen, ich probiere das von Clique.
Das ist wahrscheinlich relativ anspruchsvoll. Leichter ist es meistens in einem Setting zu bleiben,
also dass man sagt, naja, das ist ein Logikproblem,
probiere ich doch mal vom anderen Logikproblem zu kommen.
Also das hatten wir da so satt,
hatten wir drei CNF hatten wir, CNF hatten wir,
dass man eins von denen auswählt und versucht von denen
eine Reduktion anzugeben auf Zweisat
Ach so. Und wir wollen ja zeigen, dass es
NPV ständig ist. Vielleicht erstmal vorneweg die Frage,
wie zeigt man, dass es in NP ist?
Sollte gehen, wie zeigt man, dass das in NP ist?
Genau. Bei Satra hatte ich eine Belegung und beprüfe,
ob das klappt. Bei zwei Sat, ich rate eine,
gucke, ob das klappt, ich rate eine zweite,
gucke, ob das klappt, fertig.
Wenn es bei beiden geklappt hat, okay,
und ich gucke noch, ob die unterschiedlich sind.
Nicht, dass ich zweimal die gleiche rate, aber gut.
Genau, das macht man oder als Zertifikat,
ich kriege zwei Belegungen, ich prüfe,
ob das wirklich unterschiedliche Belegungen sind und ob die das beide erfüllen.
So, das klappt. Also in NP ist es
Reduktion, was könnte man machen?
Warte, von wo willst du überhaupt kommen?
Genau, wir möchten Sat
auch zwei Sat reduzieren
Also es kommt eine Formel F, also irgendeine Formel,
von der ich prüfen will, also Reduktion von satt auf zwei satt.
Jetzt kommt irgendwie eine Formel. Und die Idee war jetzt,
ich nehme hier ein neues Literal oder ein neues Aussagensumme reicher.
Und dann mache ich halt aus FF oder X.
Probieren wir das mal. Zunächst zwei Seiten in NP.
Okay, Zertifikat, die in zwei Belegungen überprüft,
ob die verschieden sind und ob beide die Formel F erfüllt.
Das hatten wir eben kurz besprochen. Das zeigt,
dass das Problem in NP ist. Und das geht natürlich
in Polymialzeit. Zwei Belegungen raten dauert irgendwie zweimal länger
der Formel oder so und dann
Alternativ, nicht die terministische, zwei Belegungen raten und dann deterministisch prüfen,
ob die verschieden sind und ob die die Formel erfüllen.
Das klappt. Dann jetzt die Reduktion, satt auf zwei
satt. Wenn ich das hinkriege, dann weiß ich,
weil Sattja NP vollständig ist, dass auch zwei seit NP vollständig ist.
Sei mal effene Aussagen logische Formel, also eine Probleminstanz von Satt.
Wir hatten ja gestern einmal, um das auch nochmal jetzt zu erwähnen,
wir hatten das gestern ja immer schon diskutiert,
muss ja auch Nein-Instanzen von satt, die völliger Unsinn sind.
Die muss ich ja auch richtig auf Nein-Instanzen reduzieren. Also wenn ich etwas kriege,
was gar keine Formel ist, also beispielsweise,
Klammer auf, Klammer zu, nicht, nicht F,
so ist irgendwie keine Formel, das macht es ja taktisch keinen Sinn.
Sowas könnte es ja aber auch im Alphabet drin,
also das ist ein richtiger Text-String, ich lese einmal rüber,
ich stelle fest, das ist keine Formel,
also kann sie ganz bestimmt nicht erfüllbar sein,
also reduziere ich das auf irgendwie Unsinn,
der keine zwei Seitenstanz ist, aber solche Sinntagsprüfungen,
die erwähnt man immer gar nicht mehr.
Also arbeiten wir gleich damit,
dass wir etwas in taktisch Sinnvolles kriegen,
also sei F eine Aussage, logische Formel, nicht sie F,
sondern sei F eine Aussage logische Formel und X,
irgendeinen F,
nicht eine in F
nicht auftretende atomare Formel
Wir machen F oder X draus. Jetzt müssen wir noch zeigen,
dass, wenn F erfüllbar ist, dann hat G mindestens zwei erfüllende Belegungen.
Und wenn G mindestens zwei erfüllende Belegungen hat, dann ist F erfüllbar.
Das müssen wir zeigen. Klappt das? Wenn ich,
also Pudilialzahl geht, im Pudiliviersaal glaube ich,
dass wir eine Formel oder X ranhängen können,
dass das im Pudilinialzeit geht, okay, das geht.
Erste Reduktion, wenn F erfüllbar ist,
hat G jetzt mindestens zwei erfüllende Belegungen.
Ja oder nein
Wohlwollendes nicken. Welche? Genau, ich mache FV und setze X auf null
und ich mache irgendwas mit F und 6 X auf 1.
Vielleicht habe ich noch ganz schön viele mehr, aber ich habe die zwei.
Klappt, check. Wenn die Formel zwei erfüllende Belegungen hat,
also mindestens zwei, wenn die mindestens zwei erfüllende Belegungen hat,
ist F jetzt erfüllbar,
kriege ich das auch hin
Weil... Genau, wenn das hakt an der Stelle,
es ist schwierig zu sehen, aber genau das hakt an der Stelle.
Das war auch meine erste Idee, dass ich gedacht habe,
ja cool, machen wir F oder X,
das funktioniert ja, ne, Musterlösung aufgeschrieben, festgestellt,
oh, Mist, das funktioniert gar nicht,
wie wir da hingeschmissen haben.
Weil, wenn F eine unerfüllbare Form ist,
nehmen wir mal in F ist eine unerfüllbare Formel mit vier atomaren Formeln.
So, kann man ja konstruieren, ne,
A und B und C und D und nicht A,
unerfüllbar vier unterschiedliche atomare Formeln.
Da gibt es 16 verschiedene Belegungen und alle machen F falsch.
Die Formel G, die wird mit Dixt auf 1
setzen und diesen 16 verschiedenen Belegungen immer wahr.
Also gibt es 16 verschiedene Belegungen, die G gerade warm machen.
Aber null die F-Wahr machen. Blöd. Klappt nicht.
Klappt nicht. Ist F unerfüllbar,
dann hat G als erfüllende Belegung all die,
die X-Wahr machen und mit den Variablen aus F irgendwas Beliebiges machen.
Im Allgemeinen sind das mehr als zwei Belegungen.
Okay, erster Ansatz, verworfen. Coole Idee, hatte
ich auch verworfen. Ja, das wäre nämlich irgendwie,
muss man also mehr machen
Blöde Sachen. Weiterdenken. Jetzt kann man schon mal überlegen,
so dass mit dem oder,
das mit dem oder ist ja nicht schlecht,
dass man irgendwie konstruieren will, ich habe hier eine Belegung,
die das wahrmacht, oder eine zweite.
Irgendwie mit oder wird das wohl sein müssen.
Aber man muss es irgendwie hinkriegen, dass ich quasi,
wenn ich eine erfüllende Belegung für F habe,
dass ich genau die nehmen muss.
Irgendwie sowas muss ich hinkriegen
Und wenn ich mehr für F habe,
mir als eine, dann macht es ja auch nichts,
wenn ich deutlich mehr als zwei für G habe.
Das ist ja weiterhin okay. Es darf nur nicht passieren,
dass ich keine für F habe und jetzt plötzlich zwei oder mehr für G,
das ist irgendwie doof, das will ich haben.
F und Nicht X oder Nicht F und X.
F und Nicht X oder... Das ist fast richtig.
Warum willst du
das F kippen
Ja, warte, oh Gott. Oh nein,
so viele Nichte im Kopf waren. F und nicht,
also guck mal, wenn du F und Nicht-X nimmst,
dann weißt du schon mal,
wenn du eine erfüllende Belegung FF hast,
dann ist die zusätzlich mit X gleich null auch eine erfüllende auf deiner anderen Seite.
Wenn du jetzt machst oder Nicht-F und irgendwas,
dann machst du ja plötzlich alle Nicht-Erfüllenden für F,
die zählen plötzlich bei dir hier mit.
Also wenn F zum Beispiel auch wieder unerfüllbar ist,
dann hast du plötzlich auf der Seite alles,
was nicht falsch macht und noch zusätzlich X auf Eins setzt oder so,
das macht das alles wahr.
Das war schon fast richtig,
wenn du einen nicht streichst an der richtigen Stelle,
dann hast du es
Also F und X ist ja schon mal cool.
Da weißt du schon mal, die erfüllende Belegung Pfeff und
X auf 1 setzen, das ist meine eine.
Jetzt brauchst du noch eine zweite, wo kriegst du die her?
Oder? Das macht ja, das ist ja wie F
und 1. Ja, nee, soll's nicht.
Dann, das ist nicht gut. Dann könntest du es,
warte mal, dann hast du,
wenn F jetzt nur eine erfüllende Belegung hat,
hast du auf der rechten Seite auch nur eine,
das ist doof.
Du hast ja gerade konstruiert F und X oder F und
Dann hast du da ja auch nur eine,
das ist doof. Die ist es fast F,
also quasi F und X oder F und Y.
Jetzt hast du es ja X auf Eins setzen,
macht es wahr, Y auf, also F,
die erfüllende Belegung für F, ne?
Und X auf Eins setzen, erfüllende Belegung, Check.
Y auf Eins setzen, erfüllende Belegung, Check,
X und Y auf Eins setzen, noch eine erfüllende Belegung, Check.
Warte mal, führt das zu Problemen? Du hast dann
ein paar zu viel, glaube ich, ne?
Kann das sein? Oder kriegst du zu viele? Also wenn F füllbar ist,
dann hat hast du da auf jeden Fall auch mindestens zwei,
hast sogar drei, aber geschenkt, ne, hast mindestens zwei.
Wenn du auf der anderen Seite mindestens zwei hast,
ja, da musst du F warm machen, ne,
weil du kriegst ja überhaupt nur eine dadurch hin,
dass FAF muss ja wahrgemacht werden, so, genau,
die klappt auch, sehr gut.
Da bist du bei, da brauchst du das mit mindestens,
weiter bist du bei mindestens drei oder irgendwie sowas,
ne, aber das klappt auch, sehr schön.
Also F und X oder F und Y. Ich hatte gedacht,
an F und X oder F und nicht X.
Dann kriegst du die eine erfüllende durch X auf 1 setzen und
F wahrmachen und die andere durch F warm machen und X auf 0 setzen.
Das ist auch zweifel, das ist quasi die gleiche Idee,
ne. Bei mir sind es halt nur genau zwei,
wenn F eine hat und bei dir sind es drei,
klappt auch super
Genau, probieren wir die mal nochmal. Also,
gleicher Ansatz, sei jetzt eine Aussage, logische Formel,
X einen nicht in F-Auftreten, eine nicht in F-Auftretende Formel.
Und dann machen wir aus F die Formel,
die F und X oder F und Nicht X. Und die Idee dahinter ist halt,
wenn ich jetzt F wahrmachen kann, dann nehme ich mir jetzt diese erfüllende Belegung,
die F wahrmacht und habe auf der rechten Seite X,
also die Belegung, die er wahrmacht, nehme ich,
und ich setze X auf eins.
Das ist meine eine erfüllende Belegung. Oder ich nehme die
Belegung, die F wahrmacht und setze X auf null.
Das ist meine andere erfüllende Belegung. Habt ihr so mindestens
zwei. Wenn es eine erfüllende Belegung für F gibt,
gibt es mindestens zwei für G. Fertig.
Wenn du nicht X durch Y ersetzt,
funktioniert das genauso
Anders, wenn ich gehe, wahr mache, naja,
der muss eins dieser beiden Disjunkte wahrgemacht werden, mindestens eins,
in dem Fall klappt nur eins, aber mindestens eins.
Und um so ein Disjunkt da wahrzumachen, muss ich mindestens F war machen.
Also F und X muss ja wahr werden oder F und nicht nix,
aber dazu gehört, dass F wahrgemacht wird.
Also wird F wahrgemacht. Also wenn die rechte Seite mindestens
zweifüllende Belegung hat, dann muss ich F auch wahrmachen können.
Klappt also. Genau, probieren wir das mal,
wenn man einmal durch die Reduktion geht, in polymeller Zeit,
ne, X ranmachen, nicht X ranmachen,
mit oder verknüpfen,
da passiert nicht so viel.
Also das kann ich leicht
in polymeller Zeit konstruieren
Wenn, ich weiß, F ist erfüllbar, dann,
also sei F erfüllbar,
dann gibt es so eine Belegung, die F wahrmacht,
also AfLF gleich 1 ist und gebe dann mit den Belegungen,
die alles genauso tun wie A, also ich nehme eine Belegung A-Strich,
die wertet alles genauso aus, wie A das macht.
Und das X setzt sie auf 1. Das macht Gewar oder die andere Belegung A-Strichstrich,
die ja auch alles genauso macht wie A, nur halt X zu Null auswertet.
Da habe ich zwei erfüllende Belegungen für G, weil das GN2 satt.
Okay. Andersrum, wenn GN2 satt ist,
dann habe ich so eine Belegung AG gleich 1 und dann
Also da an der Stelle benutze ich gar nicht mehr.
Das ist mindestens zwei erfüllende Belegungen gibt. Ich benutze,
es gibt ja mindestens zwei, also gibt es eine.
Mindestens zwei gibt es ja mindestens auch eine.
Und ich brauche nur eine, um das dann zu zeigen,
dass F auch erfüllbar ist. Also ich benutze nur,
dass es irgendwie mindestens ja eine geben muss.
Die macht dann entweder F und X wahr oder F und nicht X.
Und dann macht sie aber auf jeden Fall F wahr,
wenn sie F und X wahr macht,
dann muss sie X wahr machen und F.
Also muss sie irgendwie F wahr machen, woraus sofort folgt,
dass A von F 1 ist.
Und damit ist dann F erfüllbar. Und dahinter steht nochmal,
Evangelien sogar äquivalent, aber braucht man hier an der Stelle
Ja, und so kann man sich daran tasten,
irgendwie eine richtige Reduktion anzugeben, dass man zuerst einen Ansatz hat,
der da vielleicht auch gar nicht funktioniert,
aber dass man damit mal arbeitet,
die eine Richtung hat ja sogar geklappt,
aber die andere hat ja nicht geklappt,
also zwei von drei Schritten haben geklappt,
es war in Polymialzeit mit dem F oder X und die eine Reduktion von,
wenn er verfüllbar ist, dann ist das in zwei Seiten,
die hat auch geklappt, aber dann die Rückrichtung hat nicht geklappt,
da haben wir gesehen, ja, ist irgendwie ein Fehler drin,
dann hat man versucht, das zu fixen,
manchmal muss man auch den kompletten Ansatz verwerfen,
dass man irgendwie feststellt, okay,
das läuft alles komplett in die Irre,
ich muss das ganz anders machen,
hier musste man ja,
da konnte man ja einfach mit so einem Fix arbeiten,
dass man
jetzt das doch hingekriegt hat
Und dann klappt das. Okay, noch einmal,
wir haben noch ein paar Minuten,
dass wir noch einmal kurz in den sehr umständlichen großen Beweis reingehen,
von so einem anderen Problem.
Das machen wir jetzt nicht mehr komplett ausführlich.
Ich lasse die Folien aber mal da, dann könnt ihr
das für die Nachbereitung euch nochmal angucken, wenn ihr mögt.
Aber das ist halt schon ein sehr umfangreicher Beweis jetzt.
Wenn man Mainzwieber nimmt, dieses Spiel,
wo man irgendwie auf dem rechteckigen Feld irgendwie hinklickt und dann sagt, okay,
irgendwo um mich herum sehe ich drei Minen oder so.
Und dann will man halt alle Minen finden
Und wenn man das generalisiert, dann sagt man,
okay, ich habe irgendwie einen ungerichteten Graphen und auf
jedem Knoten kann eine Mine liegen oder nicht.
Und wenn da keine Mine liegt, dann sagt mir der Knoten eben,
dann kriegt der Knoten irgendwie eine Beschriftung und dann wird gesagt,
wie viele Minen er in seinem Umfeld sieht.
Und sieht er drei, vier, fünf Minen oder sowas.
Das ist halt einfach eine Verallgemeinerung dieses Mine-Seeper-Spiels.
Und so wie es da beschrieben ist,
sind da noch so ein bisschen Lücken drin.
Also um diesen ersten Punkt von der einen Folie irgendwann in
der Mitte nochmal aufzugreifen, man muss das jetzt erstmal formalisieren.
Also man hat so die Idee, so ja,
das meinst du, okay,
ist mir klar,
so Mind-Seeper funktioniert so und so
Aber so wäre es noch keine Sprache. Also man muss
noch irgendwo dahin kommen, dass man das als Sprache ausdrückt,
damit man wirklich sagen kann, ist entscheidbar oder nicht,
geht in Polimialzeit, geht nicht in Polimialzeit.
Und dann kann man sich überlegen,
geht das in NP und ist das NP vollständig?
Aber bevor man das überhaupt verfolgen kann,
muss man es ausformalisieren.
Ist ja denn klar
Hallo. Kriegt einen ungerichteten Graphen. Jeder Knoten, Kannemine
enthalten oder nicht. Und das Ziel ist es dann,
also einige Knoten sind sogar schon beschriftet und das Ziel ist es dann,
die Minen so zu platzieren, dass man gesagt hat,
okay, ich habe jetzt so Minen platziert,
dass jeder Knoten genau so viel Minen sieht,
wie er denn behauptet, dass er sehen würde.
So kann ich das machen oder nicht.
Formalisierung. Erstens, das Problem ist nur dann schwierig,
wenn es mehr freie Felder gibt,
als noch Minen zu platzieren sind
Warum? Naja, wenn es genauso viele freien Felder geht,
wie ich Minen platzieren will,
dann gucke ich mir halt an, ob,
wenn ich das tue, jeder Knoten quasi seine Wünsche erfüllt.
Also wenn Knoten sagt, ich sehe zwei Minen und er
hat in seinem Umfeld aber gar nicht mehr zwei freie Felder,
naja, dann funktioniert das irgendwie nicht.
Ja genau, sonst klappt das. Also gucke ich mir einfach nur an,
ob jeder Knoten noch genauso viel freie Felder in seiner Nähe hat,
wie seine Zahl das sagt.
Und dann bin ich fertig. Also spannend ist das Problem nur,
wenn ich mir freie Felder habe, als ich noch Minen platzieren will.
Wenn ich noch hundertfreie Felder habe und ich will zehn Minen platzieren oder so.
So, und dann kann ich das Problem durch so ein Tupel beschreiben,
dass ich sage, G ist so ein ungerichteter Graf.
F ist eine Zahl, die jedem Knoten wahlweise eine natürliche Zahl zuweist,
nämlich die Anzahl der Minen, die er meint,
in seinem Umfeld zu sehen oder die Zahl minus eins,
wenn das Feld einfach frei ist,
wenn da eine Mine liegen kann oder auch nicht.
Und genau. Und K ist einfach die Anzahl der Minen,
die ich noch platzieren möchte. Diese Minen,
die will ich auf die leeren Felder platzieren, also auf die Knoten,
die von F zu minus eins ausgewertet werden und das soll so passieren,
dass für alle anderen Knoten,
also für die Knoten,
die nichts minus eins ausgewertet werden,
dass der dann gerade seine Anzahl an Minen
in seinem Umfeld sieht
Also wenn da eine 3 steht und der hat sechs frei Felder in seinem Umfeld,
dann muss ich da halt so drei Minen platzieren, dass das funktioniert.
Und das darf zu keinen Widersprüchen mit den anderen Knoten führen.
Also der andere Knoten hat mich plötzlich zwei Minen sehen,
obwohl er sagt, er sieht nur eine oder irgendwie sowas.
Dass die Formalisierung,
man kriegt dann also so ein Tupel GFK und muss entscheiden,
ob ich Kamin so auf die Knoten legen kann,
die mit minus eins bewertet werden, dass für alle anderen Knoten,
deren Wünsche erfüllt sind, klappt das oder nicht.
Wenn ich das schnell ausrechnen kann, kann ich meins wieder schnell lösen.
In NP geht relativ schnell Ich kriege als Zertifikat K-Knoten,
von denen behauptet wird, wenn du da die Minen hinlegst,
ist alles gut. Oder nicht deterministisch, ich rate mir
von den freien Knoten K-Stück und gucke, ob das funktioniert.
Dann gehe ich halt alle anderen Knoten durch und gucke,
ob die wirklich in ihrem Umfeld jetzt diese Kamin sehen.
Also Zertifikat-Liste von Knoten und dann überprüfen,
ob die Liste genau K-Knoten überhaupt enthält oder ob das zu
viel sind und ob wenn ich die jetzt auf diesem Miet,
auf die Knoten lege, ob die dann,
ob das richtig ist,
ob die überall abgelegt werden,
wo minus einsteht und die direkten Nachbarn richtig gezählt werden
So, das geht noch. Also das Formalisieren ist schon so
ein bisschen eine Herausforderung, kriegt man aber noch hin.
Und dann den NP-Algorithmus, der geht schnell. Und jetzt wird es umständlich.
Jetzt muss man irgendwie sagen, von wo will ich kommen?
Ich will von Dreisack wiederkommen. Dann habe ich wieder eine Formel,
die hat eine gewisse Anzahl von atomaren Formeln und die hat eine gewisse Anzahl von Klauseln.
Damit kann man immer irgendwie versuchen zu arbeiten. Und was ich jetzt hinkriegen muss,
ist, ich muss mir irgendwie Gadgets konstruieren, so wie bei diesem Clique-Problem auch,
um abzubilden ob eine Variable auf True oder Fouls gesetzt wird,
ob damit die Klauseln wahrgemacht werden.
Das muss ich irgendwie hinkriegen. Und das,
was ich euch jetzt noch kurz zeigen will,
ist der Rest von der Folie hier,
dass ihr das auch noch mal seht, wenn man,
was immer eine sehr beliebte Gadget-Konstruktion ist,
ich versuche mir etwas zu basteln,
mit dem ich danach auswählen kann,
ob eine Variable auf True oder Fouls gesetzt wird.
Ich nehme mir drei Knoten, also für das Aussagesymbol AI,
also für das IDA-Aussagensymbol, nehme ich mir die drei Knoten hier.
Und die Idee wird sein VIT, symbolisiert True, VIF,
symbolisiert False und VI, ist einfach so ein Hilfsknoten,
der sagt, für das ITA-Aussagesymbol.
Jetzt mache ich noch Kanten dazwischen, so das VI,
VI sitzt in der Mitte,
ist einmal mit dem True-Knoten verbunden,
einmal mit dem Fouls-Knoten
Und der Knoten sagt dann, dieser Knoten VI,
der sagt, ich sehe eine Miene.
Und die anderen beiden, die sagen, wir sind leer.
Wenn da sonst keine Kanten sind,
wenn ich nur das mache, dann führt das dazu,
dass ich entweder auf diesen VIT-Knoten Miene legen muss oder auf diesen VIF-Knoten.
Und je nachdem, wo ich den hinlege,
bedeutet das auf der anderen Seite, auf der Dreisatzseite,
die variable AI wird zu True gemacht oder zu Falts.
Also die Miene, die ich da platziere oder platzieren muss,
die symbolisiert dann quasi die Belegung.
Da steht dann nochmal, der Sinn ist,
dass genau dann eine Miene auf dieses VIT oder VIF gesetzt wird,
wenn diese atomaren Formel AI True oder Falts
gemacht werden muss
Darfst du nochmal,
dass ihr das nochmal gesehen habt und was man dann halt machen muss, ist,
jetzt habe ich quasi etwas gebastelt, mit dem ich weiß,
okay, die Minenbelegung auf diesen Knoten, die wird,
die kann ich interpretieren als eine Belegung der Formel.
Und jetzt muss ich es aber durch die weitere Gadget-Konstruktion hinkriegen,
dass ich auch mir noch ein Gadget baue für die Klauseln,
sodass in den Gadgets so Meme platziert werden müssen,
dass ich weiß, ich kann vorher,
dass mit dem True und Folds nur widerspruchsfrei zu den anderen Gadgets machen,
wenn das wirklich eine erfüllende Belegung ist.
Also so ähnlich wie auch bei dieser Clique,
dass da nur dann eine Clique rauskam oder eine Belegung,
Entschuldigung, das aus der Clique,
nur dann eine Belegung extrehiert werden konnte,
wenn das auch tatsächlich
eine erfüllende Belegung ist
Genau, und das skippen wir mal. Ich zeige euch nochmal das Bild,
dass ihr sehen könnt, wie fies das werden kann.
Wall of Text Ahead. Text, Text, Text.
Jetzt muss man ganz, ganz viel komisches Zeug machen.
Und dann kommt nachher so ein Bild raus.
Und da oben ist so eine Beispielformel A1 oder nicht A2
oder A3. Und danach und A3 oder nicht A4 oder nicht
A2. Und dann habt ihr also vier verschiedene atomare Formeln.
Das sind die,
die findet ihr hier oben wieder
Hier ist V1 für die atomaren Formel A1,
hier ist V2 für die atomare Formel A2,
V3 für die atomare Formel A3 und so weiter.
Und dann sind die hier immer links und rechts verbunden mit
ihren True davor als Knoten. Und der mittlere Knoten sagt immer,
ich sehe eine Mine und die beiden sagen, auf mir könnte,
ich könnte leer sein oder auf mir könnte eine liegen.
Die oberen kriege ich also nur hin, wenn das irgendwie eine erfüllende Belegung ist.
Und diese Gadgets hier unten, die sind dann für die Klauseln.
Und da wird jetzt sowas gemacht, hier könnte, genau,
an der Stelle könnt ihr das sehen, dieser Bereich,
der ganz linke hier, der steht quasi für das erste Literal in der Klausel.
Der steht für das zweite und der steht für das dritte
Und dieser für das erste Element,
der ist jetzt gerade mit dem Knoten verbunden,
der symbolisiert das A1 zu True ausgewertet wird.
Und der hier ist mit dem verbunden, der symbolisiert das A2
zu Fords ausgewertet wird. Also gerade mit dem Bereich hier
A1, nicht A2. Das ist da die Verbindung.
Und die sagen halt auch, sie sehen mindestens eine Miene.
Jeder von den dreien sagt, er sieht mindestens eine Miene.
Das führt dazu, dass ihr,
wenn ihr beispielsweise hier oben links eine hinlegt,
dann sagt ihr damit, ich mache A1 wahr.
Dann habt ihr den Knoten hier zufriedengestellt,
der ist ja nur für das Literal da,
der ist nur für die atomare Formel da.
Und ihr habt
auch den Knoten hier zufriedengestellt
Der jetzt damit quasi symbolisiert, okay, die Klausel wurde auch wahrgemacht. Wenn ihr oben das gerade so mit Minen belegt,
dass von der ersten Klausel nichts wahrgemacht wird,
wenn ihr A1 auf falsch setzt,
A2 auf wahr und A3 auf falsch,
dann setzt ihr also hier eine Mine hin, A1 falsch,
A2 wahr, ihr setzt da eine Mine hin und A3 macht ihr auch falsch,
das heißt, ihr setzt da eine Mine hin,
dann sind die drei hier, alle nicht zufrieden.
Ja, die sehen alle drei gerade keine Mine,
weil die Klausel halt nicht wahrgemacht wird. Und das ist doof,
weil damit die drei jetzt hier eine sehen,
muss ich da unten in den mittleren Bereich überall eine hinlegen
Und dann ist der hier aber unglücklich,
weil der sagt, er will nur zwei sehen.
Er sagt dann, naja, doof. Das heißt,
das Ganze klappt nur, wenn ihr da oben mindestens eine Mine
so hinlegt, dass ein Literal hier draus wahrgemacht wird.
Wenn ihr das macht, ist mindestens einer dieser Knoten zufrieden,
einer, zwei oder sogar alle drei. Dann braucht ihr,
weil ja schon einer von denen mindestens zufrieden ist,
von den dreien hier in der Mitte, nur mindestens zwei ausnutzen.
Wenn ihr genau zwei ausnutzt, ist der hier auch zufrieden
Wenn ihr ein oder null ausnutzt, dann kriegt ihr den trotzdem zufrieden hin,
indem ihr noch die Hilfsknoten hier unten benutzt. Und das merkt man so beim Konstruieren,
dass man beim Konstruieren merkt, okay, das da oben funktioniert,
dann bastelt man das hier mit den drei Knoten,
dann stellt man fest, ja,
ich brauche irgendwie so, man nennt das dann so Komplementierknoten,
dann klappt das mit denen hier und dem in der Mitte und dann stellt man nochmal irgendwann fest,
ah,
ich brauche noch so ein Hilfskonstrukt.
Und dann klappt das. Und wenn die Formel jetzt umfangreicher wird,
kann man sich schon vorstellen, da passt das nicht mehr auf ein Bild,
aber das ist so der Kern dieser Konstruktion.
Und davor wurde sie beschrieben und hier folgt jetzt noch so der Beweis,
dass das mit der Laufzeit klappt und dass das Boah.
Dass das insgesamt klappt. Wenn ihr mögt, könnt ihr
das zu Hause nochmal nacharbeiten. Aber es ist halt schon
eine sehr anspruchsvolle Konstruktion und auch vom Beweis dann eben ein bisschen knifflig.
Aber vor allem ist es schwierig, überhaupt auf die Konstruktionsidee zu kommen.
Letzte Folie. Diese Woche, letzte Woche,
P eingeführt für effizient lösbar, NP eingeführt,
um Vergleichsdingen zu haben und dann vor allem NP vollständig eingeführt,
um zu sagen, das Problem ist sehr wahrscheinlich nicht effizient lösbar.
Genau, das war es.
Fragen noch
War das eine Frage? Nee. Frage? Keine Ahnung
. Mal fragen. Erstens, zweitens, Stimme weg.
Okay, nächsten Montag machen wir noch Zusammenfassung.
Ja, am nächsten Montag machen wir noch Zusammenfassung.
Und nächsten Dienstag fällt aus. Also den Montag noch Zusammenfassung
und dann haben wir es geschafft.
Schöne Woche