Das ist Leute. Der ganze vordere Bereich hier riecht danach.
Bitte? Ja. Kann ich verstehen. So, die
vorletzte Vorlesung im Automatenteil. Heute ist die vorletzte, morgens
die letzte. Nächsten Montag übernimmt Christopher Habel mit dem Logikteil.
Gut. Und je nachdem, wie schnell ich heute bin,
Je nachdem, wie schnell ich heute und morgen bin,
kriege ich das vielleicht morgen noch hin,
irgendwie so in den letzten, keine Ahnung,
45 Minuten oder sowas, so eine Zusammenfassung zu machen.
Ansonsten haben wir geplant, dass ich auf jeden Fall
ganz am Ende der Veranstaltung nochmal eine Vorlesung habe,
wo ich dann eben den Automatenteil irgendwie zusammenfasse.
Repetitorium gibt es auch, wisst ihr ja. Und ja,
ansonsten, wir sind ja gerade in der Mitte des Mesters da irgendwie.
Die Klausuren noch in weiter Ferne. Was wir heute machen
wollen? Wir wissen ja schon, es gibt Probleme,
also wir haben irgendwie die große Klasse von Problemen,
dann haben wir die Touring-Maschine eingeführt,
um irgendwie uns Gedanken darüber machen zu können,
welche Probleme wir lösen können,
welche Probleme wir nicht lösen können
Und dann haben wir eben mit Entscheidbarkeit und Unentscheidbarkeit und dem Halteproblem eben irgendwie Techniken kennengelernt,
wie man von Problemen nachweisen kann, dass die unentscheidbar sind.
Und jetzt nur zu wissen, dass ein Problem entscheidbar ist,
du kannst doch nicht jetzt schon gehen.
Ich bin jetzt schon gelangweilt. Nur von einem Problem zu wissen,
dass es entscheidbar ist, reicht halt für die Praxis nicht,
weil, nehmen wir mal an, ihr habt irgendwie,
keine Ahnung,
ihr wollt Zahlen sortieren und ihr wollt
100 Zahlen sortieren
Das dauert irgendwie, nehmen wir mal, das dauert eine Stunde.
Das wird schon für die meisten Fälle irgendwie nicht mehr praktikabel sein.
Also wenn ich irgendwie bei Google eine Suche starte und ich muss eine Stunde warten,
bis mir irgendwie die Top 5 angezeigt werden, ist irgendwie nicht praktikabel.
Also muss ich irgendwie messen können noch, wie schnell Algorithmen sind oder auch,
was auch interessant sein kann, welchen Speicherbedarf sie haben,
um dann eben wirklich sagen zu können, okay,
dieser Algorithmus ist schneller als der Algorithmus,
also nehme ich lieber die Implementierung oder vielleicht auch so Sachen sagen zu können,
wie für dieses Problem gibt es überhaupt keinen schnellen Algorithmus,
sondern jeder Algorithmus, der das Problem löst,
ist zumindest auf gewissen Problemgrößen dann nicht mehr praktikabel.
Sowas will man
irgendwie sagen können
Und dazu gibt es dieses Gebiet der NP-Vollständigkeit,
wo man eben versucht, Probleme so zu klassifizieren,
dass man sagen kann, dieses Problem lässt sich effizient lösen,
dieses Problem lässt sich nicht mehr effizient lösen.
Das waren die zwei Klassen, die wir letztes Mal kennengelernt haben,
die Klasse P und die Klasse NP. P heißt,
es gibt eine deterministische Touring-Maschine,
der kann nicht irgendwie ein Eingabewort vorlegen und dann arbeitet die Touring-Maschine maximal,
putin ihm Geld viele Schritte,
das heißt,
es gibt irgendeinen Pulinum P,
in das kann ich die Wortlänge reintun,
dann kommt irgendwie ein Zahlenwert
raus und länger darf die Touring-Maschine nicht arbeiten
Also wenn die Touring-Maschine hier mit PN gleich Endquadrat zeitbeschränkt ist,
dann heißt das auf Eingaben der Länge 5,
darf ich 25 Schritte machen auf Eingaben der Länge, 6,
36 Schritte auf Eingaben der Länge 7,49 und so weiter.
Also für ein Problem, eine DTM entwickeln,
sodass es dann eben ein festes Polynum für diese Touring-Maschine gibt,
sodass eben jede Rechnung höchstens so viele Schritte hat, wie eben dieses Polynum sagt.
Dann haben wir noch kennengelernt über diese erweiterte Church-Touring-These,
Dass es im Grunde genommen egal ist,
ob man hier eine DTM nimmt oder ob man ein anderes Berechnungsmodell nimmt,
inklusive unserer heutigen Rechner,
weil die sich alle so mit polinimiell viel Aufwand ineinander simulieren lassen.
Das heißt, wenn ich sagen kann,
es gibt einen polinumiellen Algorithmus, der das Problem mit einer DTM löst,
dann gibt es auch einen polinimiellen Algorithmus,
der das Problem auf unserem heutigen Rechner löst.
Also wenn mich nur interessiert,
ob ein Problem ein P ist, dann ist es egal,
ob ich über eine DTM argumentiere oder über sowas Pseudo-Code-artiges,
was ich auf heutigen Rechnerarchitekturen ausführen kann.
Dann hatten wir noch die Problemklasse NP.
Und da tut man all die Probleme rein,
die eben von einer nicht-deterministischen Touring-Maschine in Polynialzeit berechnet werden können
Warum die beiden Klassen wichtig sind, da kommen wir gleich noch zu.
Erstmal nur, dass ihr nochmal seht, die beiden Klassen haben wir.
Und da wollen wir jetzt gleich Probleme einsortieren. Und das,
was man aus der Erfahrung weiß, ist,
dass Probleme in P allgemein als effizient lösbar gelten.
Ja, warum ist das so? Weil im Grunde genommen Polynome
mit der Eingabelänge noch so wachsen, dass man sagt,
das ist relativ verträglich. Wenn ich irgendwie so ein Polynom-Endquadrat habe,
dann kann ich halt irgendwie die Länge meiner Probleminstanz verdoppeln.
Das ist meine Probleminstanz nicht mehr entlang, sondern zweimal N.
Und meine Sprechenzeit springt dann eben irgendwie auf 4 Endquadrat,
also auf das Vierfache. Das ist immer noch okay.
Deswegen gelten die als effizient lösbar im Unterschied zu Problemen,
für die man exponentiell viel Zeit braucht,
also wo wir nicht mehr eine polyonelle Zeitschranke haben, sondern sowas wie 2 Hochennen.
Da wachsen dann die Anzahl der Schritte viel zu schnell,
als dass man da noch von effizient lösbar sprechen könnte.
Und das, was wir heute machen wollen, ist,
wir wollen für Probleme, für die wir keinen Algorithmus im T finden,
irgendwie eine Technik entwickeln, mit der wir sagen können,
es gibt auch tatsächlich keinen.
So, warum ist das praktisch? Naja,
wenn man irgendwie, man arbeitet am Problem,
will das irgendwie effizient lösen,
man kommt nicht voran
Wenn man jetzt irgendwann zeigen kann, ach so,
das geht wirklich nicht. Also nicht nur,
ich bin zu doof, um das zu finden,
sondern auch, es geht wirklich nicht.
Dann kann man eben versuchen, seine Zeit irgendwie in andere Dinge zu stecken.
Beispielsweise kann man versuchen, das Problem nicht exakt zu lösen,
sondern mit einem Approximationsalgorithmus nur so ungefähr.
Dann kriege ich vielleicht nicht, keine Ahnung, den optimalen Preis raus,
um von hier nach Tokio zu fliegen oder so,
sondern nur so eine Näherung.
Und wenn die Näherung dann gut genug für mich ist,
ist das vielleicht auch okay.
Wenn ich dann eben das Ergebnis schneller ausrechnen kann.
Oder man kann mit anderen Techniken dann auch arbeiten.
Aber das Wichtige ist, dass man dann eben aufhören kann,
ein Problem in P zu, einen Algorithmus in P zu suchen.
Ja, und da unten steht schon in Klammern,
solche Technik gibt es eigentlich im Moment nicht
Aber wir können was entwickeln,
womit wir zumindest dann sagen können, dass es sehr,
sehr, sehr unwahrscheinlich und zwar so unwahrscheinlich,
dass ich dann eben auch meine Zeit lieber mit anderen Dingen verbringen kann.
Das wollen wir heute machen. Da nochmal,
was ich eben auch erzählt hatte, die Klasse P,
mit da drunter der Beschreibung, dass dann eben ein Algorithmus existiert,
der die Sprache akzeptiert im polinärer Zeit und eben bei einer Eingabe der Länge ändern,
eben N-Hoch-K viele Schritte braucht.
Und das O, wenn ihr das noch von der letzten Vorlesung erinnert,
das O unterdrückt quasi eine Konstante, das bedeutet,
ich brauche eigentlich nicht N-Hoch-K-Schritte,
sondern es gibt noch irgendeine konstante D derart,
dass ich D mal in hoch-k-fide Schritte brauchen kann
Hat den Sinn, dass,
wenn ich beispielsweise zwei geschachtelte Vorschleifen habe und beide sagen sowas
wie für I von 1 bis Ende und dann sagt die nächste für J von 1 bis N,
dann weiß ich schon, der innerste Schleifen rumführt irgendwie Endquadratmahl oft ausgeführt.
Dann kann ich sagen, ja, das ist ein UN-Quadrat,
weil wenn er jetzt beispielsweise fünf Anweisungen irgendwie stehen,
dann ist das eigentlich fünfmal Endquadrat,
dann stecken da auch so Sachen drin,
wie dass die Zähler von den Schleifen erhöht werden müssen und all sowas,
das will ich alles ein bisschen ignorieren,
sondern ich will nur sagen, die Konstante ist mir egal,
das ist in O von Endquadrat.
So, jetzt steht hier, dass die DTM diese Sprache akzeptiert.
Es gab ja irgendwie diesen Unterschied zwischen akzeptieren und entscheiden und
man kann jetzt hier zeigen, dass es egal ist,
ob ich hiervon akzeptieren rede oder von entscheiden.
Das ist der nächste Satz
Elf wird von einem Algorithmus im Polemimialzeit entschieden. Richtung von rechts nach links ist klar,
wenn ich ein Problem im Polemimialzeit entscheiden kann, dann kann ich es auch,
was eben in der Klasse P verlangt wird, im Polemimialzeit akzeptieren.
Akzeptieren ist ja weniger als entscheiden, also ist die Richtung ganz einfach.
Die Rückrichtung ist schwieriger. Wie zeige ich, dass ich,
wenn ich eine Touring-Maschine habe, die ein Problem akzeptiert,
dass sie das dann auch entscheidet,
also dass sie insbesondere auch auf 9-Instanzen anhält.
Hier war ja, wenn ihr hier noch mal hinguckt,
es gibt eine PN-Zeitbeschränkte,
die TMA mit LA gleich L und hier stand dann zur Erklärung,
sodass für jedes XNL mit X hat die Länge N eben ins HIDU von Endquadrat akzeptiert wird.
Von den Wörtern, die nicht in L sind,
wird da gar nichts gesagt. Es wird nur gesagt,
die DNL sind, die möchte ich mit dieser Zeitschranke akzeptieren.
Das ist aber egal. Ich kann jede im Polemialzeit
akzeptierte Sprache und Polen die Halbzeit entscheiden.
Und zwar mache ich das so. Ich nehme mir einen Algorithmus,
der das Problem L in dieser Zeit U von NhochK akzeptiert.
Dann weiß ich, es gibt irgendwie so eine konstante C,
sodass A die Sprache höchstens zehnmal in HochK-Schritten akzeptiert
Das heißt, wenn das Wort in der Sprache drin ist,
mache ich maximal zehnmal N hoch-k viele Schritte und akzeptiere dann.
Und die ganze Idee ist jetzt,
dass ich dann ja auch einen Algorithmus schreiben kann,
der erstmal dieses zehnmal N hoch-k ausrechnet,
dann diese Touring-Maschine so viele Schritte machen lässt.
Und wenn sie dann halt nicht akzeptiert hat,
weiß ich auch, dass sie danach nicht mehr akzeptieren wird.
Das ist ja gerade die Aussage davon,
dass dieser Algorithmus A mit der Zeitschranke O von Nhochk arbeitet.
Da sage ich ja gerade, nach RNOK-Schritten wird er akzeptiert haben.
Sonst geht das eben nicht mehr. Also ein Algorithmus-A-Strich,
der entscheidet, berechnet bei Eingabe X zunächst eben dieses zehnmal XOK,
simuliert A,
dann diese Essschritte lang
Und wenn er akzeptiert hat, akzeptieren wir auch,
hat er nicht akzeptiert, lehnen wir ab.
Und damit entscheiden wir dann die Sprache,
weil wir bei jeder Eingabe anhalten nach endlich vielen Schritten.
Und richtig ja oder nein sagen. Da kann man sich überlegen,
dass man das bei einer NTM auch machen kann.
Also wenn ich euch eine NTM gebe,
die so ein Problem entscheidet, die so ein Problem akzeptiert,
dann wird sie das eben auch entscheiden können.
Ich rechne die Zeitschranke aus und bei jeder Rechnung zähle ich
dann halt einfach mit. Und wenn ich zu viele Schritte
anfange zu machen, dann höre ich eben auf.
So kann man zeigen, dass die Klasse aller Probleme in NP
in den entscheidbaren Sprachen enthalten ist
So. Gut, macht also keinen Unterschied,
ob man von akzeptieren oder entscheidend spricht,
dann ist es schöner, wenn man von entscheidend spricht,
weil dann kann man immer sagen, die Turing-Maschine,
die DTM rechnet auf jeden Fall nur U von N hochkaifile Schritte.
Entweder sagt sie dann ja oder nein, aber sie ist dann
eben fertig. Typisches Beispiel für ein Problem in P,
kennt ihr vielleicht aus DM, weiß ich gerade nicht genau,
gegeben gerichteter Graf und zwei Knoten, wollt ihr halt wissen,
ob ein Pfad von S nach Tee existiert,
der höchstens aus dieser,
höchstens aus dieser Zahl K von Kanten besteht
Das ist ein ähnliches Problem wie einen kürzesten Pfad zu bestimmen,
weil um das Problem zu lösen,
könnt ihr in kürzesten Pfad bestimmen,
zählt die Anzahl der Kanten und vergleicht das mit dem K.
Wenn das Karl geringer ist, dann gibt es keinen Pfad,
der weniger als Karknoten, also wenn das K höher ist,
gibt es einen, nämlich den kürzesten.
Typischerweise ein P, ihr fangt irgendwie in einem Knoten
an und startet dann der Extrasalgorithmus zum Beispiel. So,
und jetzt ist spannend, dass das Problem mit P liegt,
also sagen wir da, das ist effizient lösbar.
Und bei relativ vielen Problemen ist es so,
dass wenn man die ein bisschen abwandelt,
dann scheinen die schon nicht mehr ein P zu sein.
In dem Beispiel ähnliche Eingabe hier,
auch wieder ein ungerichteter Graf,
zwei Knoten,
S und
Und wir wollen jetzt wissen, ob ein ST-Fahrt existiert,
der aus mindestens Karkanten besteht. Sprich, wir wollen jetzt,
das ist das, im Grunde genommen das Problem des längsten Pfades.
Wir wollen nicht mit dem kürzesten Pfad bestimmen,
sondern wir wollen jetzt in längsten Pfad bestimmen.
Wenn wir den längsten Pfad bestimmen könnten,
könnten wir das wieder mit dem K vergleichen und dann wissen wir,
ob es eine Pfad gibt, der mindestens aus Karknoten besteht oder nicht.
Wenn das K größer ist als der längste Pfad,
dann gibt es sowas nicht, wenn es kleiner ist,
gibt es das.
Das Problem wiederum lässt sich irgendwie nicht in P lösen,
also zumindest haben wir aktuell keine Idee, wie man das machen kann.
Aber, wenn ich euch einen Pfad gebe,
könnt ihr schnell überprüfen,
ob der
diese Eigenschaft erfüllt oder nicht
Wenn ich euch einen Pfad gebe, könnt ihr gucken,
geht er wirklich von S nach Tee.
Falls ja, zählt er noch, wie viele Kanten das sind.
Wenn das K-Kanten oder mehr sind, könnt ihr sagen,
ja, und wenn es weniger sind, sagt ihr, nein.
So, und das kann man ausnutzen, um eine alternative
Definition von NT aufzustellen. Bisher hatten wir NP ja so definiert,
dass wir gesagt haben, okay, NP ist die,
sind die Probleme, die sich vorhin an nicht-deterministischen Touring-Maschine-Polimonialzeit bestimmen lassen.
Und jetzt kann man mit dieser Idee der Verifikation einer Lösung
eine andere Definition angeben und kann dann eben zeigen,
dass sie zu NT-Äquivalent ist
Zeige ich euch deswegen, weil die erstens in der Algorithmik
sehr häufig auftaucht und zweitens ist das ganz schick,
mal zu sehen,
dass nicht die Terminismus und so ein Verifikationsding im Grunde genommen das Gleiche ist.
Ein Verifikationsalgorithmus A, der soll jetzt gegeben eine Probleminstanz X
und ein Zertifikat Y überprüfen, ob X in der Menge drin ist oder nicht.
Also er kriegt zwei Eingaben X,
die gewöhnliche Eingabe in dem Beispiel von eben irgendwie der Graf
und Y ein Zertifikat,
das wäre jetzt irgendwie
ein Pfad
So. Und AWFZX, wenn es eben so ein Zertifikat gibt. Das heißt,
in der Sprache sollen jetzt all die Worte X drin sein mit der Eigenschaft,
dass irgendwie ein Zertifikat existiert, sodass A eben mit XY 1 ausgibt.
Sprich, in dem Problem von eben könnt ihr relativ schnell ein Verifikationsalgorithmus angeben,
der nimmt die Probleminstanz, nämlich diesen Grafen und ein Pfad,
von dem behauptet wird,
dass der jetzt eben die Länge K hat und überprüft das einfach,
ob das stimmt.
Und die Grafen, für die ist so ein Zertifikat gibt,
die nehmen wir in diese Menge L auf
Und dann hat man genau diese Sprache mit dem,
hätte man genau diese Sprache hier,
weil man dann genau diese Tubelder aufnehmen kann,
für die es eben so ein Pfad gibt.
Ob ich Xandy mit Geld bete. So. So,
und jetzt, welche Sprachen sind jetzt in NP?
Dafür ist es eben wichtig, dass dieser Algorithmus,
dieser Verifikationsalgorithmus, nur im Polyum Jahrzeit abläuft.
Und zusätzlich wird noch verlangt,
dass das Zertifikat pudinumielle Länge in der Eingabe hat
Also, X ist die Eingabe, irgendwie der Graf in dem Beispiel von ihm.
Und jetzt wird verlangt, dass das Zertifikat nicht irgendwie eine exponentielle,
nicht irgendwie eine exponentielle Größe in der Eingabelänge hat, sondern eine Pudinmielle.
Also, wenn der Graf aus zehn Knoten besteht,
darf das Zertifikat eben irgendwie, wenn es jetzt Endquadrat groß sein darf,
100, 100 Knoten enthalten. So,
und dann sagt man,
L ist in NP genau dann,
wenn so ein Algorithmus A mit zwei Eingaben und mit Pudinmielle Laufzeit existiert,
sodass für irgendein C eben in L all die Xe drin sind,
für die so ein Zertifikat dieser Länge existiert,
sodass A XY eben eins ist
So, gleich kommt das Beispiel, dann ist das Klare.
Machen wir zuerst das Beispiel unten. Dieses Mengenpartitionsproblem,
was wir letztes Mal auch hatten,
da kann man eben entweder ein nicht deterministischen Algorithmus nehmen,
der rät dann zuerst diese Teilmenge A.
Da braucht er irgendwie maximal, maximal so viele Schritte für wie S-Elemente enthält.
Und dann überprüft er einfach, ob diese beiden Summen gleich sind.
Das wäre nicht deterministisch. Ein Verifikationsalgorithmus würde sagen,
gib mir die Menge A und dann überprüfe ich,
ob sie diese Eigenschaften hat oder nicht
Und wenn man beweisen will, dass das das Gleiche ist,
würde man im Grunde genommen einfach nur zeigen,
dass der Verifikationsalgorithmus, nee, andersrum,
dass der nicht-diterministische Algorithmus das Zertifikat rät.
Und andersrum, bei dem Verifikationsalgorithmus würde man,
dem würde man eine Rechnung des nicht-diterministischen Automaten vorgeben.
Also da nochmal die beiden Unterschiede beim Verifikationsalgorithmus kriegt ihr neben
der Eingabe noch ein Zertifikat und beim Nicht-Determinismus könnt ihr raten
Nehmen wir mal an, ihr habt das Clique-Problem.
Also beim Clique-Problem kriegt ihr einen Grafen und eine Zahl K
und ihr sollt überprüfen, ob der Graf K-K-Knoten enthält,
die alle paarweise miteinander verbunden sind.
Also wenn K3 ist, muss ein Dreieck sein,
wenn K5 ist, habt ihr irgendwie fünf Knoten und jeweils zwei davon sind alle miteinander verbunden.
Wie wäre denn ein Verifikationsalgorithmus für das Clique-Problem?
Was müsste der denn machen? Also damit das in NP
ist, müsste der in Polynialzeit ablaufen.
Der kriegt eine Probleminstanz, also ein Grafen und die Zahl K.
Und wie sieht jetzt
das Zertifikat aus
Damit er arbeiten kann. Wenn ich euch einen Grafen gebe,
der hat zwei Millionen Knoten,
ist ja gar nicht so unwahrscheinlich, dass er irgendwie,
keine Ahnung, eure Freunde bei Facebook oder so,
zwei Millionen Stück.
Und ich behaupte jetzt, oh cool,
da ist eine 200er-Clique drin.
Also ihr habt 200 Freunde,
die sich alle gegenseitig kennen
So, jetzt könnt ihr sagen, echt,
das ist so cool,
jetzt gehe ich mal alle meine zwei Millionen Freunde durch und teste,
ob das stimmt, dauert irgendwie ewig.
Was würdet ihr denn von mir erwarten, um euch davon zu überzeugen,
dass ihr wirklich diese 200 Freunde habt, die sich alle gegenseitig kennen?
Was wollt ihr denn von mir hören? Bitte? Was
war das? Ja. Was müsste ich euch denn geben?
Genau, die 200 Namen, die das sein sollen,
dann kannst du selbst nachgucken, ob das stimmt oder nicht.
Bei anderen Problemen geht das genauso. Also wenn ihr
jetzt irgendwie, was haben wir denn noch so
Wenn ihr wissen wollt, ist auch so ein Problem gegeben,
irgendwie jede Menge Zahlen. Irgendwie 2.000 Zahlen. Und
ich behaupte, da gibt es eine Teilmenge drin,
sodass die Summe dieser Zahlen einen bestimmten Wert erreicht.
Also ich gebe euch 2.000 Zahlen und den Wert 7.345 und
ich behaupte unter den 2.000 Zahlen gibt es ein paar,
die genau diese Summe haben.
Dann kann ich eure Zertifikate auch genau diese Zahl geben und ihr überprüft halt,
erstens sind die da drin und zweitens ist die Summe wirklich die gesuchte Zahl.
So geht das mit Verifikationsalgorithmen. Und was würde nicht
der terministische Algorithmus machen, um das Clique-Problem zu lösen
Der kriegt ja jetzt nicht das Zertifikat, also was tut der?
Genau. Der redet die 200 Knoten und guckt,
ob die eine Klicke sind. Und das macht er
nicht immer wieder, sondern er macht das einmal.
Er macht das dann einmal nicht deterministisch, dann hat man
ganz viele Konfigurationen, wo genau 200 Knoten geraten sind.
Und dann überprüft er einen IND-terministisch,
ob das eine Klicke ist oder nicht.
Dann habe ich nicht die terministisches Klicke-Problem gelöst.
Genau. So. Was macht man deterministisch,
um das Klicke-Problem zu lösen
Also das war jetzt einmal mit Raten, Raten kann ich
irgendwie nicht deterministisch nicht, deterministisch nicht, ist doof.
Oder mit einem Zertifikat, das kriege ich üblicherweise beim deterministischen Algorithmus auch nicht.
Also wenn ich euch jetzt nur den Grafen gebe und ihr gucken wollt,
ob da eine Clique mit 200 Knoten drin ist.
Was macht ihr denn dann deterministisch?
Wenn ihr so lange brauchen dürft, wie ihr wollt.
Und so viel Speicher benutzen dürft, wie ihr wollt.
Soweit sagt man, ob er den sehr spukkompetent
Genau, du fängst mit einem Knoten an,
guckst dir alle Nachbarn an, das müssen ja schon mal
200 Stück sein, damit das irgendwie eine Clique wird.
Und dann guckst du dir von all den Nachbarn an,
ob die auch alle miteinander verbunden sind. Falls nicht,
nimmst du den nächsten Knoten oder seine anderen 200 Nachbarn,
je nachdem. Das wird eine Heidenarbeit. Das läuft darauf
hinaus, dass sich alle 200 Elemente in Teilmengen anzugucken.
Das sind ganz schön viele. Blöderweise gibt es auch nichts,
was irgendwie sonderlich effizienter wäre. Also das wird schlimmer als Exponentialzeit,
aber es gibt auch nichts Bekanntes, was irgendwie sonderlich viel schneller für das Problem wäre.
Das Problem ist also, in NP und da schnell lösbar,
aber es lässt sich scheinbar irgendwie nicht schnell in P lösen.
Und das, was wir jetzt machen wollen,
ist genau diesen Sachverhalt irgendwie auch tatsächlich zu beweisen,
dass man wirklich sagen kann, okay, es liegt nicht daran,
dass mir einfach nur kein schöner, schneller Algorithmus einfällt,
sondern es gibt wirklich keinen.
Das ist das Ziel. Da doch mal,
warum die Äquivalent sind, oder dass die Äquivalent sind und darunter,
wie man das halt üblicherweise dann irgendwie beweisen würde.
Das wird euch nächstes Semester in der AD-Vorlesungssuche nochmal begegnen.
Da arbeitet man dann mit dieser Verifikationsidee. So,
jetzt die Frage, wie löst man die deterministisch?
Haben wir eben so ein bisschen diskutiert? Allgemein kann man zeigen,
wenn ein Problem in NP ist,
dann gibt es irgendwie eine natürliche Zahl und einen deterministischen Algorithmus,
der die Sprache in zwei hoch O von N hochk entscheidet
Das ist schon ziemlich hässlich, also nicht deterministisch ist das dann wahrscheinlich so
ein O von Nhochk, deterministisch in zwei Hochofen Nhochkarben.
Beweisidee, wenn L in NP ist, gibt es einen Verifikationsalgorithmus,
der irgendwie ein O von Nhochkar arbeitet.
N ist dabei die Eingabelänge. Und das Zertifikat hat auch irgendwie
so eine Länge O von Nhochc für irgendeine konstante C. Das,
was man jetzt deterministisch machen kann, man geht alle diese zwei Hochofen,
N-O-C-Zertifikate durch, führt für jeden den Verifikationsalgorithmus aus.
Und dann braucht man zwei Hochofen N-O-C,
mal genommen mit O von N hochk, viele Schritte.
Also für jedes Zertifikat diesen N-Hochkar-Algorithmus anschmeißen und gucken,
ob irgendwann mal Jahr rauskommt oder nicht
Geht in zwei Uf und N hoch K. Kann man abschätzen,
also man kann irgendwie das Produkt von dem hier,
von dem Zwei-Uf und NOC, mit dem abschätzen,
dass das ungefähr das sein muss.
Das ist aber echt langsam. Also wenn ihr,
selbst wenn hier das K1 ist,
und ihr setzt da irgendwie 100 ein oder so,
also zwei hoch 100, das ist schon so eine Zahl,
die ist irgendwie abstrus groß.
Wenn sowas wie 100 zum Quadrat oder so,
das ist echt okay, da kommt dann irgendwie 10.000 raus,
10.000 Schritte kann man
gut machen
Auf der nächsten Folie steht nochmal,
falls ihr das zu Hause mal euch angucken wollt, ein bisschen genauer,
warum das Produkt von dem und dem gerade diese Schranke,
zwei Hochuf und Nhochk erreicht.
Ich überspringe das mal, könnt ihr euch zu Hause angucken,
wenn ich das interessiert, warum man da gerade hinkommt.
Ansonsten reicht es, wenn ihr euch merkt,
ein NP-Problem lässt sich die terministisch in Exponentialzeit lösen.
Da die beiden Sachen mit den Mengenpartitionsproblemen nochmal,
die wir eben schon diskutiert hatten, wenn ich das deterministisch lösen will,
dann habe ich eben keine andere Möglichkeit im Moment,
außer hier alle Teilmengen durchzugehen und dann eben immer zu gucken,
ob diese beiden Summen gleich sind oder nicht.
Da ist die Laufzeit deterministisch eben in diesem O von 2
Aber nicht deterministisch könnte ich mir eben eine Sonne Teilmenge raten,
da brauche ich nur es viele Schritte für und dann
die Summe testen und dann ist das eben nicht
die terministische O von S und das ist in NP.
Also das ist ein Polynom mit Exponent 1 sogar nur, das ist sehr schön schnell.
Genau. Fragen bis dahin. Danach kommen jetzt noch so ein paar andere,
nicht die terministische Probleme, Teil so ein Problem,
das hatte ich eben einmal kurz erwähnt,
gegeben eine Menge von natürlichen Zahlen und so eine Zahl Tee,
gibt es irgendwie eine Teilmenge in diesem S,
sodass die Summe deren Elemente gerade Tee ergibt.
Klick ein Problem,
hatten wir eben
Da gibt es auch sowas wie das Färbungsproblem,
wo man gegeben einen Grafen versucht, allen Knoten eine Farbe zu geben,
sodass zwei benachbarte Knoten immer unterschiedliche Farben haben.
Ist alles in NP, weil man das alles mit einem
schicken Zertifikat sehr schnell überprüfen kann. Also bei dem Teil
so ein Problem nimmt ja Zertifikat einfach die Menge S-Strich.
Bei dem Färbungsproblem ist das Zertifikat gerade eine Folge von Tupeln,
wo immer ein Knoten und seine Farbe drin ist. Sprich,
das Zertifikat ist gerade die Färbung der Knoten und ihr überprüft,
dann geht ihr alle Kanten durch und guckt,
ob je zwei Knoten tatsächlich unterschiedlich angemalt sind oder nicht
Dann geht das sehr, sehr schnell. Aber für all
die Probleme fällt uns kein effizienter Algorithmus im P ein.
Also sind schnell nicht deterministisch lösbar, die besten deterministischen brauchen aber
exponentielle Laufzeit und die Frage ist dann eben, geht das tatsächlich nicht schneller?
Weil es ist ja schön zu wissen,
dass man die nicht die Teamliste schnell lösen kann,
ist auch schön zu wissen,
dass man da irgendwie zwei Wochen lang gegen Bände gelaufen ist und einem ist kein effizienter Algorithmus eingefallen,
damit möchte man vielleicht auch mal wissen, gibt es das wirklich nicht?
Das Obere wollen wir zeigen, dass sich das Problem nicht im Polinealzeit lösen lässt.
Und leider können wir das nicht. Könnt ihr euch eigentlich vorstellen,
was das Problem ist, warum das hier so schwierig ist?
Warum es so schwierig ist, eine untere Schranke zu zeigen?
Also ich will ja sowas sagen können,
wie irgendwie gegebenennnatürliche Zahlen, gibt es keinen Algorithmus,
der das in, keine Ahnung, O-Log-N macht.
Warum nicht? Naja, wenn ich 100 Zahlen habe,
dann werde ich wohl mehr als zehn Schritte brauchen,
um die zu sortieren,
weil ich muss sie mir zumindest mal alle angucken,
könnte man vielleicht denken
Also wer das vielleicht in Urlaub enden nicht gehen.
Trotzdem haben wir tierische Probleme, sowas tatsächlich zu zeigen und
eben für so ein Problem wie Clique wirklich zu sagen irgendwie,
das geht wirklich nicht mit dem Polynom,
egal wie hoch man das Polynom macht.
Denn die Idee,
warum das so schwierig ist?
Sina. Ja, klar, genau. Das ist allgemein
, warum wir das nicht könnten. Ich meine jetzt,
was müsste man denn machen, um, ich gebe euch
ein Problem. Und ich sage, irgendein Problem,
das ist egal, ich gebe euch ein Problem.
Und ich sage, entwickle mal einen Polynialzeitalgorithmus, also einen schnellen.
Was müsst ihr machen? Ihr müsst einen Algorithmus angeben und
zeigen, dass er schnell ist. Also, dass er
das Problem löst und dass der wirklich schnell ist.
Argumentation über ein Algorithmusproblem, lösen einen Algorithmus. Wenn ihr zeigen wollt,
dass es keinen Algorithmus gibt, der dieses Problem schnell löst,
dann müsst ihr irgendwie diesen ziemlich schwurbeligen Suchraum aller Algorithmen betrachten und sagen,
egal welcher davon, die lösen alle das Problem nicht schnell.
Und das ist deswegen schwierig, weil man dafür irgendwie eine sinnvolle Charakterisierung aller Algorithmen bräuchte.
Und selbst so Dinge wie irgendwie ein typisches Beispiel ist,
wenn man zwei Matrizen multiplizieren will und jetzt will man vielleicht zeigen,
dass das auf bestimmte Art und Weise nicht geht.
Dann könnte man ja zuerst denken, man fängt so an,
dass man irgendwie sagt, wenn ich zwei Matrizen multiplizieren will,
dann muss ich ja auf jeden Fall irgendwie mit Additionen arbeiten.
Also kann ich vielleicht andere Sachen ausschließen oder so. Selbst das klappt meistens nicht,
weil in dem Beispiel eine der effizientesten Methoden,
die man kennt, um das zu machen,
ist tatsächlich erstmal mit Subtraktionen anzufangen und komische Dinge zu tun
Deswegen ist es halt so schwierig,
irgendwie Aussagen über Laufzeiten von Algorithmen zu machen,
weil man sich alle Algorithmen, die möglich sind,
angucken müsste, also alle Algorithmen, die das Problem lösen.
Man weiß aber nicht so genau, wie die aussehen.
Die müsste man irgendwie charakterisieren können. Das können wir nicht
oder können wir noch nicht, vielleicht können wir das irgendwann.
Aber wir haben einen anderen Ansatz. Thema NP-Vollständigkeit. Wir werden zeigen,
dass Probleme, so wie eben dieses Clique und so weiter,
dass die eine bestimmte Eigenschaft haben, sodass dann,
wenn man das Problem doch in P lösen könnte,
plötzlich ziemlich unwahrscheinliche Dinge folgern.
Und wenn das so Dinge sind,
also wenn ich dann zeigen könnte, dann ist null gleich eins,
dann hätte ich ja schon einen Widerspruch,
dann wüsste ich gleich,
okay,
die Probleme können tatsächlich nicht
in P sein
Das kann ich nicht, aber vielleicht kann ich sowas machen wie etwas,
was sehr, sehr, sehr unwahrscheinlich ist,
wo alle denken so, nee, das kann eigentlich nicht sein,
das müsste eigentlich so und so sein.
Dann weiß ich ja zumindest, wenn ich irgendwas total Revolutionäres passiert,
was wir seit 2000 Jahren alle übersehen haben, dann ist das Problem tatsächlich nicht NP.
Was wir machen, ist, wir etablieren gleich eine Methode,
um von einem Problem sagen zu können,
dass es zu den Schwierigsten in seiner Klasse gehört.
Und wenn das dann eine große Klasse von Problemen ist,
und wir nehmen uns da ein schwierigstes Problem raus,
wenn man dann nämlich plötzlich sagen könnte, oh,
ich kann das schnell lösen, dann folgt daraus,
dass sich alle Probleme in dieser Klasse schnell lösen kann,
weil das ist ja eines der schwierigsten,
jetzt kann ich
alle Probleme schnell lösen
Und dann fällt die Klasse sozusagen zusammen. Und wenn in der Klasse
ganz viele Probleme drin sind, von denen ich allgemein vermute,
dass ich die alle nicht schnell lösen kann,
dann habe ich zumindest einen sehr starken Anhaltspunkt,
um zu sagen, wahrscheinlich geht das wirklich nicht.
So, dazu brauchen wir den Begriff der Reduktion.
Jetzt wird es ein bisschen wild. Habt ihr bis dahin Fragen?
PE, Polinialzeit, NP, nicht eterministische Polininialzeit oder Verifikationsalgorithmen.
Und das Ziel ist jetzt von Algorithmen, die in NP liegen,
tatsächlich zu zeigen, dass die nicht NP sind.
Kommt jetzt
Wobei schwierig, allgemein, schwierig soll hier bedeuten,
dass es keinen effizienten Algorithmus dafür gibt oder dass das eben
nur langsame Algorithmen dafür gibt und effizienter Algorithmus würde bedeuten,
es gibt einen P.
Sowas versucht man jetzt auszuschließen. Oder anders,
das schwierigste Problem einer Klasse wird ein Problem sein,
dass wenn ich das schnell lösen kann,
kann ich alle anderen Probleme in der Klasse auch schnell lösen.
Das wird man
gleich versuchen zu erreichen
Ja, er fragte, ob es Beispiele dafür gibt,
dass man Probleme hatte, wo man früher dachte,
die gehen bestimmt nicht in P zu lösen,
also schnell zu lösen und dann ging das nachher doch.
Ganz bekanntes Beispiel aus den letzten Jahren gegeben.
Eine Zahl ist die Prim oder nicht. Also das ist
eine Primzahl oder nicht. Da dachte man lange Zeit,
dass das nicht in Polymialzeit lösbar ist. Man konnte aber auch nicht,
anders als bei Clique, dieser NP-Vorständigkeitstheorie darauf losschießen.
Das heißt, das hing irgendwo so in der Mitte.
Das war zwar in NP, aber man konnte nicht zeigen,
dass es zu den schwierigsten Problemen dieser Klasse gehörte.
Und dann in, ich glaube, 2004 war das,
haben drei Leute aus Indien mit recht direkten zahltheoretischen Ansatz gezeigt,
dass das irgendwie ein O von N hoch 12 liegt,
was ein ziemlich fieses Polynom ist.
Und dann hat man es danach aber immer weiter gedrückt.
Ich glaube, im Moment ist man irgendwie bei O von N
hoch 5 oder O von N hoch 4 oder sowas.
Noch mehr Fragen. Anderes Problem ist Grafenisumophie gegeben. Zwei
Grafen sind die eigentlich Isomorph, also sind die im Grunde
genommen die gleichen Grafen. Das ist auch so ein Problem,
wo man vermutet, dass das nicht in P liegt,
das aber nicht zeigen kann im Moment.
Da hat man aber anders als bei den Primes-Problemen es
noch nicht geschafft, das zu drücken.
Noch mehr Fragen.
P, NP
Dann Reduktion. Eine Reduktion soll jetzt formalisieren,
dass ich eine Instanz eines Problems, also beispielsweise dieses Time-Mang-Problem da eben,
also gibt es eine Menge S,
sodass irgendwie die Summe der Elemente in S und die Summe der Elemente nicht in S ist,
dass die gleich sind.
Das eine Problem im Instanz,
die möchte man jetzt transformieren in eine andere Probleminstanz, beispielsweise Clique,
sodass man dann das Problem in Clique lösen kann und dann weiß,
oh, dann ist das andere auch lösbar.
Oder wenn man eben in Clique sagen kann, oh,
das hat keine Clique, dass man dann weiß,
das andere hat auch keins
Dass eine Reduktion oder eben auch eine Problemtransformation,
dass man irgendwie versucht, das Problem, das man hat,
in ein anderes Problem umzuwandeln und das dann da zu lösen.
Was hatte ich da neulich gelesen? Genau, ihr seid in
der fremden Stadt und ihr wollt irgendwie den Weg finden.
Und dann wisst ihr irgendwie nicht, wie ihr da hinkommt.
Und dann reduziert ihr das Problem auf das Problem,
eine Karte zu finden, weil wenn ihr eine Karte hättet,
könnt ihr ganz schnell die Straße finden, die ihr sucht.
Und wenn ihr dann vielleicht wisst, das ist eine Karte,
das ist Karten an U-Bahnhöfen zu kaufen gibt,
dann reduziert ihr euer Problem,
eine Karte zu finden auf das Problem im U-Bahnhof
zu finden
Und dann könnt ihr halt euer ursprüngliches Problem lesen.
Wenn ihr dann am U-Bahnhof seid, könnt ihr euch eine Karte kaufen,
wenn ihr eine Karte habt, guckt ihr danach,
wo ihr jetzt seid und wo die andere Straße ist.
Und dann findet ihr euren Weg. So ähnlich ist das
hier jetzt auch. Reduktion. Wir haben zwei Sprachen.
1L2. Das sind üblicherweise gleich die Probleme. Also Clicke,
Timing, so ein Problem. Irgendwie sowas. Wir sagen,
dass wir L1 auf L2 in polinumieller Zeit reduzieren können,
wenn wir so eine Funktion F haben,
die von 01 Stern noch 01 Stern geht und die in
Polinialzeit berechenbar ist.
Und zwar soll die Funktion
Folgendes machen
Wir wollen ja L1 auf L2 reduzieren. Das heißt,
wir wollen in die Funktion F eine Instanz aus L1
reintun und es soll eine Instanz aus L2 rauskommen.
Und dann soll sie noch die Eigenschaft haben, wenn X
in L ist, dann ist F von X in L2.
Und wenn X nicht in L1 ist,
dann ist F von X auch nicht in L2. X
in L1 nennt man auch eine Jahrinstanz von L1,
X nicht in L1, nennt man eine 9-Instanz von L1.
Das heißt, eine Jahrinstanz wird auf eine Jahrinstanz abgebildet,
eine 9-Instanz wird auf eine 9-Instanz abgebildet.
Warum macht man das? Nehmen wir mal an,
ihr habt einen Algorithmus für
Nehmt weiterhin an, ihr habt keinen Algorithmus für L1.
Ihr könnt das Problem irgendwie nicht lösen.
Das ist komisches Problem, ihr kriegt das nicht hin.
Was ihr jetzt machen könnt, ist,
oder was ihr vielleicht machen kann, das Problem L1,
binnen das Problem L2 umzuwandeln.
Dann könnt ihr nämlich euren Algorithmus für L2 benutzen und
das Problem lösen.
Binnen wir
schon mal
Und wenn ihr dann den Algorithmus für L2 startet,
dann sagt er entweder ja oder nein.
Und genau die gleiche Antwort könnt ihr für die ursprüngliche Frage
geben, ob X in L1 drin ist oder nicht.
Das ist eine Reduktion. Notieren tun wir das hier mit L1,
kleiner gleich L2, mit dem P unten für polynuiell.
F bezeichnen wir als Reduktionsfunktion und den Algorithmus eben als Reduktionsalgorithmus.
Das ist nicht ganz so wichtig. Wichtig ist,
dass ihr wisst, irgendwie eine Reduktion inpoly soll, wenn,
wenn es eine Polynialzeitreduktion ist, soll sie eben im polymärer Zeitberechnung wahr sein.
Und eben diese Eigenschaft soll gelten,
ja, wenn X in L1 ist,
dann ist F von X in L2 und umgekehrt auch,
wenn F von X in L2 ist, dann ist X in L1.
Das sind die zwei Sachen,
die man wissen soll
Ja, drunter nochmal,
dass es auch andere Symbole gibt hier mit dem,
dass da unten direkt Poll steht für Polymiel oder auch so mit P hoch und M unten,
entsteht das M für Many One, weil man nicht,
man könnte mehrere X-1, X-2, X-3, die in L1 drin sind,
die könnte man auf das gleiche Element in L2 abbilden.
Deswegen Many One, man könnte viele auf der einen Seite,
auf eins, auf der anderen Seite abbilden, das wäre okay.
Und bei den 9 Instanzen genauso
Gleich gibt es auf der übernächsten Folie, gibt es ein Bild dazu,
auf der nächsten Folie steht ein bisschen Anmerkung,
dass man das auch allgemeiner machen kann.
Hier hatte ich jetzt ja zwei Sprachen, die beide 0-
1 Stern sind. Man kann das auch so machen,
dass man irgendwie unterschiedliche Alphabete hat,
Sigmar Stern und Gamma Stern und dazwischen eine Funktion.
Und man kann das auch so machen,
dass die Reduktion nicht in Polynymialzeit ablaufen soll.
Und damit kann man dann so okay vollständige Probleme und sowas
definieren. Das brauchen wir aber hier jetzt erstmal nicht.
Falls euch das im Masterstudium oder so mal begegnet.
Da bildlich. Links haben wir das
eine Problem
Hier jetzt mit Sigma Stern und Gamma Stern,
aber links könnte man auch sagen, okay,
0-1 Stern, rechts, auch 0-1 Stern.
Jetzt die Wolke hier, die zeigt das Problem A an.
Und die Wolke hier, das Problem B. Und die grünen Punkte hier,
das sind die Ja-Instanzen, das sind irgendwelche Dinge,
die wirklich in dem Problem A liegen.
Und die roten sind Nein-Instanzen. Also hier könnte zum Beispiel nehmen,
das ist das Klicke-Problem,
dann ist hier so eine Instanz G und irgendwie die Zahl 5 drin,
wenn der Graf G eben wirklich eine 5 Klicke hat.
Hier ist irgendwie vielleicht ein Gras G-Strich und die Zahl 8,
wenn der Graf G-Strich keine 8 Klicke hat,
solche Sachen, so Ja- und Nein-Instanzen.
Und hier werden jetzt alle die Jahrinstanzen von A,
werden auf Jahrinstanzen von B abgebildet und die 9-Instanzen von A
werden auf 9-Instanzen von B abgebildet.
Man kann hier auch sehen, dass irgendwie es möglich ist,
mehrere Nein-Instanzen oder auch mehrere Jahrinstanzen auf die gleiche Nein beziehungsweise Janstanz auf der anderen Seite abzubilden.
Und man muss auch nicht alles auf der rechten Seite erwischen.
Also es gibt auf der rechten Seite 9-Instanzen, die nicht erwischt wurden.
Und es gibt auch die Einstanzen, die nicht erwischt wurden.
Das ist nicht so wichtig. Wichtig ist,
wenn ich euch ein Problem aus A gebe,
nehmen wir mal hier den grünen Punkt hier oben und ihr
wisst jetzt ja noch nicht,
ist das eine Ja- oder Nein-Instanz und ihr wollt das ausrechnen,
dann könnt ihr jetzt halt
diese Reduktion benutzen
Ja, dann ist das plötzlich, habt ihr
das Problem hier? Und das könnt ihr dann lösen,
weil den Algorithmus für das Problem auf der rechten Seite habt.
Und dann wisst ihr, weil die Reduktion irgendwie korrekt war,
dass wenn das in den Jahren Stanz ist,
dann muss das auch nicht Anstanz gewesen sein.
Und wenn es ein Nein-Instanz ist, muss das andere auch eine Nine-Instanz gewesen sein.
Also, Ja, Anstanz, auf Jan, Stanz,
nach Bilden, nein, Instanz, auf Nein-Instanzen,
gleiche Antwort auf die Frage XNA und F und XNB.
Da noch mal zu der Many-One-Reduktion. Klar. Könnt ihr
den Begriff Reduktion auch durch Transformation irgendwie im Kopf ersetzen,
wenn euch das leichter fällt, dass ihr sagt,
okay,
ich transformiere ein Problem in ein anderes
So, und jetzt kommt das, warum wir das machen wollen.
Oder fast Probleme durch andere Probleme lösen. Wenn ich zwei
Probleme L1L2 habe und ich kann L1 in Pudding im Jahrzeit
auf L2 reduzieren. Wenn ich jetzt noch zeigen kann,
dass L2 auch in P ist, dann ist auch L1 in P.
Das werden wir gleich bei den NP-Problemen benutzen,
aber erst mal so ganz generell,
wenn ich irgendwie zwei Probleme habe,
ich reduziere das eine in Polinialzeit auf das andere,
dann kann ich das andere
eben auch in Polinialzeit lösen
Hauptidee dabei ist, das hier dauert polynumiell lange, die Reduktion auszuführen.
Und dann dauert es auch polynumiell lange nochmal L2 zu berechnen.
Naja, zwei Polynomen hintereinander wird wieder ein Polynom ergeben.
Also habe ich auch einen polynumiellen Algorithmus für L1.
Wenn man das ein bisschen genauer ausführen will,
gibt es eine Stelle, auf die man achten muss.
Aber erstmal die Vorarbeiten, es gibt so eine Reduktionsfunktion F,
die ich in Polynialzeit berechnen kann.
Dann gibt es einen Algorithmus, der L2 in Polynialzeit berechnet.
Und jetzt kann ich mir einen Algorithmus für L1 machen.
Und zwar macht er folgendes. Zuerst berechnet er F von X,
also wenn er diese Reduktionsfunktion an und dann benutzt er
A2 um F von X Element
L2 zu entscheiden
Und wenn F von X und L2 gilt,
dann weiß ich eben auch X in L1 gilt und dann kann ich ja sagen,
wenn F von X nicht in L2 drin ist,
dann weiß ich X, ist auch nicht in L1 drin,
kann ich auch nein sagen.
Problem ist, wir müssen gleich noch zeigen,
dass der auch wirklich im Polonialzeit abläuft
Nee, weil, also er meinte gerade,
er müsste das Zeichen nicht von der Intuition her andersrum sein.
Nee, weil wir zeigen nur jetzt durch diese Reduktion,
dass L1 mindestens so schwer ist wie L2. Wenn ich L2
schnell lösen kann, kann ich auch L1 schnell lösen.
Wenn ich L2 nicht schnell lösen kann,
so eine lange brauche, heißt das nicht,
dass ich L1 nicht schnell lösen kann.
Kommt nachher nochmal kurz. Es könnte ja sein,
dass ich L1 schnell lösen kann.
Nee, warte mal, einen schnell lösen kann.
Jetzt weiß ich nicht
Ja, genau. Kommt gleich nochmal. Ja, genau
. Wenn NP schwierig und NP vollständig gleich eingeführt wird,
dann siehst du das. Bis dahin klar? Wir müssen
noch zeigen, dass dieser Algorithmus A1 wirklich im Polyonialzeit abläuft.
Dass er das hier in Polynialzeit berechnen kann, ist klar.
Und das, wo man jetzt nochmal aufpassen muss,
ist, wie groß denn F von X wird.
Wenn er von X nämlich zu groß wird,
dann hilft das nicht mehr,
dass sich das hier zwar in Polyonialzeit entscheiden kann,
aber in der ursprünglichen Eingabe X ist das dann vielleicht
nicht mehr im Polynialzeit entscheidbar.
Das ist
ganz schön dunkel
Ja. So, warum arbeitet der in Polymialzeit?
Wollt ihr Licht? Ja, ne?
So. Schon
ein bisschen besser
So, warum, warum arbeitet der jetzt in Polenialzeit?
F kann man im Polemialzeit berechnen, so. Und jetzt ist der wichtige Kniff,
wenn ich F im Polemialzeit berechnen kann,
dann kann F von X auch von der Länge her nur durch ein Pulinon beschränkt sein.
Wenn F irgendwie nur Endquadrat viele Schritte machen darf auf eine Eingabe der Länge N,
dann kann ich keine Ausgabe produzieren, die länger ist als Endquadrat.
Der kann ja nur Endquadrat viele Schritte machen, um die Ausgabe zu produzieren.
Deswegen ist auch die Ausgabe in der Länge beschränkt und dann kann ich eben sagen,
dass die Laufzeit von A2 dann eben A2 hat jetzt die Laufzeit irgendwie N hoch D,
wenn ich da jetzt dieses F von X rein tue,
dann ist da so ein X-Hoch C drin,
X-Hoch C hoch D, ist X-Hoch C mal D,
ist wieder ein Poinom.
Und insgesamt habe ich dann irgendwie X-Hoch C-Schritte gebraucht,
um F von X zu berechnen und dann X-Sucht zehnmal D,
um eben auszurechnen, um F von X&L 2 drin ist.
Und dann geht der ganze Algorithmus eben in U von X
hoch zehnmal D, weil C&D-Konstanten sind,
ist das Ganze wieder eine Konstante,
ist das also putinuiell in der Laufzeit beschränkt
Jetzt weiß ich auch wieder, wo ich eben noch kurz geschwankt war.
Ich gebe die Frage einfach mal ins Plenum,
wenn hier Da war ja eben der Wunsch,
dieses Zeichen andersrum zu machen, weil L1 ist doch schwieriger als L2.
Und jetzt ist die Begründung, dass das gar nicht klar ist,
sondern durch diese Reduktion sagt man nur,
dass L2 mindestens so schwierig ist wie L1. Deswegen auch kleiner gleich.
Wenn ich L2 jetzt schnell lösen kann, kann ich auch L1
schnell lösen. Aber wenn ich L1 schnell lösen kann,
heißt das nicht zwingend, dass ich L2 schnell lösen kann.
Sprich, und deswegen macht das kleiner Gleichzeichen Sinn,
es kann sein, dass ich L1 schnell lösen kann,
aber für L2 richtig lange brauche.
Was nicht sein kann, ist, dass ich für L1
lange brauche, für L2 aber schnell lösen kann.
Weil sobald ich L2 schnell lösen kann,
kann ich auch L1 schnell lösen,
also sind sie gleich
Warum stimmt das, was ich eben gesagt habe,
dass wenn ich einen schnell lösen kann,
dass ich dann noch lange nicht L2 auch schnell lösen kann?
Warum? Ich meine, ich könnte doch sagen,
genauso wie hier, wenn ich L1 schnell lösen kann,
ist doch super, mache ich die Reduktion,
löse L1, fertig.
Dann kann ich auch L2 lösen, warum stimmt das nicht?
Warum habe ich mit dem Algorithmus für L1 noch nicht L2 gelöst?
Genau, ich erwüsste ja gar nicht alles bei L2. Oder
zumindest nicht zwingend. Wenn ich alles erwische,
dann ist es wieder gut,
aber dann habe ich auch die Reduktion sogar noch in die
andere Richtung
Also das Zeichen macht deswegen Sinn, weil man eben,
weil L2 mindestens so schwierig ist wie L1. So,
da nochmal die Anmerkung, wozu der Satz da ist,
statt ein Algorithmus für L1 zu finden und dann eben L1 zu lösen,
findet man eben einen Algorithmus für L2 und löst dann mit dem Reduktionsalgorithmus auch L1.
Und ob er Reduktion oder Transformation sagt,
ist nicht so wichtig,
aber üblicherweise nennt man das Ganze eben
eine Reduktion historisch
So, jetzt kommt der Übergang zu dieser NP-Vollständigkeit. Wenn ich das also hier machen kann,
dann weiß ich, ah, ist höchstens so schwierig wie B,
weil nochmal, wenn ich B schnell lösen kann,
schnell lösen soll bedeuten, ich kann das MP lösen,
dann kann ich auch A schnell lösen,
auch in P. Ich mache die Polinealzeitreduktion,
dann löse ich BNP, dann habe ich auch ANP gelöst.
Und jetzt ist die Idee folgende. Wenn ich jede Sprache aus NP,
also wirklich alle, auf eine,
mir vielleicht bisher unbekannte neue Sprache L reduziere,
beispielsweise das Klicken-Problem,
dann weiß ich,
L ist mindestens so schwierig
wie ganz NP
Warum? Ich habe ja gerade alle Probleme aus NP auf Clique
reduziert. Wenn ich jetzt also Clique schnell lösen kann,
kann ich alles, was in NP schnell lösen.
Ich nehme ein bliebiges Problem aus NP,
reduziere das auf Clique, löse, klicke schnell,
habe ich mein bliebiges Problem aus NP gelöst.
Wichtig ist, ich muss jede Sprache aus NP auf meine
neue Sprache L reduzieren. Und dann weiß ich eben,
wenn ich jetzt L schnell lösen kann, kann ich alle schnell lösen.
Und das macht dann aber dieses LNP sehr unwahrscheinlich,
weil daraus P gleich NP folgen würde.
Und in NP sind sehr,
sehr viele Probleme drin
Die wir zwar schnell, wo wir so ein Zertifikat schnell
verifizieren können oder die wir eben nicht deterministisch schnell lösen können,
aber für die noch niemandem irgendein schneller Algorithmus im P eingefallen ist.
Deswegen vermutet man allgemein, dass es dafür keinen gibt.
Also wenn ihr euch mal überlegt, da sind irgendwie zigtausend Probleme drin,
bei einigen davon arbeitet man auch schon seit der Antike dran
und es gibt keinen bekannten schnellen Algorithmus.
Da kann man sich vielleicht überlegen, okay,
entweder gucken wir da schon seit Jahrtausenden total falsch drauf oder es gibt wirklich keinen schnellen Algorithmus dafür.
Deswegen, wenn man dann eben nachweisen kann für ein Problem,
dass man jede Sprache aus NP darauf reduzieren kann,
ist das ein sehr deutliches Anzeichen dafür,
dass es für das Problem wahrscheinlich keinen Algorithmus in P gibt,
weil dann eben dieses sehr unwahrscheinliche Faktum folgen würde,
dass P gleich NP ist
Und wenn jetzt irgendjemand mal endlich daher käme und tatsächlich zeigen würde,
dass P-Ungleich-NP ist, dann würde tatsächlich folgen,
dass all diese Probleme nicht in P sind,
weil wenn sie in P wären,
dann würde P gleich NP gelten.
Man wüsste dann, dass das nicht so wäre.
Also hat man seinen gesuchten Widerspruch. Das Problem bei der ganzen Geschichte ist,
wir wissen nicht, ob das gilt oder nicht.
Wir wissen nicht, ob P gleich NP ist oder nicht.
Deswegen ist das nur ein sehr, sehr deutliches Zeichen dafür,
dass ein Problem nicht in P liegt. Definition,
eine Sprache ist dann NP vollständig,
wenn sie in NP liegt und ich jede Sprache aus NP,
jedes L-Strich aus,
jedes L-Strich aus NP in Polonialzeit auf L reduzieren kann
Wenn man nur die zweite Eigenschaft zeigen kann,
nennt man das Problem NP schwierig.
Ja, die Dinger nennt man NP vollständig,
weil die dann quasi diese Klasse NP bezüglich ihrer Schwierigkeit charakterisieren.
Das Problem ist dann in NP und dann, genau,
nennt man das vollständig dafür.
Alle NPV-ständigen bilden diese Klasse NPC, das C für Complete
aus dem Englischen.
NP Complete Problems.
Das ist NPV-ständig
So, jetzt gibt es zwei wichtige Theorieme. Das eine,
wenn LNP vollständig ist,
also wenn ich das hier für irgendein Problem nachweisen kann,
dass das Problem sowohl ein NP ist,
das hätten wir jetzt beispielsweise für das Clicke-Problem schon gemacht,
als auch, dass sich jede Sprache aus NP darauf reduzieren kann.
Das haben wir für das Clicke-Problem noch nicht gemacht. Geht aber,
wenn man jetzt also so ein NP-Voltsches Problem hat und dann zeigen kann,
dass das auch ein P ist,
dann ist sofort P gleich EnP. Warum?
Sei L eben irgendwie eine Sprache aus NPC geschnitten P,
also eine Sprache, die sowohl in NPC ist als
auch in
Und jetzt nehmen wir uns irgendeine Sprache in NP. Was wir zeigen wollen,
ist, dass die dann auch ein P ist,
daraus folgt die Gleichheit der beiden Mengen hier der beiden Klassen.
Weil das P eine Teilmenge von NP ist, wissen wir sowieso,
weil die NP-Maschinen ja mehr können als die P-Maschinen.
Man muss also immer nur zeigen, dass NP auch eine Timing von P ist.
Naja, und wenn jetzt L aber NP vollständig ist,
dann kann ich L-Strich in Polynialzeit auf L reduzieren,
nach der Definition eines NPV-ständigen Problems. Und dann folgt aber aus LNP,
also hatten wir ja angenommen, das LNP ist,
folgt dann mit dem eben bewiesenen Satz sofort,
dass auch L-Strich in P ist, für jedes Problem,
L-Strich aus NP gezeigt,
dass das auch ein P ist
Dann ist P gleich NP. Um gutes. Äquivalente Formulierung,
wenn es ein L in NP ohne P gibt,
dann ist der Schnitt von den beiden hier leer.
Warum? Oben wird ja gesagt, wenn das hier nicht
leer ist, dann gibt es das hier nicht.
Das ist einfach nur die Umkehrung davon. Also entweder sieht
das Ganze so aus, dass wir die Menge P haben,
drumherum die Menge NP und dann nochmal irgendwo in NP drin,
aber getrennt von NP, diese Klasse NPC.
Oder es sieht so aus, dass die alle komplett zusammenfallen,
dass P das gleiche ist wie NP,
wie NPC
So. Genau,
das einmal zum Lesen
Sprich, um unser ursprüngliches Ziel von Anfang der Vorlesung zu erreichen,
werde ich für ein Problem zeigen möchte,
dass es nicht in P liegt, zeige ich,
dass es NPV ständig ist oder NP schwierig,
dann weiß ich zumindest, dass es sehr,
sehr unwahrscheinlich ist, dass das Problem in P liegt.
Das ist die Vorgehensweise. Und dass man da nicht
so recht dran glaubt hat, neben dem hier,
dass wir keinen effizienten Algorithmus für irgendein Problem da drin kennen,
noch andere Gründe, die führen aber ein bisschen zu weit.
Das liegt daran, dass man NP noch auf sehr viele
unterschiedliche Arten und Weisen charakterisieren kann und P auch.
Und dann hat man sozusagen unterschiedliche Blickwinkel,
wie man auf das Problem draufgucken kann
Jedem Blickwinkel sieht es so aus, dass man
nicht ganz glauben kann, dass die Klassen gleich sind.
Also wenn ihr diesen Blickwinkel einnehmt mit NP-Verifikationsalgorithmus,
dann kann man sich nicht so recht vorstellen, dass ein Algorithmus,
dem ich ein Zertifikat gebe oder muss das nur überprüfen,
nicht doch irgendwie mächtiger sein kann, muss als ein Algorithmus,
der das Zertifikat berechnen muss.
Weil bei dieser Vorstellung zwischen Verifikationsalgorithmus und normaler Algorithmus in P,
da steckt ja quasi drin eine Lösung auszurechnen oder eine Lösung nur zu überprüfen.
Würde man jetzt so,
wenn man da intuitiv mal darüber nachdenkt und so,
naja, eigentlich muss es doch schon schneller gehen,
eine Lösung nur zu überprüfen,
als eine Lösung auszurechnen
Zumindest wenn die Probleme hinreichend kompliziert sind. Und gibt es
halt noch andere Blickwinkel, wie man da drauf gucken kann.
Gut, noch ein zweites und drittes noch ein Satz und
dann noch ein Theorien. Wenn ich zwei solche Reduktionen habe,
ich kann L1 auf L2 reduzieren und ich kann L2 auf L3 reduzieren,
dann kann ich auch L1 auf L3 reduziert dafür,
dass P. Dann kann ich auch L1 in Polinialzeit auf L3 reduzieren.
Das ist eine ähnliche Argumentation wie vorhin. Ich führe ja
quasi nur zwei Polynome hintereinander aus und das einzige,
worauf ich aufpassen muss, ist, dass wenn ich L1 auf L2 reduziere,
dann kommt jetzt ein neues Wort raus, was sich in diese Reduktion stecken will.
Und dieses Wort ist eben polinumiell viel länger als das ursprüngliche Wort.
Habe ich wieder die gleiche Geschichte wie eben auch. Also,
wenn ich das beides habe,
dann habe ich bei Eingabe X mit X ja die Länge N,
berechne ich zuerst dieses F von X in Blumnialzeit P von N. Und jetzt gibt es eben diesen Kniff,
dass ich dann G von F von X,
also G ist die Funktion, die diese Reduktion berechnet,
G von F von X wird dann eben in Zeit Kuh von F von X berechnet.
Das Kuh von P von N. Aber zwei
so hintereinander geschachtelte Polynom ergeben eben wieder ein Polynom.
Das heißt, ich habe wieder insgesamt diesen Aufwand P von N
plus Kuh von P von
Genau, und die Eigenschaften der Reduktion folgt direkt aus der Definition.
Also wenn hier gesagt wird, wenn X in L1 ist,
dann ist F von X in L2, dann wird hier gesagt,
wenn F von X in L2 ist,
dann ist G von F von X in L3.
Damit hat man insgesamt, wenn X in L1 ist,
ist G von F von X in L3. Passt das.
Hier ist auch falsch rum. Das muss G Kringel F
sein und hier auch G Kringel F. Korrigiere ich nachher nochmal
Das hier ist eine Rechtfertigung dafür, dass man, dass diese Reduktionsfunktion transitiv sind.
Und das hilft uns jetzt bei dieser NP-Vollständigkeit,
weil bei der Definition der NP-Vollständigkeit habe ich ja gesagt,
ich muss alle Probleme aus NP auf mein neues Problem reduzieren.
Das ist irgendwie ziemlich viele Arbeit, das möchte man im Allgemeinen nicht machen.
Wenn man aber erst mal ein NP vollständiges Problem hat,
dann genügt es, um jetzt von einem neuen Problem zu zeigen,
dass es NP-Vorständige ist,
dieses NP-Vorständige Problem auf mein neues Problem zu reduzieren,
dann kann ich nämlich alle Probleme aus NP auf mein NP-Vorständiges Problem reduzieren.
Von ihm weiß ich schon, dass NP-Vorständig ist.
Und dieses Problem auf mein neues reduzieren,
dann habe ich alle Probleme auf NP auf mein
neues Problem reduziert
Da kommt es auch noch,
wenn L eine Sprache ist und L-Strich ist endlich vollständig,
wenn ich jetzt L-Strich in Polynialzeit auf L reduzieren kann,
dann ist L eben NP schwierig und wenn L zusätzlich noch ein NP ist,
ist es NP vollständig.
Beweis. Ja, L-Stricher in NP vollständig ist,
kann ich eben jedes L-Strich aus NP im Polynialzeitauf-Strich reduzieren.
Und weil ich jetzt ja L-Strich in,
Strich in Polynialzeit auf L reduzieren kann, hier nach Annahme,
Dann folgt mit dem vorherigen Satz, ich kenne L. Strichstrich,
auf L-Strich reduzieren und dann kann ich L-Strich auf L reduzieren.
Also kann ich insgesamt L. Strichstrich auf L reduzieren.
Und da ich das für jedes Problem aus NP machen kann,
für jedes L- Strichstrich aus NP, ist L. NP schwierig.
Und wenn es dann eben zu sich in einem P ist,
ist es nach Definition NP vollständig.
Übliches Vorgehen also, wenn ihr von der Sprache beweisen wollt,
dass die NP vollständig ist.
Erstens, ihr zeigt, dass sie in NP ist.
Das gibt meistens relativ einfach. Meistens nimmt man nur das,
was gesucht wird als Zertifikat.
Man sagt ja nicht mehr, jetzt überprüfe ich,
ob das gilt
Oder man redet es eben, wenn man nicht den terministischen Algorithmus hat.
Und jetzt wählt man sich ein Problem aus,
von dem man schon weiß, dass es NP vollständig ist
und gibt eben eine Reduktion von diesem Problem auf unser neues Problem an.
Ich will die Vollständigkeit von L zeigen. Ich zeige zuerst,
dass es ein NP ist und jetzt suche ich mir
ein NPV-ständiges Problem und reduziere das auf L. Das heißt,
ich will einen Algorithmus angeben, der jede Instanz von L-Strich auf eine Instanz von L abbildet.
Mit genau dieser Eigenschaft, die für eine Reduktion gefordert ist,
wenn XNL ist, dann ist F von X,
wenn X in den Strich ist, ist F von XNL.
Und wenn X nicht in L-Strich ist,
ist F von X
nicht in
Und dann beweist man auch,
dass er für Polynialzeit berechnet werden kann und dann hat man eben gerade gezeigt,
dass ich L-Strich im Polynialzeit auf L reduzieren kann und aus
dem vorherigen Satz folgt dann,
dass dann L endlich vollständig ist.
Und unser Problem dabei ist, wir kennen noch gar kein NP-Vorständigesproblem.
Das heißt, bei dem ersten Problem,
da wird man nicht drum herum kommen,
alle Probleme aus NP
auf dieses neue Problem
zu reduzieren
Da steht es auch nochmal, um im Verfahren eben so
ein NPV-Schiedsproblem auswählen zu können, muss man erstmal welche haben.
Wenn man nachher welche hat, dann gilt, je mehr man hat, desto besser.
Weil es ist beispielsweise einfacher, wenn ich ein Grafenproblem habe,
und das will ich jetzt NPV ständig nachweisen, es ist meistens einfacher,
ein schon NPV vollständiges Grafenproblem zu nehmen und das darauf zu reduzieren.
Schwer sind immer die Brückenschläge, wenn ich irgendwie aus
der Logik komme und in die Grafentheorie reingehe.
Also ein Logikproblem auf ein Grafentheorieproblem abbilden oder ein Grafentheorieproblem auf
ein numerisches Problem oder sowas.
Deswegen je mehr Probleme man kennt, desto schneller ist das
üblicherweise später,
das Problem dann zu lösen
Ja, Zusammenfassung bisher. Also in P waren die Probleme,
die wir im Polynalzeit lösen können. Da sagen wir dann,
dass das effizient lösbar ist, in NP sind die,
die nicht die terministischen Polymnialzeit lösen können.
Die können wir bedauerlicherweise deterministisch nur in Exponentialzeit lösen.
Und dann war eben die Frage,
geht das wirklich nicht schneller oder liegt das nur daran,
dass uns irgendwie noch nicht die richtige Idee gekommen ist?
Und dann war eben die Idee, dass man,
dass wir irgendwie Probleme haben, untere Schranken für alle Algorithmen zu zeigen.
Deswegen behelfen wir uns,
mit dieser Theorie der NPV Vollständigkeit und zeigen dann eben für ein Problem,
dass es NPV ständig ist und wissen dann,
okay,
dann ist es wahrscheinlich
nicht in
Da unten stehen noch mal die fünf Begriffe,
die dafür wichtig waren. Fragen dazu. P,
NP, Reduktion, NP schwierig, NP vollständig.
Das sind so die vier Begriffe, mit denen ihr umgehen können solltet.
Also nicht jetzt sofort, aber dann so,
als wir nochmal angeguckt haben.
Habt ihr da Fragen zu
Ja. Also, das sind jetzt einfach die Vollständigen,
die er geöffnet hat. Das erste Element da rein zu packen.
Also, sekret nachweisen müssen, dass alle Probleme aus empfehlen.
Ja. Ja. Geht so. Es ist tatsächlich nur
so ein 5, 6-Seiten-Beweis. Er ist mit bekannten Symbolen
rausgekommen. Er musste nicht ins Krillische übergehen oder so.
Wie es geht. Es ist ein schöner Beweis.
Steven Cook, frühe 70er Jahre, hat auch den Thuring
Award dafür gekriegt
Und das war damals, das ist ganz lustig,
also er hat das dann gezeigt. Und damals war man
sich noch nicht so, dann dachte man so,
naja, okay, so ist ganz schick.
Und dann kam ein Jahr später noch Richard Carp und hat dann erst,
weil zu dem Zeitpunkt wusste man nur von dem Erfüllbarkeitsproblem in der Aussagenlogik,
dass das NPV ständig ist, machen wir nachher nochmal.
Und das ist so ein Problem, da bleibt man halt gedacht,
ja, okay, dann geht das halt nicht schneller.
Und dann kam Richard Carp und hat irgendwie in so einem echt kultigen Paper 21,
damals wichtige Probleme genommen und hat für alle davon gezeigt,
dass sie MPV ständig sind.
Und dann ist einem so bewusst geworden, ach du Jemine,
das geht scheinbar alles gar nicht so.
Und dann ging eben die Theorie los nachher.
Hat dafür auch ein Touring-Award gekriegt
Habt ihr noch eine Frage, die ich zum Beispiel hätte,
wäre, wenn ich für ein Problem,
jetzt haben wir so Sachen gesagt wie,
ich will für ein Problem zeigen,
dass das nicht in P ist, also zeige ich irgendwie,
dass das MPV vollständig ist oder so.
Es kann ja sein, dass es Probleme gibt, die
noch schwieriger sind. Also wo man sozusagen sagen würde,
da reicht nicht mal mehr diese klasse NP für.
Gibt es auch, dann wäre das Problem aber trotzdem,
also wenn ich dann für eine größere Klasse vollständig bin als NP,
dann bin ich aber weiterhin zumindest NP schwierig.
Also so endlich Schwierigkeitsbeweis, der klappt dann auch,
aber ich kann zum Beispiel in so Klassen reingehen wie P-Space,
NP-Space, X-Ptime, also P-Space ist pointuell viel Platz,
NP-Space ist nicht die terministisch pointmailfield Platz,
X-Ptime ist irgendwie exponentiell viel Zeit,
dafür kann ich dann auch noch vollständige Probleme angeben,
da wird es dann
noch komplizierter
Also bezüglich des Zeitaufwands komplizierter. Sonst noch Fragen.
Dann, wer von euch hat so einen Klicker?
Einmal hin, oder? Dann gucken wir mal,
wie viel ihr verstanden habt und ob ich die gleiche Vorlesung morgen nochmal halte.
Also, wenn wir annehmen, dass P ungleich NP ist,
welche dieser vier Aussagen gilt dann
Ist P eine echte Teilmenge von NP
und ist NP eine echte Teilmenge von NP vollständig.
Oder ist P eine echte Timinger von NP vollständig und NP
vollständig eine echte Timing von NP.
Oder das dritte oder das vierte. Dieses Mal stimmt auch
tatsächlich nur eins
Ja. Wer hat denn drittens nicht deswegen gewählt,
weil es am längsten ist und am kompliziertesten aussieht,
sondern weil er wirklich davon überzeugt ist,
dass das dritten stimmt?
Ja, das sieht schon gut aus. Warum denn
ganz da hinten? Allerletzte Reihe. Warum denn?
Weil du weißt... Ah ja.
Er ist gemogelt
Warum stimmt denn das dritte? Das dritte ist richtig,
die anderen sind falsch. Warum stimmt denn das dritte oder
auch anders gefragt, warum sind die anderen drei alle falsch?
Warum ist 1, 2 und 4 falsch?
Kann man mit, kann man direkt auf den Punkt bringen,
dass 1, 2 und 4 falsch sein muss?
Eben haben sich doch so viel bei so viele gemeldet bei drittens,
ihr müsstet dann doch auch alle wissen,
warum viertens die anderen falsch sind.
Ja, das klingt besser.
Ja, auch
, aber
Ja. 1, 2 und 4 kann man aber 1,
2 und 4 haben alle eine Sache gemeinsam.
Bei 1, 2 und 4 wird bei allen verlangt,
dass P eine Teilmenge von NPC ist.
Bei erstens wird das hier verlangt. P,
das ist eine Timing von NP, das ist eine Timing von NPC,
also das P auch eine Timing von NPC.
Hier wird verlangt, P ist eine Timing für den PC und hier
wird auch verlangt, P ist eine Timing von NPC.
Wenn P eine Teilmenge von NPC wäre,
dann würde das bedeuten, es gibt Probleme,
die in P sind und NP vollständig
Er hat mir gerade eben, wenn es solche Probleme gäbe,
dann wird P gleich NP.
Weil dann kann ich mir dieses Problem nehmen,
was ein P ist und NPV ständig,
jedes beliebige Problem aus NP darauf reduzieren und dann dieses Problem schnell lösen.
Dann habe ich alle Probleme aus NP schnell gelöst.
Wir laufen ja gerade unter der Annahme P-Ungleich-NP.
Also kann das nicht stimmen. Dann stimmt da auch
noch andere Sachen nicht, hast du eben richtig gesagt.
NP ist auch keine Teilmenge von NPV ständig und sowas.
Da passt alles nicht. Das hier ist richtig.
P ist eine Teilmenge von NP. Ihr habt sozusagen diesen
großen Kreis NP und da sind zwei kleine Kreise drin,
die sich nicht berühren.
Der P-Kreis und der NPC-Kreis
Und dazwischen ist vielleicht auch noch was, das wissen wir
nicht so genau. Aber die beiden sind es jugend.
Also drittens, stimmt. Wenn man mit NPH die Klasse
der NK schwierigen Probleme bezeichnet, NPC sind weiterhin die NPV-Ständigen.
Welche dieser vier Bedingungen gilt denn dann? Sind die NPHten
eine Teilmenge der NPI schwierig, sind die schwierigen Timing der NPV-Ständigen?
Sind die NPV-Vollständigen eine Teilmenge der NPI schwierigen?
Haben die nichts miteinander zu tun
Haben die zwar was miteinander zu tun, aber es gibt so Probleme,
die sind NP vollständig, aber nicht NP schwierig.
Es gibt Probleme, die sind NP schwierig, aber nicht NP vollständig.
Also dieses typische Bild mit so zwei Eiern,
die so einen Bereich zusammen haben und einen Bereich nicht
miteinander.
Was gilt
Ähm. Es ist einer von eins und zwei.
Ähm, da hat die Mehrheit schon mal recht.
Äh. Was wird denn bei, wo wird denn mehr
verlangt? Bei NP vollständig oder bei NP
Genau, aber NP Vollständig wird mehr verlangt. Ich verlange bei beiden,
dass sich alle Probleme aus NP auf mein NP Vollständiges oder
ein viel schwieriges Problem reduzieren kann von dem Jahr allzeit.
Bei NP Vollständig sage ich zusätzlich noch, es soll ein
NP sein. Das heißt, die NP schwierigen Probleme.
Moment. Achso, die NP Vollständigen haben all die Eigenschaften,
die die NP schwierigen Probleme auch haben und noch mehr.
Das heißt, jedes NP Vollständige Problem ist auch NP schwierig
. Und das bedeutet, das da muss Geld.
Jedes NP Vollständige Problem ist auch NP schwierig.
Das zweite muss gelten
Wenn ihr ein Problem habt, das NP vollständig ist,
dann ist es auf jeden Fall auch irgendwie schwierig.
Da steht dann... Das sieht dann un...
Du hast dann... Das Ganze ist NP.
Hier liegen jetzt die...
Im Polinialzeit lösbaren Probleme
Da oben sind die NPV-Ständigen, insbesondere NPV-ständig und P des Jugend.
Hier wissen wir ehrlich gesagt nicht, ob Probleme liegen,
wir vermuten das. NP Intermediate nennt man das,
also Probleme, die nicht in P sind,
aber auch nicht so schwierig, dass die NPV-ständig wären.
Und die NPHten, das wären dann quasi die,
die dieses NPV vollständig enthalten und dann aber hier irgendwie noch mehr.
Das Ganze ist dann auch irgendwie eingebettet in P-Space
Und dann auch NP-Space und sowas. Aber so,
wenn ihr P, NP, NPC und NPH wisst,
dann alles super. Ja. Was? P. NP drumherum
. NPC liegt hier oben. Und die NP-Arten beinhalten dann
die NP vollständigen und irgendwie noch mehr draußen.
Weil von so einem NP-Harten-Problem hier ja nur verlangt wird,
dass sich alle Probleme aus NP im Polinialzeit darauf reduzieren kann.
Aber ich verlange nicht mehr, dass es
auch ein NP liegen muss.
Deswegen kann es auch
außerhalb liegen
Ja. Genau, die dritte geht halt nicht,
weil so, wenn NPC eine Timing von NPH ist,
kann der Schnitt nicht leer sein und das bei viertens,
da liegt es halt daran,
dass welcher Schnitt davon muss leer sein?
Genau,
NPC ohne NPH wäre leer.
So, jetzt wird's knifflig. Wenn ich ein Problem habe,
das NP vollständig ist und ich habe ein Problem, elf Fragezeichen von mir unbekannter Komplexität.
Welche Reduktion muss ich zeigen, um... Elf Fragezeichen als NP vollständig nachzuweisen,
muss ich elf Fragezeichen auf das NP vollständige reduzieren,
muss ich das NP vollständiger auf elf Fragezeichen reduzieren,
muss ich beide Reduktionen machen oder es ist egal,
welche Richtung ich mache,
weil ja eh hier so eine genau dann Van-Beziehung gilt.
Also in beide Richtungen,
wie ich
das lesen kann
Ja, endlich die Mehrheit. Ja. Zweitens, stimmt.
Lässt sich auch nicht viel zu sagen, ist halt so definiert.
Also man muss halt das NPV-ständige Problem auf elf Fragezeichen reduzieren,
sonst klappt das auch mit dem ganzen Kram nicht.
Ich will ja so Sachen sagen können,
wie wenn ich jetzt elf Fragezeichen schnell lösen kann,
dann kann ich auch dieses LNPC schnell lösen und insbesondere auch alle anderen Probleme aus NPC.
Deswegen, ich reduziere von dem Problem,
von dem ich schon weiß, dass es NPV-ständig ist,
auf das Problem,
von dem ich das
noch nicht weiß
Und dann müsste man streng genommen für MP vollständig noch zeigen,
dass elf Fragezeichen überhaupt auch in NP ist.
Wenn man nur die Reduktion eingibt,
hat man erstmal nur gezeigt, dass es NP schwierig ist.
So, letzte Frage. Ähnliches Setting wie eben.
Wenn ich jetzt doch diese Reduktion angebe,
die zwar nichts mit der MPV-Schenker zu tun hat,
aber wenn ich die trotzdem mache, von elf Fragezeichen auf LNPC.
Was weiß ich denn dann? Oder vielleicht auch nichts,
wenn man sich das,
wenn man
die erste nimmt
Musik Ich glaube, bei C sind das
eher so 31,6 Prozent und bei A 31,4,
dann hat wieder
die Mehrheit gewonnen
Tatsächlich kann man das dritte Schluss folgern.
Das zweite hatten wir im Grunde genommen eben,
ist die falsche Richtung, also das ist dann nicht NPV-ständig.
Das vierte stimmt auch nicht wegen dem,
was wir vorhin diskutiert hatten. Es könnte durchaus sein,
dass sich das hier schnell lösen kann, das elf Fragezeichen.
Dass mir vielleicht irgendwann auffällt, oh cool, das kann ich
NP lösen. Dann kann ich aber keine Schlussfolgerung machen,
dass ich das hier plötzlich auch in P lösen kann,
weil ich eben da nicht alle Instanzen erwische oder nicht zwingend alle Instanzen erwische.
Deswegen stimmt das vierte auch nicht. Naja,
und das erste stimmt nicht, weil das dritte stimmt.
Ich kann halt, wenn ich das hier gemacht habe,
dann kann ich elf Fragezeichen in Polynialzeit auf eine Instanz von
LNPC reduzieren und da mein NP-Algorithmus anwenden
Ich erst deterministisch, was in Polymonialzeit gemacht, dann noch nicht deterministisch,
was in Polymonialzeit ist, insgesamt nicht deterministisch im Polymonialzeit.
Also wer elf Fragezeichen in den NP.
Aber üblicherweise wäre man bekloppt, das so zu machen,
weil meistens, dass ich viel schneller nachweisen lässt,
dass elf Fragezeichen in den NP ist,
als dass man jetzt so eine Reduktion angeben würde.
Also wir hatten das ja vorhin einmal kurz bei Clique oder so,
dass man dann sagt, naja, das Zertifikat ist halt
die Clique oder ich rate mir halt eine mögliche Clique und prüfe das.
Das geht viel schneller als eine Reduktion anzugeben.
Also das dritte stimmt da. Dazu Nachbereitung kurz,
was stimmt und was
nicht.
Sechs Minuten und noch 20 Folien.
Schaffe ich. Nein, wir machen gleich Schluss.
Nur noch einmal kurz, dass ihr es gesehen habt.
Dieses Problem, von dem wir gleich zahlen,
von dem wir morgen zeigen wollen, dass es tatsächlich NPV-ständig ist.
Quatsch. Das ursprüngliche Problem, das NPV-ständig ist,
ist, das Problem für eine Aussage logische Formel zu entscheiden,
ob es eine erfüllende Belegung gibt oder nicht.
Ich glaube, ihr kennt das schon so ein bisschen aus Rechnerstrukturen.
Christopher macht das dann ab nächsten Montag auch ganz ausführlich mit euch.
Wir brauchen mehr so ein intuitives Verständnis,
dass man irgendwie sagt, ich habe so bulsche Variablen,
die können den Wert null oder eins annehmen
Ja, so wie Bulsche-Variablen in der emperativen Programmiersprache.
Und dann habe ich so ein paar Verknüpfungen,
ich habe einmal die Negation,
die macht halt aus einer Null in der Eins und aus einer einzelnen Null,
also aus Fall True, aus True Falt.
Ich habe eine Dissunktion, das oder, das ist genau dann wahr,
wenn mindestens eine der beiden Variablen wahr ist.
Und ich habe die Konjunktion, das ist das und die
es war, wenn beide wahr sind.
Und gegeben eine Formel Vieh ist eben eine Belegung,
eine Funktion, die jeder Variablen in vielen Wert aus Null
oder Eins zuweist
Und dann kann man eben mit der oberigen Verknüpfung das auswerten.
Und wenn eins rauskommt, ist die Formel dafür über,
wenn null rauskommt, ist sie nicht erfüllbar.
Und das Problem, das als erstes NPV-ständiges Problem nachgewiesen wurde,
war die Frage, gegeben eine Formel mit diesen Verknüpfungen hier,
ist die erfüllbar, ja oder nein?
Auch da wieder ein Verifikationsalgorithmus ist schnell gegeben,
das Zertifikat ist dann einfach die Belegung und danach rechne ich aus,
ob da eins rauskommt oder nicht.
Oder nicht deterministisch würde man sagen, ich rate mir halt eine Belegung,
ich rate mir für jede variable 0 der Eins und gucke, ob das stimmt.
Und pulinuialzeit-Algorithmus fällt einem nicht so richtig ein.
Deswegen zeigt man für das Problem, dass es NP-vollständig ist.
Und hier nochmal, wenn man das jetzt hier als Beispiel hat,
da eine Oder-Verknüpfung dann hier Da eine Unverknüpfung,
nochmal eine Uda-Verknüpfung und ein Panikation dazwischen.
Wenn man das jetzt mit 0 und 1 belegt,
dann sieht die Formel eben irgendwie so aus.
Und jetzt kann man das Schritt für Schritt auswerten.
Jetzt macht man hier aus den Negationen, macht man erstmal,
kippt man immer die 1 und die 0. Nein,
jetzt guckt man hier 0 oder 1 ist 1 und da 0 oder 1 ist auch eins.
Das heißt, man kommt da irgendwie hin. Hier sind sie beide eins,
das meinte da und wieder eins und eins ist auch irgendwie eins.
Und da hier, weil man uns zu betonen,
ihr werdet ganz formal Sintax und Semantik einführen und das unterscheiden,
das mache ich hier jetzt dann alles nicht,
sondern uns reicht so ein intuitives Verständnis,
wie man das vielleicht auch, wie gesagt,
so in Rechnerstrukturen oder beim Programmieren oder so.
Das genügt dann erstmal. Morgen werden wir einmal nur kurz erwähnen,
was man machen müsste, um das Problem als NPV ständig nachzuweisen.
Wer mag, kann das dann in der Literatur nachlesen.
Und dann werden wir noch einmal für ein Problem,
nämlich Clique zeigen, dass das NPV vollständig ist,
indem wir eben dieses Sattproblem auf das Clique-Problem reduzieren.
Dass ja einmal so eine Reduktion gesehen habt und auf
dem Aufgabenzettel dürft ihr dann selbst mal eine machen.
Ja, dann Schluss für heute und morgen
dann noch ein letztes Mal