So. Nachdem die technischen Probleme jetzt beseitigt sind, können wir anfangen.
Wollen wir? Das letzte große Themengebiet jetzt für die letzten
zwei Wochen. Bitte? Ob das klausurrelevant ist, ja.
Ob eine Aufgabe dazu in der Klausur drankommt, ja.
Auch das, ob die Aufgabe besonders viele Punkte bringt
Ja. Ob man die Klausuren nicht bestehen kann,
wenn man die letzten zwei Wochen nicht mitmacht, möglich?
Alle Fragen in Reichen beantwortet. Also, ja, es ist noch Klausur relevant.
Ja, es sind so grob, keine Ahnung,
fünf bis zehn Punkte, damit meinst du noch zu machen.
Es ist aber einfach aus informatischer Sicht eins der ganz wichtigen Gebiete.
Zeit- und Platzkomplexität. Und wir kommen quasi von der Logik jetzt nochmal,
also wir haben jetzt vier, fünf Wochen Logik gemacht.
Und von der kommen wir jetzt nochmal zurück zu den Turing-Maschinen
und vor allem zu den Algorithmen
Und wir hatten ja,
so Turing-Maschinen eingeführt und dann haben wir gesagt, naja gut,
eine Touring-Maschine, so ähnlich wie so ein DFA,
hat die irgendwie ein Band,
auf dem sie lesen kann und dann kann sie eben zusätzlich jetzt auch noch schreiben,
liest irgendwie ein Symbol,
ist in einem Zustand und dann kann sie eben was anderes hinschreiben,
den Leseschreibkopf nach links oder rechts bewegen und den anderen Zustand wechseln.
Und dann war das erstmal so ein Automatenmodell und den konnte man aber sehen oder begründen,
dass man damit auch einen normalen Computer simulieren kann und andersrum und dann kann man dem argumentieren,
naja gut, alles, was ich jetzt mit einer Touring-Maschine machen kann,
kann ich auch mit dem Computer machen und andersrum.
Sprich, wenn ich irgendwie mit diesem formalen Modell,
mit dem es sich eben einfacher argumentieren lässt als mit einem normalen Computer,
wenn ich da irgendwie zeigen kann, damit geht etwas nicht.
Dann weiß ich auch, das geht mit richtigen Computern nicht.
Und das war so diese Unterscheidung, dass wir gesagt haben,
wir betrachten ein Problem und das wollen wir irgendwie lösen oder eben, der Fachbegriff.
Entscheidend, entschieden, Probleme entschieden, ja.
Hatten wir dann auch nochmal darüber diskutiert,
dass eben es bei Touring-Maschinen allgemein bei diesen Automatenmodellen ja einfacher ist,
sich über Sprachengedanken zu machen.
Und dass das aber das Gleiche ist wie ein Problem zu lösen.
Dieses Beispiel gehabt irgendwie zwei und drei als Eingabe zu haben und die Summe auszurechnen,
ist eben das Gleiche wie irgendwie gleich ein Dreier-Tupel zu kriegen
und das nur zu akzeptieren,
wenn das dritte Element im Tupel
tatsächlich die Summe ist
Da läuft das Gleiche hinaus, ist dann aber eine Sprache,
die man akzeptieren will. Und das ist eben einfacher formal zu behandeln.
Also hatten wir dieses Themengebiet hier, wo wir gesagt haben,
bestimmte Probleme können wir lösen, andere können wir nicht lösen.
Und dann war irgendwie, klar, entscheidbar ist gut,
nicht entscheidbar schlecht, wenn ich irgendwie ein Problem habe,
von dem ich weiß, ich kann das nicht entscheiden,
heißt es, ich kann keinen Algorithmus dafür machen und das Problem also nicht lösen,
das ist irgendwie schlecht.
Und entscheidbar sein war gut, aber,
und jetzt kann man einschränken, wenn ich weiß,
dass ein Problem entscheidbar ist, Das allein reicht im Allgemeinen nicht.
Wenn ich irgendwie, um die Extrembeispiele zu bemühen,
wenn ich so viel Platz brauche,
dass ich irgendwie auf jedes Atom im Universum,
wenn das als Datenspeicher benutzen muss, dann ist das vielleicht nicht mehr praktikabel.
Oder wenn ich länger brauche, als man annimmt,
dass das Universum existiert, auch nicht mehr praktikabel.
Und ein bisschen relevantere Beispiele zu nehmen,
wenn ich für eine Suchanfrage länger als eine Sekunde brauche,
ist das vielleicht auch schon nicht mehr okay.
Also dieses entscheidbar Gut ist zwar in Ordnung erstmal so als erster Indize,
aber danach muss man sich fragen, ist das auch effektiv lösbar,
effizient lösbar?
Hier geht es ja um Effektivität, geht das überhaupt?
Und dann eben die Frage, kann ich
es auch effizient machen
Genau, nur zu wissen, dass das geht.
Reicht im Allgemeinen nicht. Die Frage,
die wir uns jetzt noch stellen, Zeit und Platz.
Insbesondere Zeit. Also im Platz kann man sich auch Gedanken
machen, machen wir in der Veranstaltung hier nicht mehr.
Wir konzentrieren nichts auf Zeit. Aber die Frage stellen wir uns halt,
wie viel Zeit braucht man zur Lösung eines Problems?
Und fragen die dann später oder auch aktuell relevant sind,
sind noch so Fragen irgendwie, wie skaliert das mit der Prozessoranzahl und so weiter.
Das ist dann auch noch relevant. Aber jetzt erstmal fragen wir uns,
wenn ich ein Problem habe, wie lange brauche ich denn,
um das zu lösen?
Und kann ich da eine Grenze finden,
sodass ich sagen kann, das ist noch praktikabel,
das ist okay und das ist irgendwie ineffizient
Also so ähnlich, wie man sagen kann,
es gibt so eine Grenze von, eine Sprache ist regulär,
dann ist sie irgendwann nicht mehr regulär,
aber vielleicht kontextfrei, kann man jetzt halt versuchen,
so eine Grenze sich zu etablieren, wo man sagt,
bis dahin ist es gut und ab da nicht mehr.
Und dann möchte man natürlich gerne Techniken haben,
um für Probleme nachzuweisen, die kann ich nicht schnell lösen.
Da kann man aufhören, einen effizienten Algorithmus zu suchen.
So, wofür wird das abhängen? Wenn ich mir jetzt um Zeitgedanken mache,
von Problemen, selbstverständlich, irgendwie unterschiedliche Probleme dürfen unterschiedlich lange dauern,
sie zu lösen und auch Größe der Probleminstanz,
wenn ich irgendwie Zwei kurze Zahlen addieren will,
dann darf das im Allgemeinen irgendwie schneller gehen,
als wenn ich zwei lange Zahlen addieren will.
Und trotzdem will ich dann vielleicht sagen, dass der Algorithmus effizient ist oder nicht.
Also wird irgendwie die Laufzeit eines Algorithmuses abhängen von der Größe der jeweiligen Probleminstanz.
Da unten ist nochmal dieses Beispiel mit diesen Triebeln von Zahlen.
Die Probleminstanz ist dann eben irgendwie so ein Triebel in dem Fall,
also so syntaktischen Mist, den ignoriert man meistens,
weil man einmal sagt, naja,
ich lese einmal drüber, dann weiß ich,
ob das in taktisch in Ordnung ist oder nicht.
Wenn nicht, dann ist das gleich eine Line-Instanz und wenn ja
, das sind dann die spannenden Sachen.
Dann kann ich irgendwie loslegen und gucken
Ob ich das ausrechnen kann oder nicht. Aber wenn eben die Zahlen hier kurz sind,
so wie hier so zwei, drei, fünf,
dann ist es im Allgemeinen einfacher oder geht schneller, das auszurechnen.
Gut, das wollen wir machen. Und jetzt kann man sich halt Gedanken machen,
wie definiere ich das bei einer deterministischen Touring-Maschine, wie definiere ich das bei einer nicht deterministischen Touring-Maschine.
Und dann gibt es da wieder so eine Verbindung,
so wie bei den Entscheidbaren, dass ich sagen kann,
wenn ich, keine Ahnung,
eine Sprache in der und der Zeit auf einer Touring-Maschine lösen kann,
dann kann ich es auch in der und der Zeit auf dem richtigen Rechner machen.
Und da werden wir sehen, da gibt es einen ganz interessanten Zusammenhang,
der dahin führt, dass man nachher sagt,
wenn ich ein Problem im Polynunialzeit lösen kann,
also wenn es eher so ein Polynom gibt, Endquadrat oder so,
sodass ich bei einer Eingabe der Länge N maximal Endquadrat viele Schritte brauche,
Eingabe der Länge, 10, 100 Schritte,
Eingabe der Länge, 20,
400 Schritte.
Dann wird man sagen, das Problem ist effizient lösbar.
Polynome, gut. Und bei anderen Problemen,
wo man irgendwie exponentiell wird, da wird man sagen,
das ist schlecht. Und da werden wir sehen,
dass diese klasse P und NP, dass die ganz bedeutende Rollen spielen.
Also definieren wir das mal. Zeit- und Plastkomplexität für eine Touring-Maschine.
Erstmal so eine deterministische, da ist das ganz einfach.
Wenn ich ein Eingabewort habe, da gibt es auf diesem Eingabewort
eine Rechnung. Und die Touring-Maschine braucht dann genau so viel
Zeit auf dieser Rechnung,
wie sie eben
einzelne Konfigurationen durchläuft
Platz braucht sie so viel, wie sie verschiedene Felder auf dem Band benutzt.
Oder besucht. Wenn sie ein Feld besucht, aber vielleicht
gar nichts hinschreibt, ist das trotzdem eine benutzte Zelle.
Also zählt das trotzdem zum Platz dazu. Ein Beispiel da unten,
fünf Zeiteinheiten, weil ich fünf unterschiedliche Konfigurationen habe.
Und vier Felder, weil ich irgendwie in dem Fall hier,
da habe ich das A, B und X,
also die drei Zellen habe ich benutzt.
Und diese Zelle hier mit dem leeren Feld,
die benutze ich zwar nicht,
aber ich habe sie besucht,
deswegen zählt man die auch dazu
Das macht man deswegen,
weil wenn man nur Zellen zum Platzbedarf hinzuzählen würde,
in die man tatsächlich was schreibt,
dann kann man so mit Tricks anfangen,
dass man irgendwie eine Null nimmt,
so als Marker und dann zwischen den Nullen steht immer eine
gewisse Anzahl von Lean Zellen und damit hat man dann plötzlich einen Zähler.
Dann brauche ich nur so und so viele Nullen,
um aber beliebig viele große Zahlen auszudrücken und das ist irgendwie dann hässlich.
Deswegen zählt jede Zelle, auch wenn ich sie nicht beschreibe,
mit zum Platz bedarf. Also wie gesagt,
Platzbedarf werden wir gar nicht so viel machen,
nur so zwischendurch mal Exkursartig, was für uns wichtig ist,
ist dieses mit den Rechnungen, zu sagen, okay,
wortgegeben und dann gucken wir, wie lange die Touring-Maschine darauf braucht.
Und was man jetzt aber haben möchte,
ist nicht den Zeitbedarf für eine Rechnung,
sondern dass man Abschätzungen machen kann derart,
wenn ich ein Wort einer bestimmten Länge habe.
Also wenn ich jetzt eingabe Worte Länge 10 habe,
dann brauche ich maximal so und so lange solche Worst-Case-Abschätzungen möchte man haben.
Das definiert man wie folgt, dass man sagt,
wenn ich eine detimistische Touring-Maschine M habe,
dann nenne ich sie TN zeitbeschränkt, genau dann, wenn.
Und jetzt kommt der Brocken da unten. Und das,
was hier passiert ist,
es werden sich hier alle Wörter der Länge N angeguckt,
also das N halten wir jetzt mal fest,
TVN soll größer gleich irgendwas sein.
Und jetzt werden sich hier
alle Wörter der Länge N angeguckt
Die M akzeptiert und es wird geguckt,
wie lange die Touring-Maschine braucht, um das Wort zu akzeptieren.
Also ich nehme beispielsweise alle Wörter der Länge 10,
die von der Touring-Maschine akzeptiert werden und ich gucke immer,
wie lange braucht die Touring-Maschine bei den einzelnen Wörtern.
Und von denen ganzen Schrittanzahlen, also über diese Anzahl der Schritte,
bilde ich jetzt das Maximum und das TVN muss eben größer gleich sein.
Wenn ich beispielsweise, nehmen wir an die Touring-Maschine akzeptiert,
fünf verschiedene Wörter der Länge 10, eins nach einem Schritt,
eins nach zehn Schritten,
eins nach fünf Schritten,
eins nach 100 Schritten oder so,
dann muss eben dieses T von N
größer sein als die größer oder größer gleich die größte
Anzahl Schritte
Das führt dazu, dass wenn man sagt,
die terministische Touring-Maschine ist TN-Zeit beschränkt und es eine hat,
von der man sagt, die ist Endquadrat-Zeit beschränkt, dann weiß ich,
bei einer Eingabe der Länge N macht sie maximal Endquadrat viele Schritte.
Vielleicht macht sie auch weniger, aber sie macht maximal Endquadrat viele Schritte.
Und ist dann eine Worst-Case-Abschätzung in dem Sinne,
man versucht das T von Ende natürlich möglichst dicht dran zu wählen, also möglichst klein.
Und das ist eine Worst-Case-Abschätzung, weil es natürlich ganz,
ganz viele Eingaben der Länge N geben kann,
bei denen sie schneller ist, aber bei einigen Worst-Case-Instanzen,
also bei einigen schlimmen Instanzen,
brauchst du vielleicht dieses Maximum,
was dann gerade durch T von N angegeben wird
Deswegen eine Worst-Case-Abschätzung. Und nochmal,
man guckt sich alle Wörter an, der Länge N,
die akzeptiert werden, zählt, wie viele Schritte die brauchen.
Und die größte Anzahl davon, die muss durch TVN nach oben beschränkt sein.
Dann sagt man, die Turing-Maschine ist TVN zeitbeschränkt.
Wenn ihr zum Beispiel einen Sortier-Algorithmus habt,
also wenn man einmal kurz weggehen von den Turing-Maschinen und so einen ganz normalen,
eine ganz normale emperative Programmiersprache uns vorstellen und nehmen wir
mal an,
ihr wollt irgendwie
die Zahlen sortieren
Wenn ihr jetzt unser Tieralgorithmus habt,
sowas wie Insearch and Sword oder Bubble Sword oder irgendwie sowas,
habt ihr bestimmt schon mal alle gehört,
die nicht so guten laufen dann ja irgendwie ein Endquadrat,
weil sie irgendwie, keine Ahnung, wenn wir,
nehmen wir mal in Dussel legen,
ich gehe einmal über das ganze Arry von Zahlen rüber,
such das Maximum, das nehme ich,
schreibst du dir das in mein Ergebnis Arryguns nach rechts,
dann gehe ich über den Rest nochmal rüber,
suche das verbleibende Maximum,
schreib mir das in mein Ergebnis Area in die vorletzte Stelle und so weiter.
Wenn ich das mache, dann bin ich so grob bei Endquadrat
vielen Schritten, ein bisschen besser, aber so grob.
Wenn das Arry aber schon komplett sortiert ist, wenn ich Endzahlen,
ob die schon konsortiert sind, dann könnte man sich vorstellen,
dass man da nur einmal rübergeht und sagt,
alles klar,
ist sortiert
Habe ich so eine Instanz, die ich in Endschritten
sofort sortiert habe, weil ich gar nichts tun muss.
Im Worst Case aber bin ich irgendwie dicht an diesen Endquadrat
vielen Schritten dran. Deswegen gibt es Instanzen, die gut
sind und es gibt Instanzen, die nicht so gut sind.
Und die Zeitschranken hier sind eben Worst Case Abschätzung. Okay,
so macht man dann bei Platzbeschränkungen nochmal,
ist im Grunde genommen genau die gleiche Ideen und dass man jetzt nicht die Schritte zählt,
sondern dass man sich anguckt auf den akzeptierenden Rechnungen,
wie viel Platz bedarf die Touring-Maschine da hat.
Da nimmt man dann wieder das Maximum und SN muss eine obere Schranke sein.
Das heißt im Grunde genommen genau das Gleiche.
Anmerkungen dazu da nochmal das zu Worst-Case-Komplexität,
was wir eben schon hatten, dann steht auf der vorherigen Folie,
dass T- und S-Abbildung von den natürlichen Zahlen auf die reellen Zahlen sind,
also eine Eingabelänge wird genommen und auf eine reelle Zahl abgebildet.
Jetzt ist es natürlich so,
dass ich bei einer Eingabe der Länge 5 niemals 3,5 Schritte brauche,
sondern entweder brauche ich 3 oder ich brauche 4,
aber nicht 3,5. Trotzdem erlaubt man da reelle Zahlen,
damit man eben als Funktion auch sowas hier haben kann,
so Endquadrat plus N halbe.
Und was man dann aber üblicherweise macht und dann erstmal wieder
von den realen Zahlen weg, ist,
dass man das aufrundet oder abrundet,
glücklicherweise ab
Ja. Genau, und hier, Anfangswert ignoriert man auch meist,
damit man irgendwie für die Zeitschranken auch sowas ja erlauben kann,
was dann vielleicht erst ab einem bestimmten N einen Sinn macht.
Kommen wir gleich nochmal dazu, wie man das dann ausdrückt,
aber man kann dann eben als Zeitschrank noch sowas sagen,
wie die Zeitschranke der Touring-Maschine ist sowas hier,
abgesehen für die Werte 1, 2, 3,
4, da gibt es dann irgendwelche speziellen Werte,
aber das ist halt nicht so wichtig.
Hängt damit zusammen,
dass wenn ich hier konstant viele Anfangswerte habe,
dann für konstant viele Anfangswerte,
da habe ich auch nur konstant viele Eingabeworte und für die
kann ich mir im Grunde genommen die Antwort hart reinkulieren,
also einfach direkt
die Ausgabe produzieren
Und dann ist das okay. Gut, das nur,
wir werden auch irgendwie solche und solche Zeitschranken hier sehen.
Beispiel, wenn ich so eine Tooling-Maschine habe, hängt eine,
und ich sage, die ist so zeitbeschränkt.
Dann darf ich eben auf einer Rechnung der Länge zehn,
setzt überall zehn ein, maximal diese 95 Schritte machen.
Es darf Wörter geben, der Länge zehn,
bei denen ich viel schneller bin,
aber es gibt eben diesen Worst Case,
wo ich vielleicht genau die 95 Schritte brauche oder nur knapp drunter bin.
Und auf dem Wort der Länge drei eine ähnliche Rechnung,
nur irgendwie ist das dann eine Kommazahl,
7,5 Schritte werde ich wohl nie brauchen.
Also entweder sieben oder acht und dann wird eben abgerundet
Genau. Und was man dann immer sucht, ist,
dass man natürlich versucht, für die Touring-Maschinen oder auch für
die Algorithmen hier eine möglichst genaue Schranke anzugeben.
Also, dass die nicht einfach behaupten,
die Touring-Maschine ist O von Nhoch 3 Zeit beschränkt,
wenn ich eigentlich auch weiß, die Nhoch 3 Zeit beschränkt,
wenn ich eigentlich auch weiß, diese Endquadratzeit beschränkt oder so.
Gut, das zur Deterministratur immer steht. Fragen bis dahin?
Okay. Also Schritte oder Zellen zielen, lernt man das?
Bei der NTM ist das ein bisschen schwieriger, weil die ja aufsplitten kann.
Die kann ja nicht deterministisch raten und dann kann sie in
unterschiedlichen Rechnungen sein. Was man dann macht, ist,
Man hält erst mal so eine fest vorgegebene Erfolgsrechnung fest und
dann zählt man das genauso wie bei der DTM auch.
Klar, weil wenn ich eine Erfolgsrechnung festhalte, dann habe ich eine Rechnung,
so wie bei der DTM auch und kann das genauso definieren.
Also so viel Zeit, wie sie Einzelkonfigurationen hat,
so viel Platz, wie sie verschiedene Felder benutzt.
Also genauso wie bei der DTM, aber ich halte eine Erfolgsrechnung fest.
Ja. Nee, ich halte jetzt mal eine fest.
Also ich habe ein Wort und da habe ich jetzt
unterschiedliche Erfolgsrechnungen drauf. Möglicherweise, also nebenbei,
ich habe eine mit einem unterschiedlichen Erfolgsrechnung und bei der einen kann ich jetzt sagen,
oh, da brauche ich fünf Schritte,
bei der anderen sage ich vielleicht,
da brauche ich
zehn Schritte
Definition sagt nur, wenn du dir jetzt eine raussuchst,
kannst du erzählen, wie lange die nicht die Temission Studium erschienen,
auf diese Erfolgsrechnung braucht.
So, und dann sagt man,
jetzt guckt man sich nämlich alle Erfolgsrechnungen an und sagt,
sie akzeptiert so ein einzelnes Wort mit der Zeitbeschränkung Tee,
genau dann, wenn die kürzeste Erfolgsrechnung eben diese Teeschritte braucht.
Also von den Erfolgsrechnungen nehme ich mir jetzt quasi die beste.
Und bei der Platzschranke mache ich das genauso
Und dann kann ich mir wieder genauso,
wie wir das eben auch bei der deterministischen Touring-Maschine gemacht haben,
die TN-Zeitbeschränkten und SN-Platzbeschränken, nicht die terministischen Touring-Maschinen einführen.
Geht im Grunde genommen genauso. Also auch hier über alle Worte der Länge N,
gucken, was ist die größte Zeitbeschränkung und davon nehmen wir dann
das Maximum und T von N, soll so groß sein.
Und für die Platzschranke genauso. Der Unterschied ist eben,
dass man bei der Deterministentour, man stehen ja nur eine Rechnung hat,
über die man sich Gedanken machen muss,
bei der nicht-deterministischen gibt es ja mehrere Rechnungen und da muss man sich einmal überlegen,
wie genau will ich das definieren.
Wir kommen aber nachher noch mal dahin, dass das im Grunde
genommen keinen großen Unterschied macht und das hier haben wir ja jetzt uns auf Erfolgsrechnung konzentriert.
Es macht auch keinen Unterschied,
dass nachher für unsere Zwecke auf alle Rechnungen auszuweiten,
sodass man einfach sagt, bei der nicht-diterministischen Touring-Maschine,
die ist dann TN zeitbeschränkt, wenn keine Rechnung länger als TN braucht auf einem Wort.
Dann gibt es noch einmal kurz Exkurs, Bannkompression und lineare Speed-up,
Bannkompression, wenn ich so eine SN-Platzbeschränkte Touring-Maschine habe,
egal ob DTM oder NTM, dann gibt es eine Äquivalente,
zehnmal SN-Platzbeschränkte für jede reelle Zahl C, größer als Null.
Sprich, wenn ich eine, also für Cs,
die größer sind als eins, ist das jetzt nicht so überraschend,
dass ich mehr Platz brauche, aber wenn ich halt einen SN-Platz beschränkte Touring-Maschine habe,
dann kann ich auch eine bauen, die nur halb so viel Platz braucht oder ein Drittel oder ein Viertel oder irgendwas.
Wichtig hier ist,
hier steht ja auch schon lineare Speed-Up hier bei der Bankkompression,
ist das genauso,
dass es nur eine lineare Kompression und das kriegt man hin,
so ähnlich wie wir das mal bei Spuren gemacht haben,
indem man eine Bank oder mehrere Banzellen zu einer Banzelle zusammenfasst,
wenn ich hier bei einer SN-Platz beschränkten Touring-Maschine,
wenn ich die habe und ich nehme jetzt immer vier Bandzellen
und fasse die auf meiner neuen Touring-Maschine zu einer zusammen,
dann kann ich mir da quasi in einem Schritt
vier Symbole auf einmal angucken und die manipulieren
Dann werde ich irgendwie so grob so ein Viertel so schnell
oder so ein Viertel wie in der Band benutzen.
Ah, das kann man dann machen. Wenn dich das interessiert,
könnt ihr das nochmal, steht da gar nicht,
wenn das interessiert, könnt ihr das nochmal in der Literatur nachlesen.
Im Hauptcrit Ulmen steht das aber gar nicht drin. Da muss man,
da gibt es so ein schönes Buch von Papa Dimitrio,
Computational Complexity, da wird das gemacht. Aber das ist für das,
was wir hier zuvor haben, nicht mehr so relevant,
aber dass man das einmal so einmal gesehen hat da.
Zusammenfassung bisher. Ziel war Zeit- und Platzkomplexität
irgendwie messen wollen
Und dann gibt diese Funktion T von N an,
wie lange so eine Touring-Maschine oder eben auch ein Algorithmus.
Da werden wir auch noch gesehen,
dass das im Grunde genommen ja wieder das Gleiche ist.
Bei einer Eingabe der Länge N im schlimmsten Fall braucht SN
entsprechend für Platzbedarf und DTM die eine Rechnung angucken, NTM die beste.
Da nochmal die Anmerkung, es ist nicht weiter tragisch,
sich auf Erfolgsrechnungen anzuschauen, einzuschränken. Man kann das später
auf diese Nicht-Erfolgsrechnung ausweiten und dann gelten eben diese zwei Sachen,
dass ich sage, wenn ich eine Touring-Maschine habe,
die TN zeitbeschränkt ist,
dann heißt das,
ein Wort der Länge N wird nach Endschritten
entweder akzeptiert oder abgelehnt
Und wenn sie SN-Platz beschränkt ist, dann heißt das,
eine Rechnung auf einem Worteling, N benutzt maximal N-Bandzellen.
Also hier schon so die Vorausschau, dass man sagt,
mit Akzeptanz alleine braucht man sich gar nicht einschränken.
Man kann gleich zu entscheidbaren Sachen gehen.
Hier steht ja explizit akzeptieren oder abgelehnt. Das heißt,
ich akzeptiere die jetzt nicht nur mit TN-Zeitschranke,
sondern ich entscheide die Sprache mit dir in Zeitschranke.
Und die Idee ist im Kern einfach zu sagen,
naja, wenn die TN-Zeit beschränkt ist,
dann nehme ich mir einfach so einen Zähler mit und nach TN-Schritten
muss sie akzeptiert worden sein und sonst kann ich ablehnen.
Dann ist man schon fertig.
Oh ja, genau, hier, super.
Da wird nach TN-Schritten akzeptiert und danach S maximal SN-Bandzellen.
Also da TN-Schritte SN-Bandzellen. Sonst wird das auch irgendwie
keinen Sinn machen mit dem Tee von Enzo.
Genau, sehr gut. Okay, gut bis dahin.
Ich kann also das jetzt schon mit dem Tee machen,
das ist Papit, sponserverbreitet, Ja,
weil du damit, wie gesagt, mit diesen,
du gehst jetzt hier auf die Folie ab, davor,
wo das alles so schön blau war,
weil du mit diesen linearen Geschichten, du kriegst da halt nur lineare Faktoren rein.
Das bringt halt nicht so viel. Das ist ja eh
so ein bisschen, das ist so ein bisschen rumgemauschelt,
so, aber das macht dann halt im Unterschied von End-zu-End-Quadrat
den Unterschied kriegst du halt nicht weg, deswegen.
Und da werden die Unterschiede relevant. Hat es noch Fragen?
Die letzten Jahre hat das immer ziemlich viele Probleme gemacht,
das Thema, deswegen versuche ich das gerade irgendwie so
mit Zwischenzusammenfassungen und so,
so ein bisschen klarer
zu machen
Gucken. Und mehr Beispielen nachher, mal gucken, ob das hilft.
Aber der Anfang jetzt hier ist halt im Grunde genommen, ich will die Schritte zählen und ich will die Zellen zählen. Und wo wir gleich hinwollen,
ist, dass wir das für ganz normale Algorithmen auch machen wollen und dass wir uns dann Komplexitätsklassen einführen,
wo wir nicht so wie vorher,
wo wir gesagt haben, eine Sprache ist regulär,
wenn sie vom bestimmten Automatenmodell akzeptiert werden kann oder sie ist kontextfrei,
wenn sie von diesem anderen Automatenmodell akzeptiert werden kann und so weiter,
sondern dass man jetzt sagt,
ich habe eine Klasse von Problemen,
die zeichnet sich dadurch aus,
dass sie in einer bestimmten Zeitschranke akzeptiert werden können
Da wollen wir jetzt hin. Netztilsklasse. Dass man dann sagt,
ich tue jetzt alle Probleme in eine Klasse,
die beispielsweise in Endquadrat vielen Schritten immer akzeptiert werden können.
Und dann werden wir feststellen,
dass wenn man dann noch so eine Komplizitätsklasse einführt,
wo man sagt, irgendwie durch einen Polynom beschränkt,
also egal, ob es Endquadrat ist, End- hoch 3,
End hoch 4, irgendein Polynom, das wird dann eine ganz bedeutende Klasse sein.
Die sehen wir auch gleich. Also unsere ersten Komplexitätsklassen,
TN ist irgendwie eine Funktion,
die nicht gleich linear ist, sondern irgendwie ein bisschen,
also mindestens linear,
irgendwie was Spannendes und esse von N hier
mindestens was Konstantes
Und dann führen wir uns die Klassen hier ein, deterministische Zeit.
Da sind jetzt all die Probleme drin. Also alle sprachen L,
die von einer TN-Zeit beschränkten deterministischen Touring-Maschine A akzeptiert werden können.
Oder eben, werden wir später sehen, entschieden werden können.
Für unseren Fall zumindest. Und bei Endtime tun wir alle die Reihen,
die von einer nicht-deterministischen Touring-Maschine in der TN-Zeitschranke akzeptiert werden können.
Das Ganze nochmal für den terministischen Platz und nicht-deterministischen Platz.
Und jetzt kann man an der Stelle hier bei dem D-Time-TN und hier TN-Zeit beschränkt,
da kann man jetzt nochmal spielen und kann sagen,
ich kann da ja mal alle Komplexitätsklassen nehmen,
wo dieses TVN ein Polynom ist und die vereinige ich
nochmal miteinander
Dann lande ich hier. In P sind all die Probleme,
für die es ein Polynom gibt,
sodass so eine PN-Zeitbeschränkte deterministische Touring-Maschine die Sprache akzeptieren kann.
Die packe ich alle in eine Menge. Und wichtig ist,
ihr könnt jetzt nicht irgendwie für jedes Wort ein anderes Polynom nehmen,
sondern ihr habt ein Problem, L,
und für das gibt es eine deterministische Touring-Maschine A,
die dieses Problem entscheidet, oder akzeptiert.
Und diese Deterministraturen-Maschine A, DSP von Endzeit beschränkt.
Das heißt, bei der Eingabe der Länge N
darf sie maximal P von N
viele Schritte machen
Jetzt macht ihr nicht irgendwie bei einer Eingabe der Länge 10,
dass das Polynom Endquadrat ist und bei der Eingabe der Länge 20,
dass das Polynom Endhoch 3 ist oder so,
dann kriegt man alles hin, sondern das Polynom haltet ihr fest.
Und hier wird dann eben gesagt, für alle,
alle Sprachen, für die es irgendein Polynom gibt,
so, das ist dann irgendeine Touring-Maschine gibt,
die von diesem Polynom Zeit beschränkt ist und die Sprache akzeptiert,
die packe ich alle zusammen.
Und da in der Klasse, deswegen ist sie so relevant,
da werden wir sehen, dass ein Problem,
das von der Touring-Maschine akzeptiert werden kann und ein Problem,
das vom Computer akzeptiert werden kann oder gelöst werden kann,
dass das immer einfach mit polynomiellem Mehraufwand geht.
Das heißt, wenn ich ein Problem vom regulären Computer lösen kann,
dann kann ich das auch mit einer Touring-Maschine machen
Mit pulinumieren Mehraufwand. Also es ist das Problem,
egal ob ich da jetzt mit dem Computer drauf gucke oder mit Naturingmaschine,
in dieser Klasse P. Kann ich mir also auch statt die ganze Zeit mit Touring-Maschinen zu arbeiten,
kann ich auch mit normalen Algorithmen arbeiten und sagen,
jetzt habe ich einen Algorithmus, der läuft im Polymialzeit,
dann ist das Problem in P.
Und die ganzen überwiegend die ganzen Probleme, die ja nachher so
einen Algorithmenvorlesungen kennenlernt, die werden alle hier in P liegen.
Weil P, die Klasse von Problemen, Bei P,
die Klasse von Problemen ist, die effizient lösbar sind.
Deswegen behandelt man sowas überwiegend in Algorithmenvorlesungen. Das hängt damit zusammen,
dass Polynome recht langsam mit ihrer Eingabe wachsen, also mit der Eingabelänge.
Wenn ihr eine Eingabelänge 10 habt und ihr habt als Polynom Endquadrat
, dann ist 10 Quadrat ist 100.
Wenn die Eingabelänge jetzt 100 ist, also das Zehnfache,
dann ist die 100 mal 100 ist dann irgendwie 10.000.
Das wächst irgendwie okay, das ist in Ordnung.
Zumindest im Vergleich dazu, wie Exponentialfunktion wachsen,
wenn ihr sowas nehmt wie 2
Denn wenn ihr da Zehen reinschmeißt, seid ihr schon bei
1000. Wenn ihr 20 reinschmeißt, seid ihr bei einer Million,
wenn ihr 30 reinschmeißt, seid ihr bei einer Milliarde.
So, das geht richtig ab. Und dann kann man irgendwie,
kann man nachher sagen, naja, wenn ich dann größere
Probleminstanzen habe, dann ist das irgendwie nicht mehr praktikabel.
Hast du dieser Unterschied zwischen Polymia und Exponentialzeit?
Dazwischen gibt es natürlich auch noch jede Menge,
aber wir konzentrieren uns erst mal gleich auf Polymial und Exponentialzeit.
Und hier noch die Klasse NP, die spielt auch eine
ganz bedeutende Rolle. Entsprechend wie oben,
nur dass die Turing-Maschine keine deterministisch ist, sondern eine nicht deterministische.
Und da drunter das Ganze noch mal für polynumimiellen Platz und
nicht dieterministischen polynumiellen Platz
Und auch mein Rot von besonderer Bedeutung, insbesondere diese Klassen-P und NP.
Und als Teilmengenbeziehung, einfach von der Definition her,
P ist eine Teilmenge von NP, P-Space,
ist eine Teilmenge von NP-Space, einfach weil man,
so wie wir das früher auch schon mal argumentiert haben,
den Nicht-Determinismus ja gar nicht ausnutzen muss.
Dann kann man nochmal kurz hier,
da hatte man ja die ganzen Polynome,
dann kann man das auch einfach so definieren,
dass man hier sagt, ich nehme D-Time,
also deterministische Zeit für beliebige Polynome und die vereinige ich alle.
Das ist dann
das Gleiche wie
Und bei NP das Gleiche mit N-Time, Peacepace, das Gleiche mit D-Space und so weiter. Das brauchen wir aber eigentlich nicht nur so als Info,
was noch wichtig ist, weil die Timemang-Beziehung hier,
insbesondere die beiden unteren, und hier, ob P und NP,
ob die gleich sind, das heißt dieser ganz großen,
offenen Probleme in der Mathematik und insbesondere in der Informatik auch,
weil man halt weiß, P-Timemang von NP, okay,
das sieht man allein, und ob es andersrum gilt,
weiß man eben nicht, man vermutet sehr stark,
dass das nicht der Fall ist,
dass man also eine NTM zwar durch eine DTM simulieren kann,
Das hatten wir ja,
dass man irgendwie den ganzen Konfigurationsbaum von der NTM mit einer breiten Suche durchsucht.
Aber dass dazu eben mehr nötig ist als puddingmäler Mehraufwand.
Also dass ich dann irgendwie exponentiell viel Zeit brauche.
Und dann kriege ich eben so eine Umwandlung hier von einer NP-Touring-Maschine quasi,
eine P2-Maschine, das kriege ich da halt nicht mehr hin.
Und warum das Problem so relevant ist,
das werden wir morgen und nächstes Mal dann sehen,
wenn wir uns diesem Thema NP-Vollständigkeit nähern.
Für jetzt erstmal schon so als Vorausschau da hängt eins dieser
ganz großen Probleme, mit dem man, wenn man möchte,
eine Million verdienen kann.
Mal gucken, ob das noch zu meiner Lebzeit passiert
Ja. Wieder Zusammenfassung. In den Komplexitätsklassen fassen wir diese Probleme zusammen,
die in einer bestimmten Zeit- oder Platzschranke gelöst werden können.
Dann nehmen wir uns die speziellen Komplexitätsklassen P und NP,
wo wir sagen, die Zeitschranke sollen polynom sein und entweder durch
eine deterministische Touring-Maschine für P oder für eine nichtdeterministische Touring-Maschine für NP gelöst werden.
Und da nochmal, wenn Probleme mit P ist,
dann heißt das, Es gibt irgend so eine DTM,
die das Problem eben löst oder die Sprache akzeptiert.
Und die hat eine polymäre Zeitschranke. Sprich,
es gibt irgend so ein Polynom P, sodass ich meine
Eingabe der Länge N maximal P von N viele Schritte brauche.
Klar, soweit? Okay. Also bisher,
das ist alles, der Aufbau dauert ein bisschen lange,
im Grunde genommen, was man sich merken sollte für das,
was wir später brauchen und das, was auch in der Praxis relevant ist.
Ich zähle die Schritte, also wenn wir uns mal auf
Zeitkomplexität einschränken, ich ziehe die Schritte,
die ich beim Bearbeiten des Problems brauche
Davon nehme ich mir quasi den Worst Case,
also ich halte eine Eingabelänge fest, gucke mir alle Eingaben dieser Länge an,
davon nehme ich mir den Worst Case.
So, und dafür will ich so eine Zeitschranke haben.
Wenn die Zeitschranke im Polynom ist, dann ist das gut,
dann ist das Problem erstmal ein P,
wenn ich es deterministisch lösen kann oder ein NP,
wenn ich das nicht deterministisch lösen kann.
Genau, und das sind so die Sachen. So,
jetzt, das, warum das so relevant ist,
das ist ja jetzt alles definiert über Touring-Maschinen.
Und was man jetzt aber zeigen kann, ist,
dass man einen Computer durch eine Touring-Maschine simulieren kann und eine Touring-Maschine durch einen Computer.
Letzteres ist vielleicht ein Computer, ersteres ist vielleicht nicht so überraschend,
dass ein Computer eine Touring-Maschine simulieren kann,
andersherum vielleicht
schon überraschender
Haben wir aber auch schon mal diskutiert, dass das,
als es um diese Entscheidbarkeitsfragen ging, dass das geht.
Das Spannende ist jetzt, das geht nicht nur einfach,
sondern es geht mit polynomiellen, mit nur polynomiellen Mehraufwand.
Also wenn ich einen Computer habe,
mit seiner ganz großartigen Architektur und weiß nicht, was da alles,
so Pipelining und so weiter und so weiter und mehr Prozessoren,
Pipelining und so weiter,
dann kann ich den durch eine Touring-Maschine simulieren und ich brauche nur polynomiell mir einen polynomiellen Mehraufwand.
Also wenn der Computer das Problem in Endquadrat löst,
dann braucht die Touring-Maschine irgendein weiteres Polynom,
multipliziert mit diesem Endquadrat.
Also End-hof-5 mal Endquadrat oder irgendwie sowas
Also eigentlich gar nicht so tragisch. Und das Spannende ist dann eben,
dann bleibt das Problem in P. Ist also egal,
wie ich das so drauf gucke.
Hatten wir schon bei der Unentscheidbarkeit mal diskutiert, dass das geht.
Und dann gab es ja diese Church-Touring-These,
wo gesagt wurde, das gilt nicht nur für Computer,
sondern für jedes denkbare Rechenmodell.
Eine These, weil man ja nicht jedes erdenkbare Rechenmodell irgendwie erfassen kann.
Aber für alle, die man bisher so vorgeschlagen hat,
konnte man immer zeigen,
Touring mächtig
Also vorgeschlagen soll bedeuten, für alle Rechnermodelle,
die man vorgeschlagen hat und die physikalisch umsetzbar sind.
Ich kann mir natürlich Rechenmodelle vorstellen,
die irgendwie keinen Bezug zur Wirklichkeit haben und diese Church-Touring-These sprengen.
Wenn ich beispielsweise annehme, ich habe ein Rechenmodell, das Zugriff hat,
auf unentscheidbare Probleme, also auf die Lösbarkeit von unentscheidbaren Problemen.
Dann habe ich ein Rechenmodell, das logischerweise mehr kann,
aber das ist irgendwie nicht praktikabel, kann ich irgendwie nicht machen.
Also hier für jedes denkbare physikalisch mögliche Rechenmodell sagt die Church-Touring-These,
Touring-Maschine und Computer können das Gleiche. Und die These,
die wird jetzt mit Brille von dieser Komplexitätstheorie hier erweitert,
die erweiterte Church-Touring-These, die sagt, dass die Modelle,
also alle solche denkbaren Rechenmodelle, die physikalisch irgendwie umsetzbar sind,
dass diese Modelle alle in Podiumialzeit ineinander umwandelbar sind.
Und bei Touring-Maschinen zu Computern kann man das zeigen.
Wer das mal lesen möchte im Hauptdrift Ulm, entsteht das
so ein bisschen beschrieben. Ist halt ein bisschen rumgefrickelt,
aber kann man sich da ganz gut überlegen.
Und genau. Und auch da These,
weil man auch wieder für alle bisher so vorgeschlagenen Rechnermodelle zeigen kann,
dass die gilt, aber es könnte natürlich irgendwie eins geben,
wo das nicht gilt.
Aber bisher für alle,
die so physikalisch umgesetzt wurden,
konnte man
das zeigen
So, das ist so wichtig,
das verdient nochmal Routeboxen, also Touring-These,
die Klasse der Touring-berechenbaren Funktionen stimmt mit der Klasse,
der von uns so berechenbaren Funktionen überein,
also sind alle hinreichend mächtigen Berechnungsmodelle äquivalent und erweiterte Church-Touring-These,
wenn ich zwei Rechte in der Modelle habe,
B1 und B2, dann gibt es einen Polynon P,
sodass eben Tier-Rechenschritte von B1 bei einer Eingabe der Länge enden durch dieses T von N simuliert werden können und dann ist das eben auch pudinumiell zeitbeschränkt.
Dieses Tee hier, Tee-Rechenschritte von B1,
also wenn ich eine Länge N habe und B1 ist pudinumiell beschränkt,
dann sind diese Tee-Rechenschritte ja P von N oder nehmen wir mal ein anderes Problem um,
Kuh von 11. Und dann steht hier P von Kuh von N und N,
naja, dann wird das auch ein Polynom,
wenn ich ein Polynom in ein Polynom reintue,
bleibt das ein Polynom.
Also in den N hoch 3 Endquadrat reintut, dann habt ihr
eben Endquadrat hoch 3, das bleibt irgendwie ein Polynom.
Und dann heißt das hier, wenn ich zwei Modelle habe,
die Touring-Äquivalent sind, dann lassen die sich mit pudinumiellen Mehraufwand ineinander umwandeln.
Sprich, alles, was wir bisher so für Touring-Maschinen jetzt gemacht haben,
könnten wir auch einfach mit richtigen Algorithmen oder mit Algorithmen
für eine imperative Programmiersprache oder sowas argumentieren
Das, genau, da steht da nochmal,
dass diese Komplexitätsklasse P deswegen so eine große Bedeutung hat,
weil dann quasi, wenn ich ein Problem mit einem Rechenmodell,
wenn ich das nachgewiesen habe, dass das Problem mit P ist,
dann weiß ich, das gilt auch für alle anderen Rechnermodelle.
Und wenn man jetzt ein Problem hat und zeigen will,
dass das MP ist,
dann muss man jetzt also nicht so,
wie wir das bisher jetzt hier gemacht haben oder angedeutet haben,
länglich argumentieren, wie ich das irgendwie mit einer Touringmaschine mache,
sondern ich kann entweder von der Touringmaschine ein bisschen argumentieren,
so wie wir das in den Übungsaufgaben ja schon gemacht haben
und nur grob beschreiben,
wie die Touringmaschine arbeitet oder man kann gleich irgendwie auf
eine imperative Programmiersprache umsatteln und da mit argumentieren
Da muss man ein bisschen aufpassen,
dass man irgendwie bei der Programmiersprache nicht irgendwie zu viel obendrauf tut,
weil man dann sich auch immer Gedanken machen muss,
ist das überhaupt für den Leser noch nachvollziehbar,
aber solange man irgendwie bei so einer normalen empathien Programmiersprache bleibt, ist das alles okay.
Jo, da noch mal zu dieser herausragenden Bedeutung von P,
dass man eben im Allgemeinen davon ausgeht,
das ist ja auch wieder was, was sowas ist,
was mit Intuition, die mir unterfuttert ist, aber dass man sagt,
wenn ein Problem in P liegt, dann kann ich es effizient lösen.
Jetzt kann man irgendwie daherkommen und sagen, naja, wenn ich ein Problem habe,
das ich nur von einer Touring-Maschine oder einem Algorithmus lösen kann,
der irgendwie durch N hoch 1000 beschränkt ist,
dann ist das ja wohl nicht praktikabel, stimmt,
aber in der Praxis tritt sowas kaum auf.
Also in der Praxis treten überwiegend Sachen auf,
wo das Problem dann Endquadrat, N hoch 3,
N hoch 4 ist und wenn man für ein Problem erstmal nur einen Algorithmus findet,
der deutlich da drüber ist,
dann lässt sich das meistens danach drücken,
sodass es dann eben doch in N hoch 3 oder sowas geht und dann gut oder zumindest relativ gut sich lösen lässt.
Aber es lassen sich natürlich so Beispiele konstruieren,
aus theoretischer Sicht, die dann eben NP sind,
aber wo man nicht sagen würde,
dass die effizient lösbar sind
So für, ich würde mal sagen,
99,99 Prozent aller Fälle ist dieser Aussage, wenn es ein P ist,
es ist es effizient lösbar, gut untermauert so.
Und da nochmal zur Betonung,
dass ihr Stadt jetzt immer mit Touring-Maschinen zu argumentieren,
wenn man in diesem Komplexitätstheorie-Setting ist, so PNP,
dann kann man auch mit Algorithmen argumentieren.
Und deswegen spielen diese Klassen-P und NP in der Algorithmenvorlesung oder
auch nächstes Semester dann in A und D auch immer eine sehr große Rolle.
Weil die werden wir auch noch sehen,
die bauen dann auch so eine Schranke auf zwischen,
lässt sich effizient lösen, ist EP und lässt sich nicht effizient lösen,
ist irgendwie in NP, aber nicht in P.
Das werden wir uns nochmal angucken,
Ob die Church-Touring-These auch für Quantencomputer gilt,
meinst du die Church-Touring oder die erweiterte?
Die erweiterte. Am Mist. Also Church-Touring, ja,
erweiterte, warte mal, da muss ich nachdenken.
Ja, aber es ist ja nicht klar,
dass das nicht geht
Deswegen, also bei, sonst alles richtig,
aber da nicht klar ist, ob das geht,
also der, es ist nicht so, als Vorgriff jetzt mal,
für dich ist es nicht so, dass man zeigen kann,
dass ein Quantencomputer NP vollständige Probleme knackt.
Also kriegst du mit dem Quantencomputer nicht P gleich NP sozusagen,
also dann kriegst du damit nicht hin.
Du kriegst es nicht hin mit dem Quantencomputer NP-Probleme schnell zu lösen.
So, du kriegst es aber, glaube ich,
teilweise hin bei einigen P-Space-Problemen irgendwie schneller zu sein,
aber ich glaube, die sind dann ja wieder nicht P-Space vollständig.
Von daher ist da dann auch wieder nicht klar,
geht es nicht mit dem anderen vielleicht besser.
Also ich meine, die These hält da auch noch,
ich bin aber nicht hundertprozentig sicher
Also ich bin mir nicht sicher, ob man das schon bewiesen hat.
Und das schon ganz sicher ist. Zumal der Aya noch
gar nicht klar ist, wie man den denn realisieren würde.
Also man hat ja ein theoretisches Modell,
aber ob man das genau so dann physikalisch realisieren kann,
ist nicht ganz klar.
Und bei dem theoretischen Modell bin ich mir nicht ganz sicher,
wie weit man da ist mit diesem Beweis.
Ob man das schon gemacht hat. Muss ich nachher
mal gucken. Okay, nochmal zur Bedeutung von P&NP.
Also wenn Probleme im P ist, geht man davon aus,
dass man es effizient lösen kann.
Warum? Weil so ein Polynom mit N in vertretbarem Aufwand
wächst da nochmal so ein Beispiel.
Endquadrat für 10 ist 100 für 50, ist
2500. Ist irgendwie okay. Hier 2 hoch N,
für N gleich 10 ist das 1000,
für N gleich 50 ist das
eine Billiarde
Irgendwie hässlich. Und Eingabelängen von 50 ist jetzt nicht so
unwahrscheinlich. Also irgendwie auf dem Graf mit 50 Knoten,
kürzesten Weg von A nach B berechnen zu wollen
, das ist jetzt nicht so unwahrscheinlich, dass man sowas
machen können möchte. Oder irgendwie bei 50 Zahlen auszurechnen,
was das Maximum ist, ist auch nicht so unwahrscheinlich.
Also Eingabelängen, 50 treten auf, für die beiden eben
genannten Probleme gibt es aber Polynialzeitalgorithmen, das ist also super.
Aber für, was wir ja auch schon hatten,
Erfüllbarkeit der Aussagenlogik gibt es kein Polynialzeitalgorithmus.
Da kann man sich also nur mit dieser Methode behelfen,
irgendwie, keine Ahnung, Wahrheitstafel aufmalen oder so.
Wenn ich jetzt eine Formel habe mit 50 Aussagensymbolen,
was auch nicht unwahrscheinlich ist, sondern was in der Praxis sehr häufig auftritt.
Dann bräuchte ich schon eine Milliarde Zeilen in der Wahrheitstafel,
sodass irgendwie nicht mehr praktikabel.
Genau. Und da auch nochmal die Anmerkung für die meisten Probleme,
für die man so einen Algorithmus in T findet.
Findet man meist eins mit einem kleinen Pinom. So. Jetzt
machen wir mal einen kleinen Exkurs auch in die Algorithmik nachher noch ein.
Warum? Weil wir jetzt zwar merken, hier so Polynome sind wichtig,
aber meistens interessieren ein so lineare Unterschiede nicht so doll.
Oder auch so kleine Unterschiede, sowas wie N-Hoch 3
plus N-Quadrat
Im Vergleich zu Nhoch 3. Wenn ihr da ganz große Werte für Ende einsetzt,
dann spielt dieses Endquadrat nachher keine große Rolle mehr.
Das heißt, wenn man nur eine grobe Abschätzung für einen Algorithmus haben will,
wird es reichen zu sagen, der ist in Nhoch
3. Jetzt stimmt das aber vielleicht nicht so ganz,
sondern er ist irgendwie in viermal in hoch drei oder zweimal
in hoch drei oder so eine Zahl wie so ein Polynom wie das hier.
Und da möchte man drumherum, die möchte man gerne als gleich
ansehen oder als prinzipiell gleich. Und das führt zu,
oben steht es schon rüber zu dieser Landau-Notation oder eben U-Notation.
Wer kennt die schon? Das mal so gehabt.
Weißt du, was man kann ja
schnell machen
Gute Zeit. Also, O- und Landernotation. Das ist
im Grunde genommen schon so ein Ausblick auf A und D,
weil wir das kaum brauchen, ist aber gleich einfacher ist,
an ganz vielen Stellen zu sagen,
die Zeitschrank ist O von Endquadrat, statt Endquadrat,
was nämlich falsch wäre in vielen Fällen.
Und hier seht ihr schon mal die Vorschau so.
Für uns wird vor allem das hier wichtig sein,
dass man dann sagen kann,
ein Algorithmus ist in O von FN,
was bedeuten soll,
es gibt irgendeine konstante C,
sodass der Algorithmus C mal FN
zeitbeschränkt ist
Also wenn ihr aus den nächsten fünf Folien nicht viel mehr
mitnehmt als das, dann ist das auch okay.
Dass man halt weiß, dieses O unterdrückt quasi einfach so eine konstante Zeh.
Von der Definition her deutlich umständlicher als das, aber darauf läuft es hinaus.
Warum macht man das? Wenn wir uns mal so einen Algorithmus wie den hier ansehen,
dann macht man das erstmal so, dass man sagt,
hier, ich muss mir wieder was für Zeit und Platz
überlegen und ich habe jetzt ja nicht so wie bei der Touring-Maschine irgendwie Zellen,
also muss ich mir was anderes für den Platz überlegen.
Und dann sagt man halt, naja,
bei dem Platz, wenn ich eine Variable benutze,
ist das eine Platzeinheit und so eine Arry-Zelle zählt auch als Platzeinheit und Zeit benutzt man hier das sogenannte Uniforme Mars.
Da sagt man einfach, eine Anweisung ist ein Schritt.
Da gibt es noch so einen Unterschied zum lugarithmischen Mars,
das werdet ihr dann auch in A und D haben.
Da steckt drin, dass wenn ich zwei Zahlen addiere,
manchmal macht das in irgendeiner imperativen Programmiersprache X plus Y und ich sage,
das ist ein Schritt, dann ist dieses X plus Y,
aber in, wenn die Zahlen klein sind, deutlich schneller,
als wenn die sehr groß sind.
Deswegen ist das Uniforme Mars meistens irreführend für die meisten Anwendungen
so und wenn man das so ein bisschen im Hinterkopf hat,
ist das aber völlig in Ordnung.
Also da zum lugarithmischen Mars überzugehen, kann man machen,
muss man aber nicht
Gibt gute Gründe, warum man manchmal ein bisschen aufpassen muss
mit dem Uniform Mars, aber das sind so Rumspielereien,
dass man halt sonst in sehr große Zahlen ja Dinge reinkodieren kann.
Und dann habe ich zwei sehr große Zahlen,
da ist unglaublich viel reinkodiert. Ich addiere die,
das kostet mich nur einen Schritt und plötzlich habe ich aber das ganze Problem ausgerechnet,
weil ich mit den Kodierungen gerade sehr tricky gearbeitet habe.
Und das will man nicht machen. Also das will man nicht zulassen,
aber wenn man jetzt in so einem Setting wie den ist,
ist das völlig in Ordnung.
So, wenn man sich das jetzt hier anguckt,
wie viele Schritte verstecken sich denn da?
Also was ist die Zeitschranke für den Algorithmus
Man müsste wieder sagen, okay, also Eingabe ist,
dass R.R. und da wird immer was gesucht, ne?
Ich gehe das Apple durch den Suchmarkt, muss der Mann.
Was ist die Zeitschranke dafür? Genau, oh,
wenn wir das gleich haben, aber ohne ohne Notation.
Nee, wir meinen, wir haben die noch nicht.
Was ist die Zeitschranke dann, wenn man sich
nur auf das beschränkt, was wir eben so hatten?
Ja. 2N plus 1. Ja, irgendwie sowas in
den Bereichen auch
Erstens Worst-Case-Abschätzung, weil es gibt ja bestimmt so,
es gibt ein Array, da steht Max Mustermann gleich als erstes,
da brauche ich irgendwie grob so einen Schritt oder irgendwie sowas.
Hat er richtig gemacht nach der Worst-Case-Abschätzung,
im schlimmsten Fall ist das ganz hinten oder vielleicht sogar gar nicht drin,
das ist der Worst-Case, glaube ich, wenn es gar nicht drin ist,
dann gehe ich das komplette Array durch und finde das nicht.
Und jetzt kommt es aber darauf an, was man alles zählen will,
will ich hier diese Vorschleife, da steckt ja drin einen Vergleich,
eine Erhöhung und vielleicht sogar noch ein Sprungbefehl,
wenn man den noch drin haben möchte, also vielleicht sogar schon drei Befehle,
dann steckt hier auch wieder ein Vergleich drin, vier,
dann keine Ahnung, will man jetzt noch zählen,
dass bei AI ein Zugriff ist oder nicht,
je nachdem, in welcher Programmiersprache man ist,
muss das vielleicht sein oder auch nicht.
Da steckt also irgendwie in jeder Zeile möglicherweise mehr als ein Befehl. Dieses 2N plus 1,
was er gesagt hat, das ist so aus,
wenn ich jetzt die Schritte zählen wollte, die,
wenn ich das in C oder Java implementiere, die da so passieren,
dann trifft das das ziemlich gut zu 2N plus 1.
In anderen Programmiersprachen,
das ist vielleicht Reihen plus 1 oder 4N oder irgendwie sowas,
das Wichtige ist aber, das merkt ihr ja schon bei der Diskussion,
das ist immer irgendwie so ein Faktor mit N,
das wird nicht plötzlich Endquadrat,
sondern das ist irgendwie 3N oder 5N oder 8N oder sowas,
je nachdem,
mit welcher Programmiersprache man arbeitet und auch je nachdem,
mit welcher Rechenarchitektur
man arbeitet
Und da möchte man gerne drumherum kommen. Dass man nicht sagt irgendwie,
dieser Algorithmus hat eine Laufzeit von und jetzt kommt eine
große Tabelle für jedes Rechnermodell, das mich interessiert.
Und da steht immer die Laufzeit und eigentlich ist es überall fast das Gleiche.
Da möchte ich drumherum kommen und einfach sagen, ja,
was ich jetzt schon in der ersten Reihe meinte,
der Algorithmus ist in O von N.
Das O verschluckt irgendeine Konstante, das ist okay.
Und der Algorithmus ist auf jeden Fall in U von N
, egal welche Rechner, Architektur ich so betrachte.
Das ist so die Begründung,
warum man in der Algorithmenanalyse gerne mit dieser O-Notation arbeitet,
weil dann eben so eine konstante verschluckt wird,
die immer so ein bisschen unterschiedlich aussehen kann, je nachdem,
was die Programmiersprache gerade tut.
Und es gibt aber einen sehr guten Hinweis da drauf,
die Laufzeit des Algorithmuses ist. Denn egal, was diese Konstante ist,
ob das jetzt zwei ist oder acht oder fünf,
das N wird nachher sehr dominant.
Also wenn ich hier in Array der Länge 1000 habe oder eine Million oder eine Milliarde,
das wird nachher der konstante Teil in der Rechnung.
Und nicht, ob das die konstante vorne zwei ist oder
drei oder irgendwie sowas. Klar macht es noch einen Unterschied,
ob das nachher drei Millionen Schritte sind oder zwei Millionen Schritte,
aber aus Sicht der Algorithmenanalyse ist das vernachlässigbar gegenüber sowas wie O von Endquadrat oder O von N.
Deswegen will man das machen. Also in dieser Wohnnotation
sollen diese konstanten Faktoren verschwinden
Da drunter die drei Sachen, warum man das macht.
Man kann sich aus Wesentliche konzentrieren von verschiedenen Rechnerarchitekturen und Programmiersprachen
abstrahieren und eben sehr gut Algorithmen vergleichen.
Anfällige Schwankungen kann man auch ignorieren. Aber hier,
solche unterschiedlichen Polynomen, die werden als im Prinzip gleich angesehen.
Also wenn ich zwei Algorithmen habe und von beiden behaupte ich oder weiß ich,
die sind in O von N, lohnt sich unter Umständen trotzdem nochmal,
je nachdem, was das jetzt gerade für ein Anwendungssetting ist,
ein Blick, welche Konstanten da gerade versteckt werden,
um eben möglichst einen effizienten Algorithmus dann auszuwählen.
Also wer sich schon mal ein bisschen mit Sortieralgorithmen beschäftigt hat,
so Quick-Sort haben bestimmt die meisten mal gehört,
so Quick-Sort in Search and Sword so
Da weiß man halt auch,
Quicksort ist eigentlich ein O von Endquadrat und sowas wie Merch Sort
ist ein O von Endmy Login, also eigentlich schneller,
aber Quicksort hat halt so eine kleine Konstante,
dass der in den meisten Anwendungen den trotzdem schlägt.
Deswegen sagt man, oh cool, dann nehme ich vielleicht Quicksort,
auch wenn der mir so von der Algorithmenanalyse,
von der Worst Case Algorithmenanalyse sagt, der ist eigentlich schlechter.
Weil Endquadrat wird bei großen N deutlich schlimmer als N-My Login.
Also es ist irgendwie der N-My Login Algorithmus eigentlich besser.
Aber so für ganz viele Sachen,
insbesondere der dritte Punkt hier,
für ganz viele Sachen ist mit dieser Unnotation ein
sehr schöner,
sehr eleganter Vergleich von Algorithmen möglich
Und auch eine sehr elegante Analyse,
dass man sich eben nicht irgendwie ins kleinkleines Zählens verläuft,
sondern dass man die Kernaussagen rüberbringt, wie schnell ein Algorithmus ist.
So, da die Definition. Das sieht schon,
also das sieht deutlich schlimmer aus, als es wird eine Konstante verschluckt.
Was da gemacht wird, ist folgendes. Es wird in
O von G von N, nehmen wir mal an,
geh von N ist jetzt sowas wie N-Quadrat,
dann soll ein O von Endquadrat alle Funktionen drin sein,
die im Prinzip,
kleiner gleich,
G von N sind
Mit diesem im Prinzip, also ich will eine Konstante verschlucken,
ich will Anfangswerte ignorieren und so weiter.
Aber im Prinzip soll die kleiner sein, die da drin ist.
Und das führt dann dazu, dass wenn man sagt,
ein Algorithmus hat eine Laufzeit in O von Endquadrat,
dann weiß ich, es gibt irgendeine konstante C,
sodass bei einer Eingabe der Länge endlich durch zehnmal Endquadrat nach oben beschränkt bin.
Und das wird jetzt wie folgt gemacht hier. Es wird gesagt,
in O von G von End sind all die Funktionen F drin,
mit der folgenden Eigenschaft. F von N soll kleiner
gleich zehnmal G von N sein, für irgendeine konstante C.
Und das führt dazu, dass man sagt, so eine
Konstante wird ignoriert. Und dann wird hier noch gesagt,
es existiert, so ein N-0,
sodass für alle Andy dann größer sind als N-0, das gilt.
Und das führt dazu, dass man quasi so einen Anfangsteil ignorieren kann.
Dann sagt man diese Abschätzung mit dem Größergleich,
vielleicht gilt die erst ab zehn. Ist auch okay.
Das ist ein Anfangsteil ignoriert. Und dadurch kriegt man es halt hin,
dass in diesem Ophon-G von N alle Funktionen drin sind,
die im Prinzip, man spricht dann von asymptotisch, kleinergleich G von N sind.
Das Omega hier tut im Grunde genommen das Gleiche,
nur mit größer gleich,
also ein Omega von G von N sind all die Funktionen drin,
die im Prinzip größer sind, größer gleich sind.
Und in Täter, mit dieser etwas komplizierten Schreibweise hier,
da erfasst man im Grunde genommen beides.
Also wenn ihr euch das anguckt, werden hier quasi beide Definitionen von hier oben zusammengenommen.
Und das führt halt dazu, dass da alle die drin sind,
die im Prinzip kleiner gleich und größer gleich sind, also im Prinzip gleich.
Das heißt, hier ein Täter von Nhoch 3,
da werden dann nur solche Polynome der Art Nhoch 3 drin sein mit irgendwelchen konstanten Faktoren davor.
Ja, genau, da die Merkhilfe, so im Grunde genommen,
FNO von G bedeutet FS kleiner gleich, FNOmega,
FS größer gleich,
FNTTA FS gleich
Und die, die wir brauchen, ist die hier F in Ophon G. Und das,
was wir eben primär brauchen,
ist, dass wir gleich so Aussagen machen können,
wie zum Beispiel bei diesem Suchalgorithmus von eben,
dass man sagen kann, Laufzeit ist in O von E. Sprich,
bei der Eingabe der Länge N brauche ich maximal zehnmal N
viele Schritte für irgendeine konstante C. Beispiel nochmal für diese Täter-Geschichte hier.
Bei Täter wird ja gesagt, es muss so zwei Konstanten geben.
C1 C2, sodass ab irgendeinem Start wird in null.
Ab da F von N eben genau zwischen diesen
C1 mal G von N und C2 mal G von N
Also wenn man das mal machen will und man will jetzt mal zeigen,
dass dieses Einhalb-End-Quadrat minus 3N sich im Grunde genommen gleich verhält wie Täter von Endquadrat.
Dann muss man jetzt Konstanten finden,
C1C2 und eine Null, sodass das hier gegeben ist.
Also das ist das F von N und das F von
N in der Mitte muss einmal größer gleich Endquadrat mit irgendeiner
Konstante sein und einmal kleinergleich Endquadrat mit irgendeiner anderen Konstanten.
Ja, das kommt da rumrechnen,
Teilen durch Endquadrat
bietet sich an
Dann sieht das so aus. Und jetzt kann ich mir halt überlegen,
ab welchem N oder ab welchem N null kriege ich das
hin und C-1-C-2 darf ich auch noch wählen,
sodass die beiden Ungleichungen gleichzeitig erfüllt sind.
Und ich sehe, von einhalb ziehe ich immer was ab,
egal was das Ende ist. Das heißt, für C-2 wird es wahrscheinlich reichen,
wenn ich einfach ein Halb wähle oder wenn ich sage,
das ist eins, das ist egal, das gilt dann für alle N.
Und hier ist es ein bisschen spannender, hier C-1,
da kann ich ja nicht irgendwie null wählen,
ich muss irgendwas wählen,
was größer ist als null und dann muss ich aufpassen,
dass dieses ein Halbminus 3 durch N eben auch größer ist als dieser Wert und den Zahlenwerten erreicht man zum Beispiel,
die habe ich für sie 1,
2 Achtel gewählt und für N 024 und dann kann man sich überlegen,
dann gilt das und danach.
Stimmt das? Das sind zwei Achtel und hier haben wir dann vier Achtel minus 1,
8 oder also drei Achtel, passt, ne?
Genau und das wird ja danach immer nur noch größer,
also das hier nähert sich ja dem ein halb an,
also passt das.
Und dann hat man bewiesen, dass dieses Polynom
eben in Täter von Endquadrat enthalten ist
Okay. So, und dann gibt es eine Algorithmenanalyse,
ganz viele spannende Funktionen,
insbesondere wichtig hier die Logarithmusfunktion und Polynome und Exponentialfunktion.
Das sind so die drei, die ganz wichtig sind.
Logarithmen, Polynome, Exponentialfunktion und natürlich Kombination davon.
Und man versucht immer einen Algorithmus zu entwerfen,
der in der Worst-Case-Laufzeit nach Möglichkeit ein möglichst kleines Polynom hat.
Also O von Ende ist natürlich ein Traum,
aber so O von Endquadrat ist auch schon cool.
Cooler ist noch O von N mal Login. O von
N hoch 3 wird manchmal schon so ein bisschen hässlich,
aber kann man auch noch gut mitarbeiten.
Und danach wird es irgendwie auch schon doof so.
Aber O von N hoch 3 ist noch ganz schick
Genau, und dann kann man sich einmal angucken,
wie die bezüglich der U-Notation stehen,
damit man dafür ein Gefühl kriegt, dass diese Aussage,
Lugarithmus ist besser als Polynom, dass die wirklich stimmt.
Und das habt ihr, wenn ihr das wählt,
dann nächstes Semester in A und D. Ja,
da noch einmal kurz als Nebenbemerken zu diesem Lugarithmus-Kram,
ist jetzt in so einer dicken blauen Box, reicht,
wenn ihr das so grob wisst, Lugarithmus,
man betrachtet hier immer so Lugarithmen zur Basis
2. Aber macht auch keinen großen Unterschied,
weil die ganzen einzelnen Lugarithmen sich immer nur durch einen konstanten
Faktor unterscheiden und also alle in O von Lok sind.
Könnt ihr euch zu Hause nochmal angucken,
seid ihr ein bisschen vorbereitet auf A und D.
Da das Beispiel, was wir schon hatten,
Ist ein O von N. Genauer kann man sogar sagen,
es ist ein Täter von N. Korrektheit muss man noch zeigen.
Aber sieht man recht schnell ein. Laufzeit, Fakultät berechnen.
Laufzeit. Genau, O von N. Jetzt wollen wir aber
die Laufzeit immer abhängig von der Eingabelänge ausdrücken
Also, nicht O von N, sondern? Die Eingabe
ist ja hier Ende. Und es ist die Laufzeit abhängig
von der Eingabegröße, nicht O von N, sondern...
Die Zahl 1000 als Eingabe nehmen, dann ist die Eingabelänge hoffentlich nicht ein
1000. Das wäre ziemlich blöd. Ich meine,
man stelle sich mal vor, man müsste seine Konstanten so
in der Programmiersprache schreiben
1000 Null hintereinander. Macht man irgendwie nicht, ne? Also die Zahl ist,
nehmen wir mal an, dass es binär kodiert,
dann ist die Länge der Zahl lugerithmisch, ne?
Login. Also Zahltausend kriege ich durch irgendwie Log von Ende,
also so grob zehn Bits kodiert. Das ist dann die Eingabelänge.
Und dann hat man hier einen Algorithmus, der stimmt natürlich,
wenn du sagst, der ist in O von N, total richtig.
Ist nur ein bisschen irreführend, weil man dann denkt,
oh cool, der ist, oder nicht so cool,
je nachdem, dass der linear wäre und linear ist er nicht,
zumindest nicht in der Eingabelänge.
Also der ist exponentiell in der Größe der Eingabe,
Eingabelänge ist nur Login und wenn du dann O-Fon-N ist,
dann ist der nicht linear, die Laufzeit, sondern exponentiell sogar in dem Fall.
Also deutlich schlimmer. Genau, das auch nur so als Ausblick,
dass ihr nochmal darauf euch ein bisschen schult,
dass eben ist bei diesem N um die, nee,
nicht bei dem N, sondern dass es allgemein darum geht,
Laufzeiten zu ermitteln, abhängig von der Eingabelänge.
Oder dass man sinnvolle Kenngrößen wählt. Wenn ich einen Grafen habe,
das habt ihr bestimmt schon mal gesehen,
dann macht man üblicherweise, gibt man die Laufzeit an,
irgendwie in Abhängigkeit von der Knotenzahl oder der Kantenzahl oder Biden
Ich weiß nicht, zwingend die Eingabelänge. Aber hängt halt eng damit zusammen,
wenn ich die Eingabe irgendwie als Addizenzmatrix kriege,
dann ist die irgendwie ein O von V-Quadrat.
Also VMAV. Und dann macht das Sinn, irgendwie die
Kenngrößen V&E zu nehmen. Hier macht es nicht Sinn,
als Kenngröße diese Zahl entzunehmen, weil es irreführend ist.
Hier nochmal die Zusammenfassung. Normalerweise,
wenn man einen Algorithmus analysiert oder wenn man die Laufzeit angeben will,
man überlegt sich bezüglich welcher Kenngrößen man das machen will,
dann ermittelt man Laufzeit und Speicherbedarf bezüglich dieser Kenngrößen
Überlegt nochmal, so wie wir das eben geguckt haben,
ob die Aussage das Ergebnis verfälscht und dann kann man das angeben.
Und im Allgemeinen sollte eben die eigentliche Eingabegröße leicht durch die Kenngrößen ausdrückbar sein.
Da unten nochmal ein positives und negatives Beispiel. Graf mit Endknoten
ist, die hat ja Azenzmatrix in O von Endquadrat.
Das ist okay, wenn ich dann irgendwie sage,
oh, mein Algorithmus läuft in O von N,
dann weiß ich, passt grob irgendwie mit dieser Addizenzmatrix zusammen.
Außerdem weiß ich ja hoffentlich sowieso,
in welchem Setting ich mich bewege,
bei dem mit den Zahlen ist das nicht
so praktisch
Okay, was wir uns vor allem merken, so eine Aussage wie die da.
Die Laufzeit des Algorithmuses oder Naturing-Maschine sind O von F&N.
Die Aussage bedeutet, es gibt irgendwie eine konstante C,
sodass ich bei einer Eingabe der Länge N maximal zehnmal F von N-Schritte brauche.
Und wenn zum Beispiel jetzt F von N gleich Endquadrat ist,
dann ist die Aussage eben,
ich brauche so grob Endquadrat viele Schritte,
noch mit irgendeiner Konstanten so,
aber grob Endquadrat
viele Schritte
Das sollte man eben aus diesem Exkursartigen Thema zur Unnotation. Das sollte man mitnehmen,
damit man das selbst bei den Übungen gut schreiben kann oder eben auch die Übungsaufgaben,
die Lösung dann gut lesen kann,
weil da dann eben auch einfach steht,
so der Algorithmus läuft dann eben im O von S
oder was auch immer.
Gut. Klar,
soweit? explodierte Zeit
Ob das die Zahlen ja immer größer werden bei der Exponentialfunktion,
dass wenn man das jetzt wirklich algorithmisch analysieren will,
also wenn man tiefer reingucken will,
dann würde man da halt diesen Unterschied machen zwischen diesem Uniformkostmaß und dem lugaripischen Kostenmaß,
dass man eben nicht mehr sagt,
es ist einfach ein Schritt, egal was ich multipliziere,
sondern dass man sagt,
so eine Multiplikation oder auch Addition oder so hängt halt von der Länge der Eingabe da schon ab und dann hat man lugaripmisches Kostenmaß,
dass dann halt die Länge dieser beiden Zahlen auch eine Rolle spielt.
Und dann wird das da eben teurer, als es so
auf den ersten Blick ist oder so. Aber das,
was ihr eben vor allem mitnehmen solltet,
jetzt bis hierhin ist, wie man Laufzeit bestimmt,
dass das irgendwie was mit diesen Worst-Case-Geschichten zu tun hat,
dass diese Komplexitätsklasse P eben diese wichtige Bedeutung hat,
dass das was mit Polynomen zu tun hat und was so eine Aussage hier bedeutet.
Wenn ihr das alles mitnehmt, dann habt ihr aus
der heutigen Vorlesung die Big Points auf jeden Fall mitgenommen.
Okay, noch Fragen bis dahin? Okay. Dann habe
ich noch ein paar. Finde das Maximum,
was ist die Laufzeit
Musik Ja, die erste, nachdem wir jetzt die ganze Sache
mit der Unnotation diskutiert haben, die erste ist halt Nee, ne?
So, da transportiert man wahrscheinlich auch die richtige Message mit. Aber wenn man O-Phone-N sagt,
dann ist man da deutlich auf der sichereren Seite,
weil man eben nicht in Schritte braucht, sondern man braucht,
in dem Fall sieht man es ja sogar,
dass man mehr braucht als Endschritte.
Also selbst wenn man da nur eine Worst-Case-Abschätzung macht,
braucht man da schon mehr als Endschritte,
irgendwie mindestens N plus 1, N plus 2 oder so.
Aber wahrscheinlich will ich in den ganzen versteckten Geschichten noch mehr.
Also das erste ist doof. Und hier,
O von N trifft es am besten,
das ist am wenigsten irreführend, dass man sagt,
naja, hier, da ein Schritt, also konstant viele,
da unten auch irgendwie einen Schritt konstant viele.
Das Wichtige ist, wie oft ich hier in der Schleife
Dinge ausführe. Und da gehe ich irgendwie eng mal rein
in die Schleife oder in minus 1 mal
Und habe dann hier irgendwie eins, zwei, drei Operationen,
aber eine konstante Anzahl. Also bleibe ich irgendwie in O
von N. O von 3N könnte man auch nehmen,
aber das ist irgendwie das gleiche wie O von N.
Das tut sich nichts. Da wird ja, die Konstante
wird ja gerade verschluckt. Also das O von 3N,
das gleiche wie O von N,
das gleiche wie O von 5N und so weiter.
Die tun sich alle nichts. O von N minus 1 genauso.
Das ist auch das Gleiche, aber zwei ist halt im schönsten.
Und das fünfte hier, das stimmt natürlich als obere Schranke auch.
Also wenn ich sage, ich brauche da O von N viele Schritte,
dann kann ich als obere Schranke auch sagen, oh,
von N-quadrat viele.
Man versucht halt immer eine möglichst gute untere Schranke anzugeben,
obere Schranke,
man versucht eine möglichst gute obere Schranke anzugeben
Und da trifft halt O von N am besten.
Also die zweite sollte man da nehmen.
Bitte? Und erzählen? Nicht tot,
sondern heute
Also,
eingabe es das RAR und B ist irgendwie ein Area,
dass man sich zusätzlich vielleicht davor noch kreiert oder sowas,
dass Ausgabe Area
Also Login wäre cool. Es klappt schon nicht mit dem hier,
wenn ich hier end mal in den Schleifen rumfreigehe.
Also hier gibt es ja nie eine Möglichkeit rauszuspringen,
also gehe ich da auf jeden Fall end mal rein,
wenn es dieses Login schon mal außerhalb meiner Möglichkeiten,
also wenn endtausend ist,
dann gehe ich hier halt tausendmal in die Schleife und nicht nur zehnmal,
also mit dem Ufer Login
klappt das irgendwie nicht
OfonN könnte man zuerst denken hier, ich gehe irgendwie enden mal in diese Schleife rein,
da sind drei Operationen drin, also bin ich irgendwie bei dreimal enden,
kommt vielleicht noch so ein bisschen was dazu bei der Vorschleife und so,
aber irgendwie konstante mal N, aber diese Maximumsbestimmung von eben,
aus dem Algorithmus davor, da haben wir irgendwie Endschritte gebraucht.
Also brauche ich für jeden Methodenaufruf da Endschritte,
also gehe ich enden mal in diese Schleife rein,
habe in Zeile 3 und 4 jeweils Endschritte, äh,
Einschritt, Entschuldigung, und hier in der zweiten,
da habe ich aber en viele Schritte,
also gehe ich irgendwie en mal wohin,
wo ich Endoperationen brauche,
da bin ich bei Endquadrat,
ne,
und dann ist hier
das zweite richtig
Dritte ist auch zu langsam, also zu wenig,
also 1, 3 und 4 ist zu wenig.
Zwei trifft es ziemlich gut und 5 ist deutlich zu viel.
Also zwei hochenden exponentiell, viele Operationen brauche ich nicht.
Also oh, von Endquadrat ist da eine gute Schranke.
Hier, Fangfrage
Sehr gut. Nicht deterministisch, also da geht es ja darum,
dass ich bei P eine Pudelmialzeit beschränkte,
deterministische Touring-Maschine habe und bei NP eine Polinialzeit beschränkte,
nicht die terministische Touring-Maschine.
Und wir werden später sehen, dass es Probleme gibt,
die vermutlich nicht in P liegen, aber in NP.
Und das wird auch für uns so ein Ding sein,
wo wir dann sagen, oh, wenn das Problem da liegt,
dann ist es wohl nicht effizient lösbar,
weil es halt vermutlich nicht in P liegt,
aber in NP
Und das führt dann meistens dazu, dass sich doch irgendwie die Meinung durchsetzt,
das N hier würde für Nicht-Pudeln um Yay stehen,
das ist aber nicht richtig.
Das Ende steht für nicht-deterministisch, also für den Determinismus steht das da.
Die Terminismus und nicht-determinismus vergleichen Christian hin. Genau,
das erste hier, F, das erste eine P-Timing von NP,
das zweite vielleicht, weiß man noch nicht so genau,
sehr unwahrscheinlich,
aber vielleicht,
dann werden die beide gleich
Das dritte nicht, weil wenn erstens gilt,
kann das dritte nicht gelten. Also P kann ich
eine Timing von NP sein und der Schnitt leer.
Das passt nicht. Und unvergleichbar ist es auch nicht.
Also P-Timing von N-Pegel tatsächlich. Kompliment von A.
Also alle Xe, die nicht in A drin sind,
aber in
Also wird einmal die Summe gebildet über die Elemente in A
und einmal die Summe über die Elemente aus S, die nicht in A sind.
Also erstmal ein bisschen unterspezifiziert. Die Eingabe SS Kann man irgendwie vermuten,
wenn man sich das anguckt, dass die Eingabe,
wo der irgendwie S ist. Und dann sagt man,
okay, das hat erst mal endviele Elemente und wahrscheinlich sind das irgendwie Zahlen,
sonst würde man die ja nicht aufsummieren.
Das müsste man normalerweise noch irgendwie wieder zuschreiben. Ich kriege so eine Menge S mit ganz vielen natürlichen Zahlen und das,
was ich mich frage, ist,
kann ich eine Teilmenge von S finden, sodass wenn ich die Elemente aufsummiere,
auf der einen Seite und auf der anderen Seite all die Elemente aufsummiere,
die jetzt eben nicht in meinem gewählten A drin sind,
dass da dann das Gleiche rauskommt.
Also wenn ich die Menge habe, 1, 2,
3, dann kann ich 1, 2 wählen,
das ist aufsummiert 3 und die drei nehmen,
die es aufsummiert, auch 3, super.
Wenn ich 1, 2, 3, 4 nehme,
kriege ich das dahin,
nee,
Doch, 2 und 3 auf der einen Seite und 1
und 4 auf der anderen kriege ich auch hin.
Sollte ja auch klappen. Und die Frage ist halt,
ob es geht. Und jetzt steht hier an dieser Stelle,
also der wichtige Teil ist, dieses für alle Teilmengen von S.
Wie viele Teilmengen von S gibt es?
Ja, ne? Zwei auch N, viele Timing,
weil ich, wenn SN viele Elemente hat,
dann kann ich da einmal rüberlesen und kann für jedes Element sagen,
ist drin oder ist nicht drin.
Also quasi Null oder 1. Und dann habe ich
die Möglichkeiten von alles auf Null und alles auf Einsätzen.
Und das sind halt irgendwie zwei hoch in viele Möglichkeiten
Und danach bilde ich noch diese Summen. Naja, das
tut dann auch irgendwie nicht mehr weh. Also wenn man eh
schon in Exponentialzeit ist, da passiert nichts Schlimmes mehr.
Summen geht ja normalerweise auch sehr schnell, das zu berechnen.
Also ist das Ganze in O von zwei hoch N,
weil ich halt zwei hoch N mal in diese Zeilen zwei bis vier reingehe.
Also die Mehrheit gewinnt knapp. Das meine ich schon,
absolut. Und wenn man das Ganze nicht deterministisch macht,
also Suchraum durchsuchen, nicht deterministisch, gleicher Algorithmus,
Was hat man jetzt von der Laufzeit?
Jetzt kann man nämlich die Nicht-Determinismus ja ausnutzen. An welcher
Stelle tut man das und was hat man jetzt für eine Laufzeit?
Also der Algorithmus, so wie er da steht,
ist jetzt auch wieder so ein bisschen unterspezifiziert.
Man müsste an der richtigen Stelle noch sagen,
wo man den Nicht-Determinismus benutzen will
Musik Wo kommt denn die Mehrheit bei ON
mal Lockeln her
Was? Was ist das da? Achso, ja.
Wer hat den dritten, ist gedrückt? Und möchte
das begründen? Rein aus Interesse. Also ist ja nicht
falsch. Drittens ist, also drittens ist gut,
also mich würde interessieren,
wie auf das Login kommt
Werfund, also es muss ja 14 Leute geben,
die drittens gedrückt haben. Mit ein bisschen Fehlerquote,
weil vielleicht ein paar Kisten aus der Kiste,
da haben vielleicht auch ein paar C gedrückt,
müssten ja mindestens 10 C gedrückt haben.
Jetzt vermuten wir nochmal 50 Prozent wollen sich eines Besseren,
also wollen doch nicht und dann,
es wäre eigentlich jetzt angebracht, einen Brexit-Witz zu machen.
So ein paar Leute wollen jetzt vielleicht doch nicht,
nachdem sie jetzt sich bewusst werden, was sie da gedrückt haben.
Habt ihr, habt ihr das verfolgt am Freitag, diese Brexit-Geschichte?
So, also der Typ von der U-Cap,
der hat es ja hingekriegt, zwei Stunden nach der Wahl, ne?
Also zwei Stunden nach dem, das Wahlergebnis da ist,
hat das hingekriegt zu sagen, Also unser Wahlversprechen haben wir so nicht gemeint.
Geiler Junge. Dass mit diesem großen roten Bus,
wo es so draufsteht, irgendwie dieses ganze Geld,
da schicken wir dann in unser eigenes Gesundheitssystem.
Und dann sagt er so, da müssen wir noch mal
drüber nachdenken, ob wir das wirklich machen.
Das ist ein geiler Typ. Aber am coolsten fand ich eigentlich die Engländer,
so vor allem einige von den jungen Engländern, die dann danach so meinten,
so, ja, ich habe das gewählt aus Protest,
ich habe ja nicht gedacht, dass das funktioniert.
Und die tun mir echt leid. Also irgendwie vor allem
die Jungen, ne? So, zurück zum Thema.
Wer hat denn jetzt ON mal Login gemacht?
Na gut, also hier. Was? Nochmal auf dem Jahr,
genau. Das hier. An der Zeile da oben,
bei dem für alle Art Heimmenge von S. Da könnt ihr
nicht den Terminismus benutzen und ihr ratet für jedes Element aus S. nicht deterministisch,
ob es in A sein soll oder nicht.
Also erstes Element von A, nicht die terministische Verzweigung,
ist drin oder ist nicht. Zweites Element, jeweils zwei
nicht deterministische Verzweigung ist drin oder ist nicht und so weiter.
Dann braucht ihr auf einem Pfad,
wenn ihr jetzt einen Pfad festhaltet,
hat der nur die Länge N,
weil ihr N mal euch nicht deterministisch entschieden habt,
ob ein Element
drin sein soll oder nicht
Ihr habt zwar hier unten so eine Aufsplittung in zwei hochenden,
viele geratene Pfade, aber eine Rechnung hat bis jetzt nur die Länge N.
Und dann macht ihr deterministisch weiter und rechnet hier die beiden Summen
aus und vergleicht die. Und wenn man jetzt beim Uniformen-Mars bleibt,
dann geht das auch mit N vielen Schritten oder das sind ja
endviele Additionen und dann noch einen Vergleich und dann bleibt man in O von N.
Also hier das zweite ist die beste untere Schranke,
die beste obere Schranke, drittens und viertens und fünftens würden ja auch gehen,
sind aber nicht so schön.
Also wird ja immer größer, aber eigentlich ist die Laufzeit
nicht die terministische in O von
Und das Problem, diesen Suchraum zu durchsuchen,
ist damit in NP. Also O-Von-N-Algorithmus, Problem in NP.
Da nochmal zur Nachbereitung. Ja, genau. Haben wir
noch Zeit? Nee, sechstens war zweitens CEO von N.
Nur von N mal Login würde er auch gehen,
ist noch nicht so Schönheitsschranke,
weil er größer ist
Ja, genau. Wir haben noch ein paar Minuten.
Machen wir noch mal kurz die letzten vier, fünf Folien hier.
Schau ich die noch? Ja, ja, ja,
ich habe die noch. Da noch mal diese Klasse P,
ja die machen wir noch mal kurz,
weil wir im Grunde genommen nur das Ergebnis brauchen,
aber dass wir das mal gesehen habt.
Diese Klasse P ist ja so definiert.
Unten steht noch mal, was das bedeutet.
Insbesondere arbeite ich ja nur bei dieser Argumentation mit den Erfolgsrechnungen.
Ich arbeite nur mit den positiven Rechnungen, mit den Ja-Instanzen sozusagen.
Wenn jetzt aber diese Touring-Maschine A die Sprache entscheiden soll,
dann wird für jeden String X der Länge N in ZeitO
von NOK entschieden, ob das gilt oder nicht.
Und was man jetzt eben zeigen kann, ist,
dass es egal ist, ob ich mich nur auf Akzeptanz
beschränke oder ob ich gleich von entscheiden rede.
Die Idee ist, wenn ich weiß, ein Problem ist in P,
dann gibt es also eine PN-zeitbeschränkte Touring-Maschine, die die Sprache akzeptiert.
Jetzt kann ich mir eine andere bauen,
der ich dieses Polynom P quasi mitgebe und am Anfang guckt sie,
wie lang ist die Eingabe,
dann rechnet sie P von N aus und dann macht sie in ihre Rechnung nur genau P von N viele Schritte.
Und wenn sie bis dahin nicht akzeptiert hat,
weiß sie, hey, dann wird auch nicht akzeptiert,
also lehnt sie ab und dann nicht die terministische Tourmaschine kann das genauso machen.
Deswegen kann man bei beiden einfordern, dass man sagt,
wir konzentrieren uns nicht mehr nur aufs Akzeptieren, sondern wir sagen,
jede Rechnung hört nach spätestens P von N vielen Schritten auf.
Beweis einmal kurz, P soll gleich sein,
wie diese Menge hier auf der rechten Seite.
Die Sprache L wird vom Algorithmus und Polinialzeit entschieden.
Richtung von rechts nach links ist klar, wenn L in Polinialzeit entschieden wird,
wird L auch ganz bestimmt im Polinialzeit akzeptiert.
Also bei P ging es ja nur um Akzeptanz.
Jetzt müssen wir zeigen, dass jede Polinialzeit akzeptiert über
der Sprache auch in Polinialzeit entschieden wird. Naja,
und dann legen wir mal los, wenn A,
so ein Algorithmus ist, der L in der Zeit O von Nhochk akzeptiert.
Jetzt wollen wir einen bauen, einen Algorithmus, der L
eben in Polininialzeit entscheidet. Dann wissen wir ja erstmal hier,
es gibt so eine konstante C, sodass A,
die Sprachen höchstens Thema NOK-Schritten akzeptiert
Und ein Algorithmus, der L jetzt entscheidet,
berechnet zunächst meine Eingabe X eben gerade dieses Polynom hier,
dieses 10xN hochk. Und dann simuliert mein neuer Algorithmus A-Strich
den alten eben genau diese Anzahl der Schritte hier.
Und wenn A akzeptiert hat, akzeptieren wir,
wenn A bis hier nicht akzeptiert hat, lehnen wir ab.
Da akzeptieren wir, hat A bis hier nicht akzeptiert, lehnen wir ab.
Und dann entscheiden wir die Sprache. Jetzt halten wir nämlich
wirklich bei jeder Eingabe an und wir machen das auch richtig,
denn A hat die Sprache ja auch akzeptiert,
und zwar mit dieser Zeitschranke N hochk.
Das heißt, nach 10xN hochk-Schritten muss der Algorithmus akzeptieren,
wenn er
denn akzeptieren will
Jetzt muss ich noch einmal, ach so, steht hier gar nicht mehr,
ne? Jetzt muss man sich noch einmal Gedanken machen,
dass es dieser neue Algorithmus A-Strich, der braucht ja länger.
Der muss erst das Polynom ausrechnen und dann auch immer noch mitzählen.
Also braucht er länger, aber er braucht nicht wesentlich länger.
Also dieses Polynom ausrechnen und so weiter,
das geht auch alles in Polynomialzeit, sprich,
das wird ein etwas größeres Polynom, aber nicht weiter tragisch.
Es bleibt also in P. Also das Akzeptieren und Entscheiden.
Gleich und wenn noch mal hier auf die wichtige Anmerkung vor allem hinweisen,
wir gehen dann jetzt immer davon aus, dass wenn wir sagen,
irgendeine Touring-Maschine oder ein Algorithmus hat so eine Zeitschranke TVNN,
dann wollen wir damit ab sofort immer mein
Nach Tee von N vielen Schritten hält er an.
Und insbesondere für unsere beiden sehr relevanten Klassen P und NP
ist das richtig. Ja, kleiner Ausblick,
typisches Beispiel für ein Problem in P. Wir geben Graf,
zwei Knoten, S und T und so eine Zahl K,
suchen wir ein ST-Pfad, der höchstens aus K vielen Kanten besteht.
Das ist kürzeste Pfade suchen im Grunde genommen. Graf gegeben,
Startknoten gegeben, Zielknoten gegeben und eine Schranke,
sodass man nicht mehr Schritte brauchen darf.
Gibt Algorithmen einen P dafür, kann man mit Deixtras Algorithmus
zum Beispiel machen
Dass man da so grob ein O von Endquadrat ein bisschen besser,
aber grob. Wenn man das Problem ein kleines bisschen variiert,
wenn man das so macht, gleich in Eingabeninstanzen irgendwie,
gefragt ist jetzt aber nach dem Pfad von S nach Tee,
der nicht höchstens Karkanten benutzt, sondern mindestens Karkanten.
Das klingt ja fast genauso. Dann wird das Problem deutlich schwieriger.
Also tatsächlich gibt es dafür bisher keinen Algorithmus, der das Impulimalzeit löst.
Also eine ganz kleine Variation, hat skurrile Auswirkungen. Spannend ist an der Stelle aber auch,
und das gucken wir uns morgen nochmal an,
das ist zwar schwierig zu lösen, also zumindest effizient,
aber wenn man so einen Pfad kriegt,
von dem eben behauptet wird, dass der mindestens Karkanten hat,
dann kann ich schnell überprüfen,
ob der tatsächlich die Kriterien erfüllt.
Also wenn ich eine Probleminstanz kriege und eine behauptete Lösung,
kann ich schnell prüfen,
ob das wirklich
eine Lösung ist
Und morgen und nächste Woche werden wir uns damit beschäftigen,
wie man für solche Probleme zeigen kann oder versuchen kann zu zeigen,
dass es tatsächlich keinen effizienten Algorithmus gibt.
Also kein Algorithmus in Polymialzeit. Und wie uns da dann
diese Komplexitätsklasse NP hilft. Genau. Und da nochmal die Zusammenfassung,
morgen werden wir uns vor allem hierrum kümmern, dass wir,
heute haben wir Zeit- und Platzkomplexität eingeführt und morgen werden wir
uns dann nochmal mit P und NP im Detail beschäftigen und dann auch da wieder Grenzen ausloten und gucken,
dass wir eine Technik entwickeln, mit denen wir zeigen können,
dass Probleme nicht effizient gelöst werden können.
So, 1345, ich habe noch Fragen, eins,
zwei, drei Feiern.
Wir sehen das morgen