WEBVTT

00:06.200 --> 00:10.300
Wir kommen damit zu einem wesentlichen anderen oder weiteren Kapitel,

00:10.820 --> 00:16.160
das wir auch noch uns genauer angucken müssen, das mich eigentlich

00:16.160 --> 00:20.640
noch, ich kann nicht sagen noch mehr interessiert, aber es

00:20.640 --> 00:24.800
interessiert mich auf jeden Fall sehr stark, weil dieses Thema

00:24.800 --> 00:30.620
Rechenbarkeit und Komplexität halt ein Thema ist, das sehr stark meine

00:30.620 --> 00:34.620
Forschung charakterisiert, nicht so sehr im Bereich der theoretischen

00:34.620 --> 00:37.460
Untersuchungen zu Berechenbarkeit und Komplexität, sondern mehr in

00:37.460 --> 00:40.600
Bezug auf die konkreten Dinge, die wir mit Rechnern machen können.

00:41.220 --> 00:43.780
Also in diesem Kapitel wollen wir uns fragen, was können wir

00:43.780 --> 00:47.220
prinzipiell mit Rechenanlagen eigentlich bewirken.

00:47.900 --> 00:51.680
Welche Funktionen können wir berechnen und das heißt, was wir uns

00:51.680 --> 00:56.560
anschauen müssen ist, womit arbeiten wir eigentlich im Rechner?

00:56.620 --> 00:59.480
Wir arbeiten mit Algorithmen, kennen Sie alles aus der

00:59.480 --> 01:03.080
Grundlageninformatik 1, Sie wissen, was ein Algorithmus ist, nämlich

01:03.080 --> 01:07.780
ein endlich beschriebenes Verfahren mit Ein- und Ausgabe, das für alle

01:07.780 --> 01:10.320
zulässigen Eingaben nach endlich vielen Schritten hält.

01:11.140 --> 01:13.440
Es gibt viele Charakterisierungen von Algorithmen.

01:13.900 --> 01:17.000
Man kann auch sagen, ein für alle zulässigen Eingaben terminierendes

01:17.000 --> 01:19.200
Programm endlicher Länge auf einem abstrakten Rechner.

01:20.140 --> 01:24.320
Man könnte auch sagen, eine beliebige Turingmaschine ist ein

01:24.320 --> 01:28.180
Algorithmus und genau die Richtung werden wir jetzt weiter vorgehen.

01:28.980 --> 01:31.820
Wir werden uns erstmal anschauen, was die wesentlichen Eigenschaften

01:31.820 --> 01:32.580
nochmal waren.

01:33.260 --> 01:36.880
Wenn wir davon reden, allgemein etwas zu sagen über Algorithmen,

01:36.980 --> 01:40.780
müssen wir etwas wissen, worum es eigentlich geht.

01:41.100 --> 01:44.680
Es darf also insbesondere nicht nur um einen Spezialfall gehen.

01:45.120 --> 01:50.880
Ein Algorithmus, der mir nur Folgen der Länge 27 sortiert mit

01:50.880 --> 01:53.740
bestimmten Inhalten, der ist wertlos.

01:53.740 --> 01:58.880
Ein Algorithmus, ein Verfahren muss immer für eine ganze Problemklasse

01:58.880 --> 01:59.920
anwendbar sein.

02:00.360 --> 02:04.860
Also Sortieralgorithmus muss beliebige Folgen sortieren können oder

02:04.860 --> 02:13.000
zumindest bei Folgen gleicher Länge beliebige Inhalte solcher Werte,

02:13.100 --> 02:13.860
die dort stehen können.

02:14.380 --> 02:17.460
Also eine größere Klasse von Problemausprägungen, es muss etwas

02:17.460 --> 02:21.560
Allgemeinerbares sein, die generell Wissenschaft nur einen Wert hat,

02:21.760 --> 02:24.920
wenn daraus generalisierbare Erkenntnisse gewonnen werden können.

02:25.600 --> 02:30.180
Dann kommt eine weitere Anforderung, die aber etwas kritisch ist.

02:30.980 --> 02:31.700
Determiniertheit.

02:32.260 --> 02:36.940
Determiniertheit wacht, wenn ich den Algorithmus anwende, meinen

02:36.940 --> 02:42.440
Algorithmus A, den wende ich an auf X, dann kommt da irgendeine Lösung

02:42.440 --> 02:43.240
L raus.

02:43.940 --> 02:48.620
Und wenn ich den Algorithmus A nochmal anwende auf X, dann kommt da

02:48.620 --> 02:49.360
wieder L raus.

02:49.700 --> 02:51.740
Selbstverständlich werden Sie sagen, natürlich muss ja so sein.

02:53.620 --> 02:55.360
Das ist auch die übliche Forderung.

02:55.900 --> 02:58.720
Also wiederholte Ausführung des Verfahrens mit gleicher Eingabe führen

02:58.720 --> 02:59.600
zu gleicher Ausgabe.

03:00.080 --> 03:03.200
Es gibt aber Algorithmen, bei denen das nicht so ist.

03:03.560 --> 03:09.360
Wenn Sie würfeln und Sie wollen das Ergebnis haben eines Würfel

03:09.360 --> 03:10.760
-Experiments, das ist ein Algorithmus.

03:11.880 --> 03:15.440
Und Sie wissen, Sie können bei jedem Würfelereignis eine Zahl zwischen

03:15.440 --> 03:16.700
1 und 6 rausbekommen.

03:17.420 --> 03:21.140
Aber wenn Sie mehrfach den gleichen Würfel werfen, werden Sie

03:21.140 --> 03:24.620
unterschiedlich, werden Sie hoffentlich unterschiedliche Ergebnisse

03:24.620 --> 03:27.340
kriegen, damit es auch wirklich ein idealer Würfel ist, der mit

03:27.340 --> 03:29.320
gleicher Wahrscheinlichkeit Ihnen alle Ergebnisse liefert.

03:30.000 --> 03:34.680
Das heißt, manchmal sind wir daran interessiert, etwas randomisiert zu

03:34.680 --> 03:34.940
machen.

03:35.560 --> 03:36.120
Zufällig.

03:37.500 --> 03:40.920
Manchmal nur innerhalb von Algorithmen, manchmal aber ist es so, dass

03:40.920 --> 03:45.080
wir tatsächlich bei randomisierten Algorithmen auch unterschiedliche

03:45.080 --> 03:46.140
Ergebnisse haben wollen.

03:46.780 --> 03:51.700
Das ganze Gebiet der Metaheuristiken mit Tabu-Search oder mit

03:51.700 --> 03:56.880
evolutionären Algorithmen oder diese ganzen naturspirierten

03:56.880 --> 04:01.920
Algorithmen, simulated annealing und so weiter, da wäre es fatal, wenn

04:01.920 --> 04:05.680
jede Ausführung des Algorithmus immer das gleiche Ergebnis liefern

04:05.680 --> 04:06.020
würde.

04:06.960 --> 04:10.800
Da wollen Sie gerade durch Randomisierung erreichen, dass Sie

04:10.800 --> 04:14.520
möglichst den Suchraum weit ausschöpfen.

04:14.940 --> 04:18.940
Das heißt, es gibt Algorithmen, wo Determiniertheit Unsinn wäre.

04:19.660 --> 04:23.400
Trotzdem in einem gewissen Sinne wollen wir sicher sein, dass wir

04:23.400 --> 04:25.400
immer ein vernünftiges Ergebnis bekommen.

04:25.940 --> 04:29.540
Man muss nur wissen, worüber man an den entsprechenden Stellen redet.

04:30.320 --> 04:34.740
Also wenn ich hier, ich schreibe nur das Stichwort auf, EA oder

04:34.740 --> 04:42.040
simulated annealing, das sind so Bereiche, Algorithmen, bei denen man

04:42.040 --> 04:47.100
randomisiert vorgeht und wo halt die Ergebnisse unterschiedlich sein

04:47.100 --> 04:47.780
sollen sogar.

04:48.780 --> 04:51.940
Dann, es gibt übrigens auch Algorithmen, bei denen man nur intern

04:51.940 --> 04:54.780
etwas randomisiert macht, aber das Ergebnis immer determiniert sein

04:54.780 --> 04:55.060
soll.

04:55.440 --> 04:56.500
Das sind noch wieder andere Dinge.

04:56.640 --> 04:59.400
Auch darüber kann man also eine eigene Vorlesung halten, über

04:59.400 --> 05:00.700
Randomisierung in Algorithmen.

05:01.080 --> 05:04.020
Sehr interessante Dinge, hat man viel erreicht in den letzten Jahren,

05:04.480 --> 05:06.280
hat dadurch sehr effiziente Dinge erreichen können.

05:06.360 --> 05:10.840
Ein typisches Beispiel, wo man sehr viel hat erreichen können, durch

05:10.840 --> 05:13.240
Randomisierung ist der Primzahltest.

05:14.120 --> 05:16.580
Randomisierte Algorithmen sind da wahnsinnig schnell, wenn Sie das

05:16.580 --> 05:19.040
deterministisch machen, dauert es sehr lange.

05:20.960 --> 05:23.620
Auch da könnte man einiges zu erzählen, passt aber leider nicht in

05:23.620 --> 05:24.180
diese Vorlesung.

05:24.940 --> 05:26.940
Dann kommt der nächste Begriff, die Endlichkeit.

05:28.220 --> 05:33.100
Wir wollen alles, was wir dort machen, was wir ein Verfahren formal

05:33.100 --> 05:35.200
beschreiben, natürlich auch wirklich hinschreiben können.

05:35.800 --> 05:40.080
Das heißt, die Beschreibung des Verfahrens muss von endlicher Länge

05:40.080 --> 05:40.360
sein.

05:40.420 --> 05:44.300
Ich muss Ihnen ein Blatt Papier geben oder ein Stück Dapel Papier

05:44.300 --> 05:47.780
geben können oder ein ganz langes Band und da drauf muss der gesamte

05:47.780 --> 05:48.480
Algorithmus stehen.

05:49.560 --> 05:53.140
Dann werde ich eine Folge von Schritten ausführen, das müssen alles

05:53.140 --> 05:57.680
effektive Schritte sein, müssen endlicher Zeit ausführbar sein und der

05:57.680 --> 06:02.800
Algorithmus sollte für jede zulässige Eingabe nur endlich viele

06:02.800 --> 06:03.480
Schritte brauchen.

06:04.860 --> 06:07.980
Auch hier muss man ein bisschen genauer hinschauen, es gibt bestimmte

06:07.980 --> 06:13.240
Anwendungen, meinetwegen Betriebssysteme oder dort tauchen solche

06:13.240 --> 06:13.860
Dinge auf.

06:13.960 --> 06:17.420
Da erwarten Sie, dass das Verfahren nicht endet.

06:18.540 --> 06:21.860
Wenn Ihr Algorithmus oder Ihr Rechner immer nach endlich vielen

06:21.860 --> 06:24.500
Schritten aufhören würde zu laufen, wären Sie nicht zufrieden.

06:25.220 --> 06:28.480
Trotzdem sind die einzelnen Operationen, die dort gemacht werden, alle

06:28.480 --> 06:31.920
in endlich vielen Schritten durchführbar und das heißt, man muss genau

06:31.920 --> 06:33.060
gucken, worüber man redet.

06:33.540 --> 06:36.480
Also einen Algorithmus brauche ich, um irgendeinen Teilabschnitt in

06:36.480 --> 06:38.060
solch einem Verfahren zu machen.

06:39.020 --> 06:42.200
Terminiertheit ist ein wichtiger Punkt, war auch gerade bei dem

06:42.200 --> 06:45.180
Kapitel über formale Sprachen jetzt genau der Punkt, dass wir immer

06:45.180 --> 06:48.540
sagten, wir wollen nach endlich vielen Schritten schauen können, was

06:48.540 --> 06:53.820
ist das Ergebnis unserer Frage, kann ich ein Wort erzeugen oder ist

06:53.820 --> 06:56.660
ein Wort in der Sprache, kann ich das entsprechend analysieren, um

06:56.660 --> 07:04.220
herauszufinden, ob das Wort entsprechend von der Grammatik erzeugt

07:04.220 --> 07:05.060
werden kann.

07:05.780 --> 07:09.160
Also das sind diese drei Dinge und jetzt machen wir dazu mal ein paar

07:09.160 --> 07:11.480
Beispiele hier angegeben.

07:11.820 --> 07:14.840
Sortierverfahren, das ist selbstverständlich ein allgemeines

07:14.840 --> 07:18.480
Verfahren, das terminiert immer, wir sind auch normalerweise

07:18.480 --> 07:22.280
determiniert, ich habe immer das gleiche sortierte Ergebnis am Ende.

07:22.960 --> 07:26.140
Bei Berechnung kürzester Wege ist es ebenso für beliebige Graphen,

07:26.860 --> 07:29.840
aber wenn sie sich anschauen, die realen Algorithmen, ihre

07:29.840 --> 07:32.480
Navigationssysteme im Fahrzeug, wenn sie verschiedene

07:32.480 --> 07:35.780
Navigationssysteme haben, da werden die Ergebnisse bezüglich der

07:35.780 --> 07:39.560
kürzesten Wege unterschiedlich aussehen, weil die mit Approximationen

07:39.560 --> 07:42.660
arbeiten, die nehmen nicht das gesamte Straßennetz dort mit rein,

07:42.660 --> 07:46.140
machen bestimmte heuristische Annahmen und so hat man auf einmal hier,

07:46.720 --> 07:50.960
wenn man in der Realität guckt, manchmal unterschiedliche Ergebnisse.

07:51.440 --> 07:54.360
Wenn ich aber sage, ich möchte auf jeden Fall kürzeste Wege berechnen,

07:54.420 --> 07:58.140
kann ich das machen für einen beliebigen Graphen, auch im Straßennetz

07:58.140 --> 07:59.540
und kriege den kürzesten Weg raus.

08:00.400 --> 08:03.560
Reduktion endlicher Automaten, wissen Sie auch, ist ein schönes

08:03.560 --> 08:04.240
Verfahren.

08:05.080 --> 08:08.320
Die Transformation kontextfreier Grammatik, Kellerautomaten, haben wir

08:08.320 --> 08:10.900
auch gesehen, wie das funktioniert oder die Syntaxanalyse einer

08:10.900 --> 08:14.520
kontextfreien Grammatik, der Koki-Yanga-Kasami-Algorithmus, auch den

08:14.520 --> 08:15.080
kennen Sie.

08:15.460 --> 08:18.280
Das war alles kein Problem, das sind schöne Algorithmen.

08:19.080 --> 08:21.620
Randomisierte Algorithmen, hatte ich Ihnen schon gerade eben kurz

08:21.620 --> 08:22.560
angesprochen.

08:23.300 --> 08:27.680
Primzahltest, brauchen Sie, wann immer Sie ein Schlüsselpaar erzeugen

08:27.680 --> 08:33.020
wollen für die typischen Public-Key-Verfahren, also bei dem mit

08:33.020 --> 08:35.660
öffentlichem Schlüssel, brauchen Sie ein Paar von öffentlichem und

08:35.660 --> 08:39.180
geheimen Schlüssel und das Wesentliche dabei ist eine große Zahl, die

08:39.180 --> 08:42.900
das Produkt von zwei Primzahlen ist, von zwei sehr großen Primzahlen.

08:43.020 --> 08:45.960
Das heißt, Sie müssen hierfür sehr, sehr große Zahlen, Zahlen mit

08:45.960 --> 08:51.740
irgendwie mehreren tausend Bit, müssen Sie überprüfen können,

08:52.400 --> 08:57.760
inwieweit solch eine Zahl N irgendwie das Produkt ist von zwei Zahlen

08:57.760 --> 08:58.460
P und Q.

08:58.620 --> 08:59.640
Das ist ein Faktorisierungsproblem.

09:00.300 --> 09:04.240
Das können Sie deterministisch zum Glück nur in sehr, sehr, sehr, sehr

09:04.240 --> 09:06.320
langer Zeit herausfinden, sehr aufwendig.

09:06.600 --> 09:12.360
Können Sie natürlich raten, da könnten Sie Glück haben, aber so eine

09:12.360 --> 09:15.820
Zahl faktorisieren ist sehr aufwendig und Sie müssen, um also solche

09:15.820 --> 09:20.020
Zahlen zu erzeugen, wie diese Zahl N, solche Primzahlen erstmal haben

09:20.020 --> 09:23.280
und Sie müssen dann, Sie suchen sich eine beliebige Zahl und müssen

09:23.280 --> 09:24.980
feststellen, ist das eigentlich eine Primzahl?

09:26.200 --> 09:28.800
Also eine Zahl mit 500 Bit, wollen Sie feststellen, ist das eine

09:28.800 --> 09:29.300
Primzahl?

09:29.400 --> 09:33.200
Und das können Sie halt randomisiert sehr effizient machen, war ein

09:33.200 --> 09:37.140
ganz wichtiger Algorithmus und der ist also ganz wichtige Grundlage

09:37.140 --> 09:43.140
dafür, dass man effizient tatsächlich sich die Schlüssel für Public

09:43.140 --> 09:46.800
-Key -Verfahren erzeugen kann, wenn Sie also mit PGP oder so sich

09:46.800 --> 09:50.280
selbst ein Schlüssel erzeugen, dann laufen genau solche Verfahren dort

09:50.280 --> 09:50.460
ab.

09:51.140 --> 09:53.800
Evolutionäre Algorithmen, Ameisen- Algorithmen, Particles-Form

09:53.800 --> 09:59.580
-Optimization, alles Themen, die wir in unserer Vorlesung, Nature

09:59.580 --> 10:07.180
-Inspired -Optimization machen, eine Vorlesung, die im Augenblick

10:07.180 --> 10:10.740
angeboten wird von Frau Moster-Gehm und Herrn Schukler, da tauchen

10:10.740 --> 10:13.480
solche Verfahren auf, aber auch in anderen Bereichen, auch im

10:13.480 --> 10:17.100
Operations - Research werden solche Verfahren behandelt.

10:17.120 --> 10:17.340
Z.B.

10:17.420 --> 10:21.700
in den Liegelingen natürlich auch, das kennen Sie vielleicht aus dem

10:21.700 --> 10:22.460
Operations -Research.

10:24.060 --> 10:28.640
Also nochmal zu den Algorithmen, das waren alles bisher

10:28.640 --> 10:30.900
Beschreibungen, die waren nicht formal.

10:31.060 --> 10:33.820
Ich habe gesagt, so naja, wie man beschreibt das so, endliches

10:33.820 --> 10:35.100
Verfahren und so weiter.

10:36.440 --> 10:40.900
Hier steht also nur eine Problemklasse ist uns gegeben, eine, das ist

10:40.900 --> 10:45.480
die Menge aller Problemausprägungen, Probleminstanzen, L, die Menge

10:45.480 --> 10:49.060
der Lösungen zu den Problemen aus dieser allgemeinen Klasse, also A

10:49.060 --> 10:52.620
soll hier stehen für allgemeine Problemklasse und jetzt brauchen wir

10:52.620 --> 10:54.840
einen Algorithmus AP zu der Klasse.

10:55.580 --> 11:00.220
Das ist ein allgemeines Verfahren, welches auf richtige Anfangsdaten A

11:00.220 --> 11:02.600
aus A angewendet, also A aus A.

11:02.700 --> 11:04.460
Was ist denn ein kleiner A aus Groß A?

11:05.560 --> 11:08.900
Die Menge konkreter Problemausprägungen, das heißt, das ist jeweils

11:08.900 --> 11:09.680
ein kleines A.

11:10.660 --> 11:15.940
Jede Problemausprägung beim Sortierproblem, jede zu sortierende Liste

11:15.940 --> 11:19.620
ist eine solche Problemausprägung und das allgemeine Problem ist halt

11:19.620 --> 11:20.760
das Sortierproblem.

11:21.980 --> 11:24.840
Nach endlich vielen elementaren Schritten hält und die Lösung L A aus

11:24.840 --> 11:25.260
L liefert.

11:25.460 --> 11:30.920
Sehr intuitiv aufgeschrieben und das heißt, wir sagen jetzt einfach AP

11:31.600 --> 11:35.340
bildet jedes Element aus dieser Problemklasse A ab auf die

11:35.340 --> 11:36.340
entsprechende Lösung.

11:37.460 --> 11:39.020
Sofern ist das eine Art Funktion.

11:40.120 --> 11:42.440
Sofern das determiniert ist, ist es eine Funktion, ansonsten wird das

11:42.440 --> 11:43.020
nur eine Relation.

11:43.760 --> 11:46.380
Ist aber keine präzise Definition.

11:46.720 --> 11:47.920
Wie kann ich das präzisieren?

11:48.000 --> 11:52.600
Das war die Frage, die sich Church und Turing zum Beispiel gestellt

11:52.600 --> 11:54.560
haben in den 30er Jahren.

11:55.340 --> 11:59.340
Eine Möglichkeit ist halt, genau das mit einem Modell zu machen,

11:59.740 --> 12:02.400
nämlich mit der Turing-Maschine.

12:02.540 --> 12:05.000
Darauf kommen wir noch gleich oder etwas später wieder zurück.

12:05.960 --> 12:09.960
Was uns interessiert ist also, was kann ich, das eine waren die

12:09.960 --> 12:12.960
Probleme, die ich lösen möchte und jetzt sage ich, ich möchte im

12:12.960 --> 12:16.360
Rechner ja auch etwas rechnen, ich möchte Funktionen ausführen, ich

12:16.360 --> 12:20.180
möchte, wenn ich hier mein Anfangsband anschaue, bei einer Turing

12:20.180 --> 12:24.560
-Maschine irgendein Wort, das hier gegeben ist, überführen, irgendwie

12:24.560 --> 12:28.240
in eine Inschrift, die etwas anders aussieht, meinetwegen V.

12:29.700 --> 12:33.420
Und das soll das Ergebnis sein, die Anwendung einer Funktion F.

12:34.380 --> 12:40.460
Das heißt, ich möchte im Prinzip für irgendeine Teilmenge von Wörtern

12:40.460 --> 12:46.800
über meinem Eingabealphabet irgendeine Funktion berechnen, die mir

12:46.800 --> 12:50.800
also angesetzt auf ein Wort W, ein Wort V liefert.

12:51.580 --> 12:57.160
Das ist also jetzt die Frage, kann ich das machen mit einem

12:57.160 --> 12:57.820
Algorithmus.

12:57.980 --> 13:01.880
Also so eine Funktion wäre berechenbar, wenn es einen Algorithmus

13:01.880 --> 13:08.580
gibt, der jedes Element aus der Problemklasse M1 geeignet zu einer

13:08.580 --> 13:09.620
Lösung führt.

13:09.980 --> 13:12.320
Die Lösung wäre das entsprechende Element aus M2.

13:13.100 --> 13:16.320
Also AF von W gleich F von W für alle W aus M1.

13:16.660 --> 13:19.040
Das wäre dann eine berechenbare Funktion.

13:19.180 --> 13:23.500
Das heißt, die Funktion ist dann berechenbar, wenn ich zu F ein

13:23.500 --> 13:25.680
Algorithmus AF finden kann.

13:27.880 --> 13:34.720
Beispiel, ich habe die Menge der Dezimalziffern 0 bis 9 und eine

13:34.720 --> 13:40.460
Sprache von die folgendermaßen aussieht.

13:40.560 --> 13:44.660
Da ist die Null drin und alle Wörter, die mit Ziffern 1 bis 9 anfangen

13:44.660 --> 13:46.760
und danach irgendwelche weiteren Ziffern haben.

13:47.640 --> 13:54.220
Das hier ist eine Abbildung, das sind beliebige Teilmengen von E

13:54.220 --> 13:54.560
-Stern.

13:55.820 --> 14:02.000
Hier ist es so, dass ich diese Wörter natürlich schreiben kann auf das

14:02.000 --> 14:02.360
Band.

14:03.000 --> 14:06.720
Ich kann sogar eine direktive Abbildung angeben, die mir jedes Wort

14:06.720 --> 14:09.960
dieser Sprache abbildet auf N-Null.

14:10.860 --> 14:17.160
N-Null ist nun eine andere, ich kann also jedes Wort auf diese Art und

14:17.160 --> 14:20.420
Weise mit natürlichen Zeichen oder mit natürlichen Zahlen

14:21.700 --> 14:22.300
identifizieren.

14:22.520 --> 14:26.200
Kann ich direktiv abbilden und es ist klar, wie man das macht.

14:26.300 --> 14:31.200
Man interpretiert halt einfach irgend so eine Folge 1, 0, 3, 7.

14:31.820 --> 14:35.860
Eine Folge von Digitalziffern als eine natürliche Zahl.

14:36.480 --> 14:40.200
Wie man das macht, wissen Sie, Stellenwert, Geschichten und ähnliches,

14:40.300 --> 14:45.740
7 plus 3 mal 10 plus 0 mal 100 plus 1 mal 1000, das ist dann genau die

14:45.740 --> 14:46.760
Zahl 1037.

14:47.580 --> 14:53.420
Auf die Art und Weise kann man also daraus Zahlen machen und

14:53.420 --> 14:59.580
berechenbare Funktionen jetzt auf der Menge natürlicher Zahlen, die

14:59.580 --> 15:03.540
ich jetzt jeweils, hier steht jetzt jeweils N-Null, stelle also die

15:03.540 --> 15:07.760
Zahlen aus N-Null, dadurch solche Folgen von Ziffern.

15:07.820 --> 15:10.980
Das kann ich mir anschauen, welche Funktionen berechenbar sind.

15:11.420 --> 15:16.120
Zum Beispiel die Funktion, die mir gerade die nächstgrößere Zahl

15:16.120 --> 15:18.300
liefert, von N auf N plus 1.

15:18.940 --> 15:21.380
Da hatten wir sogar einen Algorithmus uns angeschaut, das war der

15:21.380 --> 15:27.320
Algorithmus mit einer Turing-Maschine, um eine Zahl um 1 zu erhöhen.

15:27.380 --> 15:29.120
Den hatte ich Ihnen schon gezeigt, und zwar auf einer

15:29.120 --> 15:30.020
Binärdarstellung.

15:30.980 --> 15:34.900
Da hatten wir nicht die Darstellung über Nullen bis beliebige

15:34.900 --> 15:36.840
Dezimalziffern, da hatten wir nur Binärziffern genommen.

15:38.060 --> 15:42.580
Dann kann ich mir einen Algorithmus überlegen, der irgendeine

15:42.580 --> 15:46.260
beliebige natürliche Zahl als Eingabe bekommt und er soll mir liefern,

15:46.380 --> 15:47.100
ja oder nein.

15:48.200 --> 15:51.420
Und zwar ja, wenn das N eine Primzahl ist und nein, wenn es keine

15:51.420 --> 15:52.120
Primzahl ist.

15:52.520 --> 15:55.120
Hatte ich gerade eben etwas darüber erwähnt, dass man das

15:55.120 --> 15:56.160
unterschiedlich machen kann.

15:56.640 --> 15:57.900
Offensichtlich kann man das berechnen.

15:58.100 --> 16:01.460
Es braucht ja nur zu sehen, ob irgendeine kleinere Zahl ein Teiler

16:01.460 --> 16:02.260
dieser Zahl ist.

16:03.540 --> 16:09.640
Oder ich möchte gerne für zwei Zahlen feststellen, was der größte

16:09.640 --> 16:10.640
gemeinsame Teiler ist.

16:11.580 --> 16:17.140
Also die EGT-Funktion, auch das wäre eine Funktion, bei der wir

16:17.140 --> 16:21.920
wissen, wie das geht, können wir also problemlos machen.

16:22.260 --> 16:25.680
Gibt es einfache Verfahren für, der Algorithmus ist Ihnen lange

16:25.680 --> 16:26.100
bekannt.

16:27.480 --> 16:32.920
Wie ich also den größten gemeinsamen Teiler von zwei Zahlen finde, für

16:32.920 --> 16:34.040
den Euclidischen Algorithmus.

16:35.080 --> 16:38.720
Dann weiß ich etwas über Berechenbarkeit.

16:39.800 --> 16:44.280
Ich möchte darauf kommen, dass wir irgendwann zu einem formalen Modell

16:44.280 --> 16:47.580
kommen für berechenbare Funktionen.

16:48.220 --> 16:51.540
Zunächst mal mache ich aber noch ein bisschen auf diesem intuitiven

16:51.540 --> 16:55.840
Begriff weiter und wir stellen uns ein paar Fragen.

16:56.640 --> 17:01.320
Eine Frage ist, ob jede Funktion von N nach N berechenbar ist.

17:02.340 --> 17:05.380
Also jede Funktion auf natürlichen Zahlen, die wieder eine natürliche

17:05.380 --> 17:07.360
Zahl liefert, ist die berechenbar?

17:08.440 --> 17:10.160
Und das schauen wir uns gleich an.

17:11.000 --> 17:14.680
Dazu muss ich Ihnen aber noch einen Begriff formulieren, den Sie noch

17:14.680 --> 17:17.100
nicht kennen, vielleicht nicht kennen, vielleicht haben Sie den in der

17:17.100 --> 17:18.440
Mathematik schon mal kennengelernt.

17:19.100 --> 17:22.680
Ich möchte mir anschauen, ein Begriff, der hat etwas zu tun mit

17:22.680 --> 17:24.560
abzählbar und überabzählbar.

17:25.100 --> 17:31.420
Ich nenne eine Menge M abzählbar, wenn M injektiv in N abbildbar ist.

17:32.380 --> 17:36.560
Also ich habe hier meine Menge M und hier habe ich meine natürlichen

17:36.560 --> 17:36.960
Zahlen.

17:38.040 --> 17:41.520
1, 2, 3, 4, 5, 6 und so weiter.

17:41.640 --> 17:44.880
Ich möchte mir irgendein Element hier hernehmen und das abbilden auf

17:44.880 --> 17:45.500
irgendeine Zahl.

17:45.620 --> 17:47.680
Anderes Element, auch abbilden auf irgendeine Zahl.

17:47.820 --> 17:50.680
Noch ein Element, auch abbilden auf irgendeine Zahl.

17:51.540 --> 17:58.260
Die Anforderung ist, ich kann M injektiv in N abbilden, sodass also

17:58.260 --> 18:04.200
keine zwei Elemente von M auf die gleiche Zahl abgebildet werden.

18:05.320 --> 18:11.820
Also, nehmen wir folgende Menge her, zum Beispiel diese Menge, die nur

18:11.820 --> 18:12.760
ein Element enthält.

18:13.940 --> 18:17.220
Da werden Sie mir sofort viele Abbildungen nennen können, mit denen

18:17.220 --> 18:20.320
ich dieses Element abbilden kann, zum Beispiel A auf 1.

18:20.700 --> 18:21.980
Fertig, abzählbar.

18:22.860 --> 18:27.880
Ich nehme die Menge 1, 2, 3 bis 10.

18:29.620 --> 18:32.380
Auch die kann ich problemlos abbilden, die Menge natürlichen Zahlen,

18:33.280 --> 18:34.380
für eine identische Abbildung.

18:35.580 --> 18:36.900
Injektiv, ganz leicht zu machen.

18:38.740 --> 18:42.680
Ich nehme die Menge E-Stern.

18:45.120 --> 18:48.880
Die Menge aller Wörter über dem Alphabet E.

18:50.340 --> 18:52.940
Dann nehme ich das ehre Wort Lambda.

18:53.400 --> 18:55.080
Nehmen wir mal an, dass E ist 0,1.

18:57.120 --> 18:59.680
Nehmen wir an, dass wäre die Menge 0,1.

19:00.180 --> 19:03.040
Dann würden wir hier 0 hinschreiben, wir würden 1 hinschreiben, wir

19:03.040 --> 19:08.580
würden 0,0 hinschreiben, wir würden 0,1 hinschreiben, 1,0, 1,1 und so

19:08.580 --> 19:08.900
weiter.

19:09.100 --> 19:10.500
Dann vielleicht 0,0,0.

19:12.040 --> 19:14.960
Das können wir ja daran gehen, einfach in der Folge.

19:15.080 --> 19:17.200
Sie sehen, ich habe das ganz systematisch aufgeschrieben.

19:17.980 --> 19:23.320
Immer Wörter wachsender Länge und innerhalb der Wörter gleicher Länge,

19:23.460 --> 19:25.120
so eine lexikografische Ordnung.

19:26.300 --> 19:28.400
Das kann ich ja ganz systematisch aufschreiben.

19:28.500 --> 19:32.340
Da habe ich eine Folge von Wörtern und das kann ich natürlich einfach

19:32.340 --> 19:35.700
sagen, das ist die erste Position, die zweite, die dritte, die vierte,

19:35.800 --> 19:37.760
die fünfte, die sechste und so weiter.

19:38.320 --> 19:40.980
Ich kann doch jedem Wort hier drin, entsprechend der Position in

19:40.980 --> 19:44.180
dieser Folge, eine Zahl zuordnen.

19:44.880 --> 19:46.040
Also das geht offensichtlich.

19:46.800 --> 19:48.660
Es muss ja nur injektiv sein.

19:50.940 --> 19:55.460
Okay, wenn das nicht geht, dann ist das M überabzählbar.

19:55.940 --> 20:01.440
Wenn ich also nicht eine solche Abbildung angeben kann, sodass ich

20:01.440 --> 20:08.220
jedem Element der Menge eine andere natürliche Zahl zuordne, dann ist

20:08.220 --> 20:09.380
das überabzählbar.

20:10.800 --> 20:13.780
Ich habe doch unendlich viele Zahlen, da kann ich jede Menge

20:13.780 --> 20:15.220
reinschreiben, gar kein Problem.

20:15.220 --> 20:16.660
Sie werden sehen, das ist nicht so einfach.

20:18.120 --> 20:21.240
Abzählbare Mengen, jede endliche Menge habe ich Ihnen gerade eben

20:21.240 --> 20:24.800
angedeutet oder A-Stern für ein endliches Alphabet habe ich Ihnen auch

20:24.800 --> 20:25.680
gerade angedeutet.

20:26.620 --> 20:31.540
Und überabzählbare Mengen, zum Beispiel die Menge aller reellen Zahlen

20:31.540 --> 20:32.440
zwischen 0 und 1.

20:34.200 --> 20:35.500
Nicht abzählbar.

20:36.120 --> 20:39.080
Kann man beweisen über Diagonalisierung.

20:40.260 --> 20:42.380
Jetzt wissen Sie gar nicht, was Diagonalisierung ist, ich werde Ihnen

20:42.380 --> 20:47.840
gleich einen Diagonalisierungsbeweis vorführen, bei dem Sie sehen, was

20:47.840 --> 20:48.320
man da macht.

20:48.680 --> 20:49.840
Potenzmenge von A-Stern.

20:50.540 --> 20:56.820
Also wenn ich alle Sprachen betrachte, über einem Alphabet, dann bin

20:56.820 --> 20:57.660
ich überabzählbar.

20:58.240 --> 20:59.700
Ebenfalls durch Diagonalisierung.

21:00.880 --> 21:03.320
Auch das könnte ich Ihnen explizit vorführen.

21:04.040 --> 21:06.400
Ich will aber diese Frage hier genau anschauen gleich.

21:08.480 --> 21:12.720
Ich will dazu kommen, dass nicht jede Funktion berechenbar sein kann.

21:13.160 --> 21:16.480
Und es geht genau darüber, das werden Sie gleich sehen, dass wir

21:16.480 --> 21:21.060
einsehen werden, die berechenbaren Funktionen sind eine abzählbare

21:21.060 --> 21:25.520
Menge, während die Funktionen insgesamt von N nach N eine

21:25.520 --> 21:27.000
überabzählbare Menge sind.

21:28.140 --> 21:32.420
Also, der Satz, den ich Ihnen jetzt zeigen möchte, oder Ihnen

21:32.420 --> 21:35.720
darstellen möchte, oder erläutern möchte, oder verständlich machen

21:35.720 --> 21:42.180
möchte, ist, dass für ein Alphabet E die Menge aller Funktionen F von

21:42.180 --> 21:44.700
E -Stern nach E-Stern überabzählbar ist.

21:45.880 --> 21:50.780
Und das zweite, die Menge aller berechenbaren Funktionen nur abzählbar

21:50.780 --> 21:51.440
sein kann.

21:51.440 --> 21:57.020
Das heißt, nur eine kleine Teilmenge, klein in Anführungszeichen,

21:57.200 --> 22:04.560
immer noch unendlich groß, von Funktionen über E-Stern ist

22:04.560 --> 22:05.260
berechenbar.

22:07.820 --> 22:10.940
Insbesondere heißt das, nicht jede Funktion ist berechenbar.

22:11.080 --> 22:13.720
Es gibt sehr, sehr viele nicht berechenbare Funktionen.

22:13.720 --> 22:16.360
Das heißt, wir müssen genauer gucken, wenn ich Ihnen eine Aufgabe

22:16.360 --> 22:21.380
gebe, dann sollten Sie schon wissen, naja, das werden alles

22:21.380 --> 22:25.400
berechenbare Probleme sein oder entscheidbare Probleme, bei denen man

22:25.400 --> 22:28.100
tatsächlich eine Lösung in endlicher Zeit erzeugen kann.

22:29.020 --> 22:30.160
Deswegen ist das wichtig.

22:31.620 --> 22:36.100
Oder wenn Sie ein Problem bekommen und Sie wissen, Sie bewerben sich

22:36.100 --> 22:40.260
um irgendeine Ausschreibung, tolle Aufgabe ist ausgeschrieben, gibt es

22:40.260 --> 22:43.600
viel Geld für, wenn Sie da feststellen, da ist aber ein Problem drin,

22:43.680 --> 22:46.640
das ist gar nicht in der Form berechenbar, dann sollten Sie kein

22:46.640 --> 22:47.500
Angebot abgeben.

22:49.200 --> 22:53.440
Weil Sie dann die Aufgabe gar nicht erfüllen können.

22:54.900 --> 22:57.520
Also Sie müssen schon wissen, wie man sowas charakterisieren kann.

22:58.340 --> 23:03.200
Und das ist nicht etwas, was nur irgendwo esoterisch ein Problem ist,

23:03.200 --> 23:04.420
was nie in der Praxis auftaucht.

23:05.080 --> 23:08.260
Schauen wir uns das Beispiel an, das wir betrachten wollen.

23:09.020 --> 23:13.100
Wir betrachten diese Tabelle, wir wollen zeigen, die Menge der

23:13.100 --> 23:20.900
Funktionen von E-Stern nach E-Stern ist überabzählbar.

23:21.860 --> 23:26.540
Dann nehmen wir einfach an, das Ganze wäre abzählbar.

23:26.640 --> 23:30.760
Das heißt, wir betrachten diese Tabelle, bei der wir, das kommt jetzt

23:30.760 --> 23:34.580
gleich, also erstmal folgendes machen, wir schreiben einfach alle

23:34.580 --> 23:37.580
Wörter hin, über dem Alphabet E.

23:38.760 --> 23:41.860
Also das ist hier unser gesamtes E-Stern.

23:43.440 --> 23:46.080
Ich schreibe alle Wörter hin, ich habe Ihnen gerade erläutert, wie das

23:46.080 --> 23:46.700
funktioniert.

23:47.360 --> 23:50.620
Ich kann die ja einfach der Reihe nach aufschreiben und wenn ich

23:50.620 --> 23:55.060
irgendein Wort habe, von dem ich wissen will, welche Nummer hat das

23:55.060 --> 23:58.300
eigentlich, dann brauche ich ja nur der Reihe nach durchzulaufen, alle

23:58.300 --> 24:02.180
Wörter bis zu der Länge anzugucken, die alle durchzählen, habe dann

24:02.180 --> 24:03.260
die Nummer für dieses Wort.

24:04.140 --> 24:07.020
Das ist also, offensichtlich ist sowas machbar.

24:07.940 --> 24:12.240
Und jetzt nehme ich einfach an, ich kann ja einfach auflisten, alle

24:12.240 --> 24:12.880
Funktionen.

24:12.880 --> 24:21.060
Und ich nehme an, ich habe eine abzählbare Menge von Funktionen.

24:21.520 --> 24:27.140
Wenn die abzählbar sind, dann kann ich F1, F2, F3 usw.

24:27.240 --> 24:28.260
ja irgendwie hinschreiben.

24:30.880 --> 24:35.740
Wenn ich diese Abbildung habe, in die Menge der natürlichen Zahlen,

24:36.640 --> 24:41.140
dann kann ich doch genau solche Funktionen F1, F2, F3 der Reihe nach

24:41.140 --> 24:41.580
hinschreiben.

24:42.220 --> 24:44.780
Und jetzt definiere ich eine weitere Funktion.

24:45.800 --> 24:49.820
Ich definiere eine Funktion G von E-Stern nach E-Stern auf folgende

24:49.820 --> 24:50.500
Art und Weise.

24:50.620 --> 24:53.060
Und jetzt kommt der Diagonalisierungsansatz.

24:54.020 --> 24:59.920
Ich betrachte nämlich gerade die Elemente auf der Diagonalen usw.

25:01.300 --> 25:02.520
Inwiefern betrachte ich die?

25:02.520 --> 25:07.180
Ich schaue mir an, das I-te Wort WI bzw.

25:07.400 --> 25:14.140
irgendein Wort W aus meinem E-Stern hat irgendeine Nummer, meinetwegen

25:14.140 --> 25:14.460
I.

25:15.220 --> 25:17.940
Jetzt schaue ich mir an, wie es G auf diesem WI definiert.

25:19.560 --> 25:25.740
Dieses G auf WI ist gleich U, wobei U irgendein Wort aus der Sprache E

25:25.740 --> 25:26.420
-Stern ist.

25:26.420 --> 25:32.960
Falls das FI von WI, also der entsprechende Eintrag auf der Diagonalen

25:32.960 --> 25:36.560
mit dem Index I, ungleich U ist.

25:37.080 --> 25:41.260
Ich kann ja nachschauen, diese ganzen Felder hier in der Diagonalen,

25:41.380 --> 25:42.040
wie die aussehen.

25:42.140 --> 25:45.160
Ich nehme irgendein Wort W, das hat einen Index I.

25:45.820 --> 25:52.960
Schaue ich nach, das fällt I, da steht drin das Wort FI von WI.

25:52.960 --> 25:57.760
Wenn das ungleich U ist, dann sage ich, das G, das soll aber jetzt

25:57.760 --> 25:58.920
genau den Wert U haben.

25:59.460 --> 26:01.740
Damit ist G also unterschiedlich von FI.

26:04.260 --> 26:10.820
Und wenn das FI von WI gleich U ist, dann nehme ich einfach ein

26:10.820 --> 26:11.640
anderes Wort.

26:12.280 --> 26:16.460
Und ich nehme an, es gibt mindestens zwei unterschiedliche Wörter in E

26:16.460 --> 26:16.680
-Stern.

26:17.600 --> 26:18.500
Mehr brauche ich dafür nicht.

26:21.400 --> 26:28.620
Jetzt weiß ich, G ist definiert für alle Wörter aus E-Stern.

26:29.280 --> 26:30.320
Liebiges Wort.

26:31.040 --> 26:34.720
Ich schaue mir an, auf welche Nummer, welche natürliche Zahl wird

26:34.720 --> 26:35.500
dieses Wort abgebildet.

26:37.580 --> 26:40.080
Das W kann ich ja einfach suchen.

26:40.080 --> 26:45.540
Ich gehe in die entsprechende Diagonale, in das Feld I, I.

26:46.400 --> 26:48.600
Schaue nach, welches Wort steht dort.

26:48.940 --> 26:53.400
Steht dort das U drin, dann ist das G von WI gleich V.

26:53.620 --> 26:57.080
Steht dort nicht U drin, dann ist das G von WI gleich U.

26:58.800 --> 27:03.920
Und jetzt haben wir also eine Funktion, die eine Diagonalisierung

27:03.920 --> 27:05.720
dieser Tabelle darstellt.

27:06.470 --> 27:10.060
Ich gebe eben hier, diese Funktion ist definiert genau über diese

27:10.060 --> 27:13.740
markierten Felder, eine Diagonalisierungsfunktion.

27:14.340 --> 27:16.840
Ein Standardverfahren, mit dem man viele interessante Sachen zeigen

27:16.840 --> 27:17.180
kann.

27:18.080 --> 27:21.720
Und jetzt nehme ich an, dass F abzählbar ist.

27:21.900 --> 27:28.000
Das heißt, wenn das abzählbar ist, dann gibt es natürlich eine

27:28.000 --> 27:32.480
Funktion FK, die gleich dem G sein muss.

27:32.480 --> 27:37.960
Wenn es abzählbar ist, ja diese Funktion ist ja berechenbar, dazu

27:37.960 --> 27:38.480
kommen wir noch.

27:40.840 --> 27:43.240
Um Berechenbarkeit geht es hier nicht, es geht nur um Abzählbarkeit.

27:43.440 --> 27:44.920
Es ist ja eine der Funktionen.

27:45.480 --> 27:48.760
Es geht um alle Funktionen von E-Stern nach E-Stern.

27:49.440 --> 27:50.960
Das war das große F.

27:51.980 --> 28:04.370
Die Menge aller Funktionen von E-Stern nach E-Stern.

28:07.860 --> 28:13.200
Wenn es abzählbar ist, dann ist insbesondere diese Funktion G, das ist

28:13.200 --> 28:15.940
ja auch eine Funktion von E-Stern nach E-Stern, die wir gerade

28:15.940 --> 28:19.000
definiert haben, ist dann irgend ein solches FK.

28:19.700 --> 28:22.620
Irgendeine natürliche Zahl ist zugeordnet.

28:22.960 --> 28:31.340
Das heißt, das FK muss natürlich auch auf das WK anwendbar sein.

28:31.460 --> 28:33.740
Ich schaue also nach bei FK von WK.

28:35.280 --> 28:40.100
Und da das G gleich FK ist, muss natürlich G von WK gleich FK von WK

28:40.100 --> 28:40.400
sein.

28:41.290 --> 28:47.300
Wir haben aber hier gerade festgelegt, dass die Funktion G immer

28:47.300 --> 28:52.880
gerade unterschiedlich ist von dem Eintrag in einem Diagonalelement.

28:53.960 --> 28:56.900
Also G ist garantiert unterschiedlich von FK WK.

28:57.760 --> 28:59.240
Hiernach müsste es aber gleich sein.

28:59.800 --> 29:04.760
Und das heißt, dass G kann nicht gleich FK sein und damit heißt das,

29:05.360 --> 29:09.260
diese Annahme F ist abzählbar, die muss irgendwie falsch sein.

29:13.580 --> 29:15.360
Das Verfahren ist sehr abstrakt.

29:15.820 --> 29:17.540
Richtig, da haben Sie recht.

29:18.780 --> 29:20.180
Allerdings auch sehr konkret.

29:20.880 --> 29:24.080
Ich kann Ihnen genau angeben, wie ich Wörter anordne.

29:24.800 --> 29:28.220
Wenn ich also die 0, wenn ich da 0,1 habe, ich kann Ihnen alle

29:28.220 --> 29:34.280
Abbildungen angeben von Binärwörtern auf irgendwelche Binärwörter.

29:35.100 --> 29:38.140
Und das Ganze ist natürlich in dem Sinne abstrakt, dass das ein

29:38.140 --> 29:40.340
Argument ist.

29:41.000 --> 29:48.740
Ich nehme an, dass F ist abzählbar, dann muss es zu jeder Funktion da

29:48.740 --> 29:52.000
drin eine natürliche Zahl geben, weil es abzählbar ja heißt.

29:52.920 --> 29:56.020
Jedes Element kann auf eine natürliche Zahl eindeutig abgebildet

29:56.020 --> 29:56.360
werden.

29:57.060 --> 30:02.940
Und ich habe diese Abbildung G, die offensichtlich eine Abbildung von

30:02.940 --> 30:06.860
E -Stern nach E-Stern ist und also drin ist in der Menge F, gerade so

30:06.860 --> 30:10.880
definiert, dass sie unterschiedlich sein muss von allen diesen

30:10.880 --> 30:13.900
Diagonalelementen FK von WK.

30:14.620 --> 30:16.840
Und damit kann es eben keine solche Funktion G sein.

30:16.900 --> 30:20.900
Das ist ein abstraktes Argument, aber man kann eben mit abstrakten

30:20.900 --> 30:23.600
Überlegungen sehr praktische Erkenntnisse gewinnen.

30:24.600 --> 30:25.580
Noch eine Frage.

30:26.600 --> 30:28.360
Absolut nicht verständlich.

30:29.340 --> 30:30.340
Das tut mir sehr leid.

30:32.340 --> 30:36.260
Aber das müssen Sie sich einfach trotzdem klar machen.

30:37.460 --> 30:41.960
Das Argument ist ein Diagonalisierungselement.

30:42.120 --> 30:44.440
Oder ein Diagonalisierungsargument.

30:45.640 --> 30:49.100
Sie nehmen an, die Menge ist abzählbar.

30:49.100 --> 30:54.880
Wenn die abzählbar ist, dann gibt es eine Abbildung, die hatten wir

30:54.880 --> 30:56.260
vorher mal aufgeführt.

30:57.520 --> 31:06.580
Dann kann ich eben jedes Element von F, jede solche Funktion F, kann

31:06.580 --> 31:10.380
ich halt abbilden auf irgendein Element K.

31:11.100 --> 31:16.140
Jede Funktion wird auf irgendein Element K aus N abgebildet.

31:17.100 --> 31:19.640
Ich bilde F auf N ab.

31:20.780 --> 31:21.920
Das war die Abzählbarkeit.

31:22.940 --> 31:29.460
Jetzt stelle ich fest, diese Funktion G ist ein solches Element von F,

31:30.240 --> 31:33.000
also muss ich dafür eine natürliche Zahl finden können.

31:34.580 --> 31:38.740
Und wenn ich also angenommen habe, dass ich eine solche Tabelle

31:38.740 --> 31:44.680
aufschreiben kann, in der alle diese Funktionen auftreten, dann stelle

31:44.680 --> 31:51.140
ich fest, diese Funktion G ist aber keine solche, die dort aufgeführt

31:51.140 --> 31:51.420
ist.

31:51.920 --> 31:55.840
Das heißt, die Annahme, ich kann eine solche Tabelle aufschreiben, die

31:55.840 --> 31:56.960
ist einfach falsch.

31:58.180 --> 32:03.940
Ich kann keine solche Tabelle aufschreiben, bei der alle Funktionen so

32:03.940 --> 32:09.080
abgezählt werden, also abzählbar sind entsprechend dieser natürlichen

32:09.080 --> 32:09.360
Zahl.

32:09.360 --> 32:10.480
Noch eine Frage.

32:13.430 --> 32:14.130
Danke.

32:15.070 --> 32:15.870
Alles offensichtlich.

32:16.570 --> 32:18.810
Also beschäftigen Sie sich ein bisschen damit, dann kommen Sie von dem

32:18.810 --> 32:22.750
Zustand absolut nicht verständlich zu alles offensichtlich.

32:23.930 --> 32:28.710
Das ist ein Standardverfahren, das man anwendet in Überlegungen zu so

32:28.710 --> 32:33.710
Mächtigkeiten, die man sich irgendwo noch genauer angucken kann.

32:33.710 --> 32:38.770
Also, das ist also der Widerspruch und damit haben wir gezeigt, dass

32:38.770 --> 32:44.010
die Menge der Funktionen von E-Stern nach E-Stern nicht abzählbar ist,

32:44.070 --> 32:44.970
also überabzählbar.

32:45.990 --> 32:50.110
Andererseits, wenn wir uns anschauen, die Menge der berechenbaren

32:50.110 --> 32:54.710
Funktionen, dann wissen wir, jede berechenbare Funktion ist durch

32:54.710 --> 32:56.690
einen Text endlicher Länge beschrieben.

32:57.690 --> 33:01.750
Ein Text endlicher Länge ist irgendein Wort über einem Alphabet.

33:02.870 --> 33:06.510
Wir wissen, die Wörter eines Alphabets kann ich alle der Reihe nach

33:06.510 --> 33:07.150
aufschreiben.

33:08.350 --> 33:13.770
Da kann ich Ihnen sofort angeben, wie ich die Zahl bestimme zu

33:13.770 --> 33:14.990
irgendeinem beliebigen Wort.

33:16.550 --> 33:23.270
Und das heißt, da die Menge aller Wörter abzählbar ist, ist damit auch

33:23.270 --> 33:25.550
die Menge aller berechenbaren Funktionen abzählbar.

33:25.550 --> 33:30.870
Weil ich hier genau durch solche Wörter, nicht jedes Wort wird eine

33:30.870 --> 33:35.270
berechenbare Funktion beschreiben, aber die Menge der berechenbaren

33:35.270 --> 33:39.290
Funktionen über einem geeigneten Alphabet, nein, die Menge der

33:39.290 --> 33:42.550
Beschreibungen von berechenbaren oder von berechenbaren Funktionen,

33:42.910 --> 33:47.010
ist halt eine Teilmenge aller Wörter über einem geeigneten Alphabet.

33:47.630 --> 33:51.310
Und damit weiß ich, die Menge der berechenbaren Funktionen ist

33:51.310 --> 33:51.930
abzählbar.

33:52.690 --> 33:55.930
Das heißt, die berechenbaren Funktionen sind wirklich eine Teilklasse.

33:57.090 --> 34:00.990
Und ich muss mir genau überlegen, was sind eigentlich die Funktionen,

34:00.990 --> 34:04.550
die ich berechnen kann, wie kann ich diejenigen charakterisieren, die

34:04.550 --> 34:06.630
nicht berechenbar sind.

34:08.230 --> 34:13.030
Von der Berechenbarkeit kommen wir noch zu einem äquivalenten Begriff,

34:13.170 --> 34:15.310
zu dem Begriff der Entscheidbarkeit.

34:16.310 --> 34:25.990
Hier haben wir, betrachten wir Folgendes, eine Menge M1 und eine Menge

34:25.990 --> 34:26.870
M2.

34:27.670 --> 34:34.550
Und M1 nennen wir entscheidbar relativ zu M2, wenn wir für jedes

34:34.550 --> 34:46.390
Element aus M2 feststellen können, ob das W in M1 liegt oder nicht.

34:47.710 --> 34:51.110
Dann ist M1 entscheidbar relativ zu M2.

34:52.970 --> 34:57.030
Also, eine endliche Menge, wenn ich eine endliche Menge habe als

34:57.030 --> 35:01.370
Teilmenge von E-Stern, die ist immer relativ entscheidbar oder

35:01.370 --> 35:03.870
entscheidbar relativ zu E-Stern, selbstverständlich.

35:04.070 --> 35:05.470
Ich gebe Ihnen gleich ein paar Beispiele.

35:07.470 --> 35:11.430
Ein solches Verfahren, das diese Entscheidung trifft, gehört das

35:11.430 --> 35:16.330
Element zu M1 oder nicht zu M1, sondern zu M2, nennt man dann ein

35:16.330 --> 35:17.370
Entscheidungsverfahren.

35:20.270 --> 35:23.710
Und das ist also der Algorithmus, der dieses Entscheidungsverfahren

35:23.710 --> 35:24.310
darstellt.

35:25.230 --> 35:29.110
Und dann nennt man eine Menge absolut entscheidbar oder einfach nur

35:29.110 --> 35:33.850
entscheidbar, wenn M relativ zu E-Stern entscheidbar ist, wenn also

35:33.850 --> 35:35.690
diese M2 das E-Stern ist.

35:37.250 --> 35:43.230
So, das ist also die Definition und dann nochmal die Beziehung jetzt

35:43.230 --> 35:45.170
zu den berechenbaren Funktionen.

35:46.050 --> 35:51.050
Wenn ich eine Menge mir hernehme, oder die beiden Mengen M1 und M2,

35:51.190 --> 35:56.510
dann kann ich eine Funktion angeben, die gerade auf jedes Element von

35:56.510 --> 36:01.870
M2 angewandt wird und jeweils True oder False ausgibt, je nachdem, ob

36:01.870 --> 36:05.950
ein Element aus M2 zu M1 gehört oder nicht.

36:07.170 --> 36:14.530
Also die charakteristische Funktion zu M1 und M2, also von M1

36:14.530 --> 36:21.090
bezüglich M2, ist gerade die Funktion, die mir sagt, wahr, wenn das

36:21.090 --> 36:25.970
ein Element von M1 ist und falsch, wenn das kein Element von M1 ist.

36:25.970 --> 36:29.550
Das ist die charakteristische Funktion einer Menge und das soll

36:29.550 --> 36:33.230
einfach nur darstellen, ich kann eine Menge beschreiben durch eine

36:33.230 --> 36:35.870
charakteristische Funktion, also die Mitgliedschaft in einer Menge

36:35.870 --> 36:41.410
durch eine charakteristische Funktion angeben und wenn also M1

36:41.410 --> 36:47.490
entscheidbar ist, relativ zu M2, das war diese Definition hier oben,

36:48.230 --> 36:53.470
dann ist also die charakteristische Funktion für M1 und M2 eine

36:53.470 --> 36:54.670
berechenbare Funktion.

36:54.670 --> 36:57.370
Wir haben dann ja einen solchen Algorithmus, ein

36:57.370 --> 37:01.090
Entscheidungsverfahren, das gerade diese Funktion berechnet.

37:01.690 --> 37:05.750
Also Berechenbarkeit und Entscheidbarkeit haben sehr viel miteinander

37:05.750 --> 37:08.990
zu tun, wie es hier dargelegt wird.

37:09.570 --> 37:12.370
In Betracht der Entscheidbarkeit kann ich entscheiden, ob ein Element

37:12.370 --> 37:13.570
zur Sprache gehört oder nicht.

37:13.650 --> 37:16.650
Wir haben uns häufig jetzt schon mit Entscheidbarkeitsfragen

37:16.650 --> 37:20.370
beschäftigt, nämlich bei der Frage, gehört ein Wort über dem Alphabet

37:20.370 --> 37:25.510
zu einer rechtslinearen Sprache oder kontextfreien Sprache oder

37:25.510 --> 37:30.710
kontextsensitiven Sprache, bezogen auf eine bestimmte Grammatik oder

37:30.710 --> 37:33.230
einen Automaten einer bestimmten Klasse.

37:33.950 --> 37:36.910
Das waren alles Entscheidungsprobleme, nämlich Wortprobleme.

37:38.210 --> 37:41.210
Und jetzt sagen wir, wir können das auch übersetzen in

37:41.210 --> 37:44.610
Berechenbarkeit, wenn nämlich die jeweils charakteristische Funktion

37:44.610 --> 37:47.970
berechenbar ist, dann ist die Menge entsprechend entscheidbar.

37:50.310 --> 37:57.270
Beispiele, die Menge der Primzahlen ist entscheidbar relativ zur Menge

37:57.270 --> 37:58.330
der natürlichen Zahlen.

37:59.870 --> 38:06.490
Man kann für jede natürliche Zahl feststellen, ob diese Zahl eine

38:06.490 --> 38:07.570
Primzahl ist oder nicht.

38:08.090 --> 38:11.190
Also entscheidbar relativ zu N.

38:11.190 --> 38:17.030
Man muss nur testen, ob es irgendeine kleinere Zahl gibt, die diese

38:17.030 --> 38:18.050
Zahl N teilt.

38:19.210 --> 38:21.130
Oder jede endliche Menge ist entscheidbar.

38:22.090 --> 38:25.190
Ich muss ja nur diese endliche Menge durchsuchen und bin fertig.

38:25.430 --> 38:30.290
Wenn ich also irgendein Wort habe, ich kenne die Menge, diese endliche

38:30.290 --> 38:34.790
Menge Rm, dann muss ich ja nur diese Menge einmal durchschauen,

38:35.030 --> 38:38.030
endlich viele Dinge angucken, das ist in endlicher Zeit machbar.

38:38.030 --> 38:41.030
Die Beschreibung dieser Menge gibt mir schon das endliche Verfahren

38:41.030 --> 38:42.130
an, ganz einfach.

38:43.830 --> 38:48.410
Oder kontextfreie Grammatik mit der endlichen...

38:48.410 --> 38:57.390
Hier ist also die Frage, alle Grammatiken, M1 ist eine Menge von

38:57.390 --> 39:03.110
Grammatiken, die kontextfrei sind und die von der Grammatik erzeugte

39:03.110 --> 39:04.190
Sprache ist endlich.

39:05.250 --> 39:12.310
Jetzt die Frage, ist diese Menge entscheidbar, relativ zu M2?

39:13.110 --> 39:16.290
Und M2 ist die Menge aller beliebigen kontextfreien Grammatiken.

39:16.730 --> 39:24.690
Das heißt, kann ich entscheiden, ob eine Grammatik eine endliche

39:24.690 --> 39:26.990
Sprache erzeugt oder eine unendliche Sprache?

39:28.470 --> 39:33.390
Ja, ich habe also eine Grammatik gegeben, kontextfrei und die Frage

39:33.390 --> 39:42.230
ist, ist L von G Betrag davon aus N?

39:42.950 --> 39:43.630
Endlich.

39:45.790 --> 39:48.610
Da sind Sie zunächst mal, werden Sie rätseln, wieso das entscheidbar

39:48.610 --> 39:49.230
sein soll.

39:50.250 --> 39:53.190
Aber erinnern Sie sich an das Pumping Lemma.

39:54.950 --> 39:59.450
Wir brauchen nur nachzuschauen, ob diese kontextfreie Grammatik

40:00.690 --> 40:06.170
irgendein Wort ableiten kann über einer bestimmten Grenze.

40:06.750 --> 40:10.990
Nämlich einer Grenze, bei der der Ableitungsbaum einen Pfad enthält,

40:11.990 --> 40:16.250
bei dem mindestens ein Nicht-Terminalzeichen doppelt auftaucht.

40:17.010 --> 40:21.410
Und sobald sie auf einer Grammatik einen Ableitungsbaum erzeugen kann,

40:21.410 --> 40:27.390
bei dem ein Zeichen doppelt auftaucht, also sich wiederholt, wissen

40:27.390 --> 40:31.450
Sie, dann können Sie beliebig viele Wörter erzeugen.

40:32.150 --> 40:34.430
Weil Sie dann gerade so eine Pumpstelle erzeugt haben.

40:35.190 --> 40:39.490
Das heißt, Sie brauchen nur die Grammatik anzuschauen, sich alle

40:39.490 --> 40:44.270
Pfade, Ableitungsbäume anzuschauen bis zu einer bestimmten Länge und

40:44.270 --> 40:47.950
sofort wissen Sie, ob die Sprache, die erzeugt wird, endlich ist oder

40:47.950 --> 40:48.530
nicht endlich.

40:48.990 --> 40:51.930
Falls Sie also einen solchen Ableitungsbaum erzeugen können aus der

40:51.930 --> 40:55.210
Grammatik, bei dem Sie eine Wiederholung von Nicht-Terminalzeichen

40:55.210 --> 40:56.830
bekommen, wissen Sie, die ist nicht endlich.

40:57.350 --> 40:59.570
Das ist sehr einfach zu entscheiden.

41:00.430 --> 41:05.550
Das heißt, ich kann diese Menge M1 entscheiden, relativ zu M2.

41:06.410 --> 41:09.650
Was ich entscheiden muss, ist eigentlich nur, ist die Sprache zu einer

41:09.650 --> 41:13.570
Grammatik, zu einer kontextfreien Grammatik, endlich oder unendlich.

41:14.290 --> 41:15.470
Geht also relativ leicht.

41:16.710 --> 41:18.210
Jetzt kommt der nächste Begriff.

41:19.390 --> 41:20.470
Wir hatten jetzt Abzählbarkeit.

41:21.670 --> 41:25.270
Tut mir leid, ich muss Ihnen das alles darstellen, weil wir auf einen

41:25.270 --> 41:28.950
großen Satz hinsteuern, mit dem wir charakterisieren wollen,

41:29.070 --> 41:31.210
Funktionen, die nicht berechenbar sind.

41:32.170 --> 41:34.990
Jetzt müssen wir uns noch Folgendes anschauen, nämlich gerade in Bezug

41:34.990 --> 41:36.470
auf diese Berechenbarkeit.

41:37.350 --> 41:45.490
Wir sagen, eine Menge ist aufzählbar, genau dann, wenn es eine

41:45.490 --> 41:51.050
surreaktive, berechenbare Funktion gibt, die für jede natürliche, die

41:51.050 --> 41:54.490
praktisch die Menge der natürlichen Zahlen abbildet, auf meine Menge

41:54.490 --> 41:54.810
M.

41:56.730 --> 41:58.270
Was ist da das Interessante?

41:59.810 --> 42:01.430
Aufzählbar heißt Folgendes.

42:01.430 --> 42:07.870
Ich mache mir eine Tabelle 1, 2, 3, 4, 5, 6, 7 und so weiter.

42:09.010 --> 42:12.850
Ich schreibe mir die Zahlen hin, fange sogar mit 0 an.

42:14.250 --> 42:17.890
Und jetzt möchte ich die Menge aufzählen.

42:18.550 --> 42:24.470
Das heißt, meine Funktion f hier, die soll mir jetzt angeben ein Wort

42:24.470 --> 42:30.630
w0 und ein Wort w1 und ein Wort w2 und so weiter.

42:31.370 --> 42:40.930
Ich möchte also zu jeder Zahl angeben können, das ist das Wort mit dem

42:40.930 --> 42:42.590
Index 1, 2 oder was immer.

42:42.710 --> 42:45.610
Es kann sein, dass die 3 auch auf das w2 abgebildet wird.

42:46.310 --> 42:49.550
Und die 4 vielleicht auf irgendein w4 und so weiter.

42:51.750 --> 42:54.690
Also es muss nicht injektiv sein.

42:54.850 --> 42:56.290
Das heißt, es kann eine ähnliche Menge sein.

42:56.290 --> 42:59.330
Es kann sein, dass die alle anderen dann nur noch hier auf das w4

42:59.330 --> 42:59.610
gehen.

43:01.250 --> 43:07.630
Aber ich muss in der Lage sein, alle Elemente von M aufzuzählen, zu

43:07.630 --> 43:11.870
bekommen, dadurch, dass ich für jede Zahl mir anschaue, was ist das

43:11.870 --> 43:12.590
entsprechende Wort.

43:13.950 --> 43:16.990
Und wenn das eine berechenbare Funktion ist, dann habe ich also ein

43:16.990 --> 43:24.470
Verfahren, um die Menge M mit einem Algorithmus aufzuzählen.

43:26.590 --> 43:30.230
Das ist also etwas anderes als nur abzählen.

43:30.810 --> 43:36.690
Das hieß nur, es gibt eine Funktion, die die Menge injektiv abbildet

43:36.690 --> 43:37.890
in die Menge der natürlichen Zahlen.

43:38.650 --> 43:40.770
Hier möchte ich es wirklich aufzählen können.

43:41.210 --> 43:45.730
Das heißt, ich schaue mir an, für irgendein k, was ist eigentlich das

43:45.730 --> 43:47.710
Element wk, das dazu gehört.

43:50.250 --> 43:55.210
Und der Satz, den man hier zu sich überlegen kann, ist, für jede

43:55.210 --> 43:59.510
beliebige Menge M, wenn das M aufzählbar ist, dann ist M auch

43:59.510 --> 44:00.190
abzählbar.

44:01.150 --> 44:02.750
Umkehrung gilt natürlich nicht.

44:03.450 --> 44:06.450
Also das ist auch nicht ganz offensichtlich.

44:06.670 --> 44:10.750
Bei Aufzählbarkeit reden wir von einer Abbildung von N0 nach M.

44:12.370 --> 44:15.650
Bei Abzählbarkeit reden wir von einer Funktion von M in die Menge der

44:15.650 --> 44:16.410
natürlichen Zahlen.

44:16.410 --> 44:19.430
Wir können praktisch über die Umkehrfunktion dieser

44:19.430 --> 44:23.510
Aufzählungsfunktion genau diese Abzählbarkeit wieder hinbekommen.

44:25.710 --> 44:35.870
Und das M ist entscheidbar, genau dann, wenn M und e-M aufzählbar

44:35.870 --> 44:36.130
sind.

44:37.070 --> 44:38.530
Wie kann man das denn einsehen?

44:41.810 --> 44:46.410
Ich habe irgendein Wort W aus dem M.

44:47.230 --> 44:49.490
Ich habe irgendein Wort W aus dem E-Stern.

44:51.110 --> 44:55.870
Und ich möchte wissen, die Frage ist, ist das W aus M?

44:58.470 --> 45:01.170
Wie kann ich das über Aufzählbarkeit hinbekommen?

45:02.650 --> 45:04.910
Ich mache es einfach folgendermaßen.

45:05.370 --> 45:10.570
Ich weiß ja, ich kann die Menge M aufzählen.

45:10.830 --> 45:17.870
Ich kann also F von 0 hinschreiben, F von 1, F von 2 und so weiter.

45:19.550 --> 45:24.210
Ich kann mir auch E-Stern-M hernehmen.

45:24.330 --> 45:28.350
Ich nehme an, E-Stern-M ist auch aufzählbar.

45:28.350 --> 45:38.510
Dann kann ich hier angeben irgendein F' von 0, F' von 1, F' von 2 und

45:38.510 --> 45:38.970
so weiter.

45:41.390 --> 45:45.210
Das erste Aufzählungsverfahren F liefert mir alle Elemente von M.

45:45.870 --> 45:50.170
Das Aufzählungsverfahren F' liefert mir alle Elemente von E-Stern-M.

45:50.990 --> 45:59.130
Jetzt gucke ich der Reihe nach an, F0, F' von 0, F1, F' von 1, F2, F'

45:59.330 --> 45:59.910
von 2.

46:02.050 --> 46:08.530
Und irgendwann, wenn das Wort in W in M ist, wird es irgendwann

46:08.530 --> 46:09.170
auftreten.

46:11.670 --> 46:17.210
Es ist ja irgendwann einmal, wenn es in M ist, ist es irgendein F von

46:17.210 --> 46:17.490
K.

46:17.490 --> 46:19.450
Dann taucht das irgendwann auf.

46:20.150 --> 46:26.110
Wenn es nicht in M ist, dann ist es ja hier in der Menge E-Stern-M.

46:26.510 --> 46:30.930
Dann ist es irgendein Erstrich von K oder Erstrich von J oder was

46:30.930 --> 46:31.110
immer.

46:32.430 --> 46:40.170
Das heißt, wenn ich gleichmäßig M und E-Stern-M aufzähle durch meine

46:40.170 --> 46:45.610
Funktion F' bekomme ich irgendwann raus, ob das W in der Aufzählung

46:45.610 --> 46:50.550
von M auftaucht oder in der Aufzählung von E-Stern-M und damit kann

46:50.550 --> 46:58.270
ich entscheiden, also nach endlicher Zeit feststellen, ob das W zu M

46:58.270 --> 47:01.510
gehört oder zu E-Stern-M.

47:02.610 --> 47:08.690
Deswegen, wenn die Menge und ihr Komplement aufzählbar sind, dann ist

47:08.690 --> 47:09.590
die Menge entscheidbar.

47:10.970 --> 47:14.370
Das ist also noch eine weitere Erkenntnis, die man hier gewinnen kann.

47:15.210 --> 47:19.930
Damit haben wir also jetzt hier diese Struktur der Bezug auf

47:19.930 --> 47:21.810
Entscheidbarkeit uns überlegt.

47:21.910 --> 47:24.950
Es gibt also die abzählbaren Mengen, die hatte ich Ihnen zunächst

47:24.950 --> 47:25.710
dargestellt.

47:26.290 --> 47:29.310
Dann gibt es die aufzählbaren Mengen, das sind diejenigen mit einer

47:29.310 --> 47:30.490
berechenbaren Funktion.

47:31.310 --> 47:36.410
Und ich habe die entscheidbaren Mengen, bei denen die Menge aufzählbar

47:36.410 --> 47:38.590
ist und der Komplement auch aufzählbar ist.

47:40.230 --> 47:44.310
Und damit habe ich also jetzt so bestimmte Begriffe definiert.

47:44.410 --> 47:48.810
Wenn Sie in der Literatur nachschauen, finden Sie manchmal Begriffe

47:48.810 --> 47:49.930
wie rekursiv.

47:50.530 --> 47:52.910
Das ist das gleiche wie entscheidbar.

47:53.670 --> 47:56.870
Also eine rekursive Menge ist eine entscheidbare Menge.

47:57.470 --> 48:00.650
Eine rekursiv aufzählbare Menge ist eine aufzählbare Menge.

48:01.250 --> 48:03.150
Oder es ist auch eine semi-entscheidbare Menge.

48:03.150 --> 48:07.690
Nur das ist so, wenn Sie irgendwo was lesen, dass Ihnen klar ist, was

48:07.690 --> 48:08.610
damit gemeint ist.

48:10.430 --> 48:13.850
Damit habe ich Ihnen jetzt mehrere Begriffe dargestellt, die zunächst

48:13.850 --> 48:14.970
mal sehr abstrakt klingen.

48:16.010 --> 48:20.850
Sind auch sehr allgemeine Überlegungen, weil man damit fundamentale

48:20.850 --> 48:23.910
Erkenntnisse gewinnen kann, denen wir uns allmählich nähern.

48:25.190 --> 48:28.810
Das nächste ist die Frage, welche Funktion kann ich eigentlich mit

48:28.810 --> 48:30.150
Turing -Maschinen berechnen.

48:30.150 --> 48:32.690
Das ist jetzt die Turing-Maschine, die Turing-Berechenbarkeit.

48:33.710 --> 48:36.410
Allgemeine Berechenbarkeit war unabhängig von einem Maschinenmodell

48:36.410 --> 48:37.170
definiert worden.

48:37.830 --> 48:39.210
Irgendein endliches Verfahren.

48:40.050 --> 48:42.930
Selbstverständlich ist jede Turing-Maschine ein endliches Verfahren.

48:43.250 --> 48:45.150
Habe ich in endlichem Text hingeschrieben.

48:45.350 --> 48:47.990
Ich weiß, wie ich eine Turing-Maschine arbeiten lasse.

48:48.090 --> 48:52.690
Das heißt, ich habe dort eine endliche Beschreibung eines Verfahrens,

48:53.070 --> 48:54.850
das irgendetwas tun soll.

48:56.570 --> 48:59.070
Sind entscheidbare Mengen selbst aufzählbar?

49:00.170 --> 49:00.930
Selbstverständlich.

49:01.690 --> 49:04.850
Die Frage hätten Sie selbst beantworten können, trotzdem dürfen Sie

49:04.850 --> 49:05.590
die gerne stellen.

49:06.290 --> 49:10.010
Eine entscheidbare Menge ist entscheidbar, wenn sie selbst und ihr

49:10.010 --> 49:12.770
Komplement aufzählbar sind.

49:12.930 --> 49:16.610
Also, entscheidbare Menge muss selbst aufzählbar sein.

49:17.570 --> 49:20.290
Das steht in der Definition gerade drin.

49:20.290 --> 49:25.290
In dem Satz haben wir das gerade eben festgestellt.

49:26.690 --> 49:32.030
Also, jetzt gehen wir zu den Turing-Maschinen und sagen, wir haben

49:32.030 --> 49:35.730
jetzt eine Turing-Maschine mit einem bestimmten Eingabeband.

49:36.450 --> 49:37.690
Da steht das Wort W drauf.

49:38.390 --> 49:44.250
Wenn die Turing-Maschine aufhört zu arbeiten, wenn sie endet mit ihrer

49:44.250 --> 49:47.410
Berechnungsfolge, steht auf dem Band irgendwas anderes.

49:47.410 --> 49:52.170
Und wir sagen, das V ist jetzt das Bild von W.

49:53.190 --> 49:55.890
Beziehungsweise, wir sagen, die Turing-Maschine berechnet eine

49:55.890 --> 50:01.390
Funktion F, wenn sie für jedes Wort W nach endlich vielen Schritten

50:01.390 --> 50:05.930
anhält und der Bandinhalt dann gerade das Bild von W und der F ist.

50:07.290 --> 50:10.810
Ja, das also dann hält an in einem Endzustand.

50:11.370 --> 50:15.510
Dann sagen wir, diese Turing-Maschine kann die Funktion F berechnen.

50:16.280 --> 50:17.890
Das steht hier formal nochmal drin.

50:18.530 --> 50:23.570
Hier war es nur die bildliche Beschreibung, intuitiv, formal müssen

50:23.570 --> 50:24.430
wir es so hinschreiben.

50:25.350 --> 50:29.330
Wir haben eine Funktion von M1 nach M2 und wir sagen, dass die Turing

50:29.330 --> 50:35.010
-Maschine diese Funktion berechnen kann, wenn für jedes Wort aus M1

50:35.010 --> 50:39.870
genau dieses V erzeugt werden kann.

50:39.870 --> 50:44.950
Also wenn W aus M1 ist und V gleich F von W, dann kann ich aus der

50:44.950 --> 50:48.970
Anfangskonfiguration, bei der W auf dem Band steht und ich im

50:48.970 --> 50:52.770
Anfangszustand S0 bin, nach endlich vielen Schritten auf eine

50:52.770 --> 50:58.430
Endkonfiguration kommen, bei der die Bandinschrift UX gleich V ist und

50:58.430 --> 51:03.370
das S ist ein Endzustand und ich kann nicht mehr weitermachen.

51:04.050 --> 51:05.910
Die Turing-Maschine hat aufgehört zu arbeiten.

51:07.510 --> 51:12.030
Also für W nicht aus M1 ist allerdings das Verhalten der Maschine

51:12.030 --> 51:12.550
unbestimmt.

51:12.630 --> 51:15.770
Ich sage nur für alle Elemente aus M1.

51:16.690 --> 51:18.690
F ist aber auch nur eine Funktion von M1 nach M2.

51:20.270 --> 51:23.990
Und das F heißt, diese Funktion heißt also Turing-Berechenbar, wenn

51:23.990 --> 51:27.750
ich eine Turing-Maschine beschreibe oder erzeugen kann, die genau

51:27.750 --> 51:28.810
diese Funktion berechnet.

51:28.810 --> 51:32.170
Und jetzt habe ich ein formales Modell für einen

51:32.170 --> 51:32.810
Berechenbarkeitsbegriff.

51:33.650 --> 51:37.790
Ich kann Ihnen genau sagen, zu einem Text, den Sie mir hinschreiben,

51:38.270 --> 51:41.050
beschreibt dieser Text eine Turing-Maschine oder beschreibt er

51:41.050 --> 51:41.670
irgendwas anderes.

51:42.510 --> 51:45.910
Wenn er eine Turing-Maschine beschreibt und diese Turing-Maschine

51:45.910 --> 51:49.130
meine Funktion berechnet, dann ist diese Funktion Turing-Berechenbar.

51:51.210 --> 51:55.110
Beispiel hatte ich Ihnen schon einige Jahre genannt.

51:55.110 --> 51:59.730
Hier ist ein Beispiel, das Sie noch nicht so richtig einordnen können.

51:59.830 --> 52:02.430
Hier steht, berechnen das 1-Komplement von W.

52:03.530 --> 52:05.550
Das 1-Komplement lernen wir später kennen.

52:06.190 --> 52:09.910
Das ist eine gewisse Möglichkeit, wie man irgendein Binärwort

52:09.910 --> 52:13.350
umwandeln kann in eine Darstellung.

52:13.350 --> 52:21.390
Wenn das also eine Zahl x ist, dann will ich das Komplement zu x

52:21.390 --> 52:22.030
berechnen.

52:22.230 --> 52:30.270
Das ist also im Prinzip 2 hoch n-1-x.

52:31.070 --> 52:35.810
Das ist in dem Fall ein Komplement.

52:36.670 --> 52:38.950
Kommen wir später drauf bei Zahlendarstellungen.

52:39.230 --> 52:44.790
Wenn ich Zahlen, positive und negative Zahlen darstellen will, dann

52:44.790 --> 52:47.290
stelle ich die negativen Zahlen dadurch solche Komplemente.

52:48.190 --> 52:52.290
Und das Witzige ist, man kann das genau erzeugen, indem man hier

52:52.290 --> 52:55.190
einfach die Bits alle kippt.

52:56.150 --> 52:59.350
Also wenn ich für x, wenn das irgendeine Binärkombination ist,

52:59.430 --> 53:05.070
irgendeine Zahl ist, eine Binärzahl, ist das 1-Komplement zu x gerade

53:05.070 --> 53:10.090
das Wort, das entsteht, wenn ich alle Bits kippe aus einer 1 eine 0

53:10.090 --> 53:11.190
und aus einer 0 eine 1 mache.

53:11.830 --> 53:14.790
Genau das solche Geschehen durch meine Turing-Maschine, also diese

53:14.790 --> 53:18.690
Funktion f, liefert für die leere Eingabe die leere Eingabe ab.

53:18.690 --> 53:23.250
Und für ein Wort, das mit einer 1 beginnt, wird ein Wort abgeliefert,

53:23.390 --> 53:25.650
das mit einer 0 beginnt.

53:25.730 --> 53:29.810
Und danach wird das Restwort entsprechend verarbeitet und andersrum

53:29.810 --> 53:31.190
aus 0 wird 1.

53:31.930 --> 53:34.050
Und die Turing-Maschine, die das macht, kann ich ganz einfach

53:34.050 --> 53:34.670
aufschreiben.

53:35.370 --> 53:40.550
Im Anfangszustand, wenn ich eine 0 sehe, im Anfangszustand schreibe

53:40.550 --> 53:43.930
ich eine 1 und gehe nach rechts und bleibe in dem Zustand.

53:43.930 --> 53:46.830
Und wenn ich eine 1 sehe, schreibe ich eine 0 und gehe nach rechts und

53:46.830 --> 53:47.770
bleibe in dem Zustand.

53:48.130 --> 53:51.290
Wenn ich das Wort vollständig abgearbeitet habe und das Leerzeichen

53:51.290 --> 53:55.790
sehe, gehe ich in Endzustand und mache gar nichts mehr, bzw.

53:55.990 --> 53:59.450
gehe nach links auf letzte Zeichen und von der 1 kann ich nichts mehr

53:59.450 --> 53:59.750
tun.

53:59.850 --> 54:00.850
S1 ist der Endzustand.

54:01.290 --> 54:04.530
Dann habe ich also hier eine ganz einfache Turing-Maschine, die das 1

54:04.530 --> 54:06.390
-Komplement einer Zahl berechnet.

54:07.390 --> 54:10.270
Wir kommen also später nochmal auf diese ganzen Zahlendarstellungen.

54:11.090 --> 54:14.310
Dann haben wir entsprechend jetzt weitere Begriffe.

54:14.550 --> 54:16.850
Wir haben jetzt Berechenbarkeit definiert über Turing-Maschinen.

54:17.330 --> 54:22.270
Jetzt können wir auch die Aufzählbarkeit und Entscheidbarkeit über

54:22.270 --> 54:23.310
Turing -Maschinen definieren.

54:23.750 --> 54:29.630
Wir können nämlich sagen, eine Menge ist Turing-aufzählbar, genau

54:29.630 --> 54:33.810
dann, wenn es eine surjektive Turing-berechenbare Funktion von N0 nach

54:33.810 --> 54:34.270
M gibt.

54:34.270 --> 54:40.030
Das heißt, wenn die Funktion für die Aufzählbarkeit gerade eine Turing

54:40.030 --> 54:41.270
-berechenbare Funktion ist.

54:41.910 --> 54:45.490
Und entsprechend Turing-entscheidbar, wenn die charakteristische

54:45.490 --> 54:46.790
Funktion Turing-berechenbar ist.

54:46.870 --> 54:49.410
Ich ersetze praktisch in allen Definitionen, die wir bisher hatten,

54:49.970 --> 54:51.990
berechenbar durch Turing-berechenbar.

54:53.310 --> 54:56.550
Offensichtlich sind alle Turing-berechenbaren Funktionen berechenbar,

54:56.650 --> 54:57.550
das ist sofort klar.

54:58.590 --> 55:01.730
Damit haben wir jetzt eine Teilklasse charakterisiert von Funktionen,

55:01.830 --> 55:03.070
die Turing-berechenbar sind.

55:03.070 --> 55:05.330
Teilklasse der berechenbaren Funktionen.

55:07.150 --> 55:11.070
Und es ist offensichtlich, M ist Turing-aufzählbar, genau wenn es eine

55:11.070 --> 55:14.890
Turing -Maschine gibt, die genau die Eingaben W aus M akzeptiert, aber

55:14.890 --> 55:17.150
für W nicht aus M eventuell nie stoppt.

55:19.570 --> 55:25.530
Und man nennt deswegen diese Turing-aufzählbaren Mengen auch semi

55:25.530 --> 55:26.510
-entscheidbar.

55:26.810 --> 55:29.810
Also das kann man sich leicht überlegen, dass das so der Fall ist, die

55:29.810 --> 55:31.170
Begriffe hatte ich Ihnen schon dargestellt.

55:31.170 --> 55:35.810
Und jetzt wollen wir uns folgendes weiteres überlegen.

55:37.850 --> 55:43.410
Wir haben in der Rechnerwelt, wir wollen ja allgemein über

55:43.410 --> 55:45.190
berechenbare Funktionen reden können.

55:46.090 --> 55:48.870
Ich habe jetzt als Modell die Turing-Maschine genannt.

55:49.630 --> 55:54.510
Sie haben in Ihren Hosentaschen oder vor sich stehen irgendeinen

55:54.510 --> 55:54.950
Rechner.

55:55.630 --> 55:59.630
In Ihrem Laptop oder in Ihrem Handy oder wer weiß wo.

56:01.310 --> 56:05.070
Das sind Rechner, die können nicht nur eine Funktion berechnen, die

56:05.070 --> 56:06.470
können viele Funktionen berechnen.

56:06.990 --> 56:11.150
Das heißt, wir erwarten eigentlich, dass unsere Rechner

56:11.150 --> 56:17.970
Universalrechner sind, in dem Sinne, dass sie jede beliebige

56:17.970 --> 56:20.130
berechenbare Funktion berechnen können.

56:20.790 --> 56:23.490
Unsere Turing-Maschine kann aber nur eine Funktion berechnen.

56:25.690 --> 56:28.090
Ist also kein gutes Modell.

56:28.130 --> 56:29.270
Sehr eingeschränkt.

56:29.610 --> 56:31.410
Jede Turing-Maschine berechnet eine Funktion.

56:32.850 --> 56:37.610
Wenn Sie sich genauer anschauen, den Universalrechner, den wir noch

56:37.610 --> 56:41.670
genauer kennenlernen werden, etwas später in der Vorlesung, dann ist

56:41.670 --> 56:46.210
das natürlich auch nur ein Automat, den Sie beliebig füttern können,

56:46.690 --> 56:47.490
mit Programmen.

56:48.190 --> 56:53.950
Sie können ein Programm eingeben in einen Rechner und dieses Programm

56:53.950 --> 56:55.070
berechnet eine Funktion.

56:55.890 --> 57:00.610
Wenn Sie also einen Rechner betrachten, in Bezug auf die Ausführung

57:00.610 --> 57:05.570
eines Programms, dann ist das ein Gerät, das eine Funktion berechnet,

57:05.730 --> 57:07.350
nämlich die Funktion dieses Programms.

57:09.490 --> 57:11.450
Jetzt ist die Idee, kann ich das nicht übertragen auf Turing

57:11.450 --> 57:11.810
-Maschinen?

57:11.810 --> 57:18.470
Kann ich nicht einfach sagen, ich schreibe einfach auf mein Band der

57:18.470 --> 57:24.450
Turing -Maschine ein Programm und dann schreibe ich dahinter noch

57:24.450 --> 57:28.210
irgendein Eingabewort und dann soll die Turing-Maschine alles das, was

57:28.210 --> 57:33.690
auf dem Band steht, interpretieren, geeignet, um das Wort, also ich

57:33.690 --> 57:37.690
habe hier mein großes Band, dann schreibe ich hier einfach erst mein

57:37.690 --> 57:43.710
Programm hin und dann schreibe ich hier das W hin, die Eingabe und

57:43.710 --> 57:48.290
dann soll meine Turing-Maschine, die hier unten dran sitzt und darauf

57:48.290 --> 57:52.750
das lesen kann, für jedes Zeichen, oder praktisch dieses Wort W,

57:52.910 --> 57:55.870
entsprechend bearbeiten, entsprechend dem, was hier in diesem

57:55.870 --> 57:57.050
Programmteil drin steht.

57:57.370 --> 57:59.990
Das kann man ja alles lesen und interpretieren und so weiter.

58:01.250 --> 58:03.950
Das heißt, die Frage ist, kann ich nicht einfach eine Turing-Maschine

58:03.950 --> 58:08.630
definieren, die das kann, die eine beliebige Beschreibung einer

58:08.630 --> 58:12.050
Rechenvorschrift auf dem Band akzeptiert, das ist hier meine

58:12.050 --> 58:18.210
Rechenvorschrift und dann das, was dort steht, geeignet umsetzt, in

58:18.210 --> 58:21.830
eine Bearbeitung dieses Wortes, das hier eingegeben wurde, um daraus

58:21.830 --> 58:25.690
dann irgendwann das F von W zu erzeugen.

58:27.790 --> 58:31.050
Wenn ich eine solche Turing-Maschine beschreiben könnte oder

58:31.050 --> 58:34.890
definieren könnte, dann ist die ja genauso universell wie unser

58:34.890 --> 58:38.710
normaler Rechner, der beliebiges Programm akzeptieren kann.

58:39.070 --> 58:42.690
Und das ist genau die Idee, die man hier verwendet.

58:44.510 --> 58:51.630
Ich möchte also das Verhalten einer beliebigen Turing-Maschine bei

58:51.630 --> 58:56.270
Eingabe von W simulieren können, mit einer universellen Turing

58:56.270 --> 58:56.950
-Maschine U.

58:57.770 --> 58:59.990
Das heißt, ich brauche eigentlich gar nicht, mir ganz viele Turing

58:59.990 --> 59:03.990
-Maschinen zu definieren, ich definiere mir eine und dann viele

59:03.990 --> 59:08.690
Beschreibungen von Turing-Maschinen, die mir im Prinzip jeweils dafür

59:08.690 --> 59:13.030
sorgen, dass das entsprechende Programm richtig interpretiert wird.

59:14.250 --> 59:19.750
Hier ist die Idee nochmal, auf das Band dieser universellen Turing

59:19.750 --> 59:24.090
-Maschine schreibe ich die Arbeitsweise einer Turing-Maschine rauf.

59:24.650 --> 59:27.990
Ich brauche ja nur die Tabelle raufzuschreiben, unsere Turing-Tafel,

59:28.510 --> 59:31.070
die schreibe ich einfach auf das Band einer anderen Maschine rauf.

59:32.950 --> 59:37.030
Und jetzt liest, hier steht irgendwo die Initialkonfiguration der

59:37.030 --> 59:42.010
Turing -Maschine und dann muss ich einfach nachschauen, was macht

59:42.010 --> 59:44.710
eigentlich die Turing-Maschine mit dieser entsprechenden

59:44.710 --> 59:45.530
Konfiguration.

59:45.530 --> 59:50.350
Das steht ja alles in dieser Arbeitsweise hier drin und dann wird das

59:50.350 --> 59:55.930
einfach angewandt und ich kann dann die nächste Konfiguration erzeugen

59:55.930 --> 59:57.150
und die nächste und die nächste.

59:57.950 --> 01:00:01.750
Ich erzeuge also alle Folgekonfigurationen von T, entsprechend der

01:00:01.750 --> 01:00:06.430
Arbeitsweise, die dort definiert wurde und wenn ich auf dem Band eine

01:00:06.430 --> 01:00:11.790
Endkonfiguration von T erzeugt habe, dann geht auch unsere universelle

01:00:11.790 --> 01:00:13.490
Turing -Maschine in eine Endkonfiguration.

01:00:14.550 --> 01:00:17.890
Das heißt, das simuliert genau das, was wir machen, wenn wir ein

01:00:17.890 --> 01:00:20.550
Programm schreiben und in unseren Rechner ausführen lassen.

01:00:21.830 --> 01:00:24.450
Genau das wird hier durch eine universelle Turing-Maschine gemacht.

01:00:25.790 --> 01:00:29.250
Und jetzt kann man natürlich annehmen, ich habe die Turing-Maschinen

01:00:29.250 --> 01:00:33.230
alle normiert, beschreibe die alle durch Nullen und Einzen.

01:00:34.190 --> 01:00:38.830
Das heißt, ich mache irgendeine binäre Inschrift und muss die geeignet

01:00:38.830 --> 01:00:39.570
interpretieren.

01:00:40.070 --> 01:00:41.010
Das kann man alles machen.

01:00:41.010 --> 01:00:45.550
Ich muss meine Zustandsmenge geeignet kodieren.

01:00:45.890 --> 01:00:47.810
Da habe ich irgendwie N Zustände drin.

01:00:48.210 --> 01:00:52.650
Die kann ich durch entsprechende Zahlen von 0 bis N oder 0 bis N-1

01:00:52.650 --> 01:00:53.990
gerade beschreiben.

01:00:54.550 --> 01:00:57.130
Ich habe einen Anfangszustand, ich habe eine Endzustandsmenge.

01:00:57.590 --> 01:00:59.090
All das muss ich geeignet kodieren.

01:01:00.150 --> 01:01:03.930
Und dann habe ich eine Kodierung, die dann zum Beispiel so aussieht.

01:01:04.830 --> 01:01:12.590
Ich habe bei einem Übergang von SJ und dem Zeichen BI auf ein SK,

01:01:12.910 --> 01:01:16.770
schreibe das Zeichen BR und mache eine Operation XM.

01:01:18.210 --> 01:01:23.070
Muss ich nur folgendes machen, ich kann das beschreiben durch J

01:01:23.070 --> 01:01:28.470
Einzen, davor eine 0, dann kommt wieder eine 0 und dann kommen hier I

01:01:28.470 --> 01:01:33.090
Einzen, es kommt wieder eine 0, es kommen K Einzen, es kommt wieder

01:01:33.090 --> 01:01:39.410
eine 0, es kommen jetzt R Einzen und dann habe ich wieder eine 0 und

01:01:39.410 --> 01:01:41.090
es kommen M Einzen.

01:01:41.390 --> 01:01:43.790
Das M kann sehr klein sein, weil ich hier nur drei verschiedene

01:01:43.790 --> 01:01:45.130
Operationen unterscheiden muss.

01:01:46.590 --> 01:01:47.270
Das ist sehr einfach.

01:01:47.490 --> 01:01:52.090
Aber das hier würde genau das kodieren, was hier steht.

01:01:54.110 --> 01:01:55.510
Durch 0 und 1 kodiert.

01:01:55.510 --> 01:01:57.390
Dann muss ich die geeignet voneinander trennen, dann muss ich

01:01:57.390 --> 01:02:00.150
vielleicht zwei Nullen machen, um diese unterschiedlichen Sachen

01:02:00.150 --> 01:02:01.070
voneinander zu trennen.

01:02:01.790 --> 01:02:04.350
Und auf die Art und Weise kann ich also eine solche Tabelle

01:02:04.350 --> 01:02:04.870
aufschreiben.

01:02:05.430 --> 01:02:09.170
Also die aktuelle Bandentschrift und der aktuelle Zustand sind durch

01:02:09.170 --> 01:02:11.210
Nullen getrennt und so weiter.

01:02:11.730 --> 01:02:18.930
So kann ich meine Turing-Tabelle aufschreiben auf das Band und ich

01:02:18.930 --> 01:02:20.190
kann das geeignet interpretieren.

01:02:20.190 --> 01:02:23.830
Ich muss eben immer nur zählen können, habe ich hier J Einzen oder I

01:02:23.830 --> 01:02:26.450
Einzen oder K Einzen, R Einzen oder M Einzen.

01:02:27.670 --> 01:02:30.710
Entsprechend muss ich das alles in meine Zustandsmenge meines

01:02:30.710 --> 01:02:34.530
Automaten geeignet kodieren und kann das dann ausführen.

01:02:35.390 --> 01:02:38.970
Und die Position des Schreiblesekopfes auf dem Band muss ich auch

01:02:38.970 --> 01:02:39.610
simulieren.

01:02:40.450 --> 01:02:43.830
Das mache ich durch drei aufeinanderfolgende Nullen vor dem zu

01:02:43.830 --> 01:02:46.750
lesenden Zeichen auf dem Band und bin dann damit auch fertig.

01:02:47.370 --> 01:02:50.890
Alles geeignet kodiert, kann man alles so machen und dann muss ich

01:02:50.890 --> 01:02:53.170
schrittweise die Turing-Maschine simulieren.

01:02:53.790 --> 01:02:56.890
Ich will Ihnen das jetzt nicht alles explizit formal hinschreiben, wie

01:02:56.890 --> 01:02:59.470
die Funktion genau aussieht von U, die genau das macht.

01:02:59.790 --> 01:03:02.450
Aber ich denke, Sie bekommen einen Eindruck davon, dass man das machen

01:03:02.450 --> 01:03:02.870
kann.

01:03:03.970 --> 01:03:07.490
Dass ich also die Arbeitsweise einer Turing-Maschine durch eine Folge

01:03:07.490 --> 01:03:09.170
von Nullen und Einzen beschreiben kann.

01:03:10.570 --> 01:03:13.990
Durch geeignete Kodierung mit wieder weiteren Nullen, ich eine

01:03:13.990 --> 01:03:16.710
Trennung herstellen kann zwischen der Beschreibung der Arbeitsweise

01:03:16.710 --> 01:03:23.550
und der Bandinschrift, kann andeuten, wo ich gerade bin.

01:03:24.210 --> 01:03:25.410
Also alles ist machbar.

01:03:26.270 --> 01:03:30.710
Das ist dann die Simulation einer solchen Turing-Maschine, die eben

01:03:30.710 --> 01:03:37.630
beginnt mit der Beschreibung der Arbeitsweise der Turing-Maschine mit

01:03:37.630 --> 01:03:42.850
der Anfangskonfiguration und dann entsprechend in einen neuen Zustand

01:03:42.850 --> 01:03:49.110
übergeht und neben dieser Anfangsarbeitsweise jetzt die Beschreibung

01:03:49.110 --> 01:03:53.550
der Folgekonfiguration hat und so weiter, bis man irgendwann auf eine

01:03:53.550 --> 01:03:57.510
Endkonfiguration kommt, sofern die Maschine tatsächlich anhält oder

01:03:57.510 --> 01:03:57.890
auch nicht.

01:03:58.770 --> 01:04:03.510
Das heißt, ich kann eine universelle Turing-Maschine angehen, eine

01:04:03.510 --> 01:04:05.430
beliebige Turing-Maschine simulieren.

01:04:06.610 --> 01:04:11.890
Und damit habe ich jetzt also die Möglichkeit, mit einer Turing

01:04:11.890 --> 01:04:15.150
-Maschine alle berechenbaren Funktionen zu berechnen.

01:04:17.210 --> 01:04:20.630
Ich kann natürlich auch alle möglichen Turing-Maschinen in eine feste

01:04:20.630 --> 01:04:21.430
Reihenfolge bringen.

01:04:22.070 --> 01:04:28.310
Ich muss ja nur meine Beschreibung der Turing-Maschinen mexikografisch

01:04:28.310 --> 01:04:29.410
anordnen zum Beispiel.

01:04:29.410 --> 01:04:37.510
Da kann ich alle aufschreiben und habe dann eine Anordnung dieser

01:04:37.510 --> 01:04:38.690
Turing -Maschinen.

01:04:40.550 --> 01:04:45.850
Dann kann ich natürlich alle möglichen Eingabewörter ebenfalls

01:04:45.850 --> 01:04:50.570
anordnen in eine feste Reihenfolge, wie 1, wie 2, wie 3.

01:04:52.510 --> 01:05:01.430
Und wenn ich das so mache, dann mache ich im Prinzip das gleiche, was

01:05:01.430 --> 01:05:02.710
ich vorher auch schon überlegt hatte.

01:05:04.370 --> 01:05:10.330
Gibt es eine Sprache, die ich nicht durch eine Turing-Maschine

01:05:10.330 --> 01:05:11.670
erzeugen kann?

01:05:14.560 --> 01:05:16.200
Beziehungsweise akzeptieren kann.

01:05:16.420 --> 01:05:18.140
Das wäre eine Sprache LNA.

01:05:18.980 --> 01:05:22.300
Und diese Sprache können wir uns ganz einfach, völlig analog zum

01:05:22.300 --> 01:05:29.160
Existenz einer nicht berechenbaren Funktion hier überlegen.

01:05:30.120 --> 01:05:32.080
Es gibt eine Turing-Maschine T.

01:05:34.360 --> 01:05:39.920
Also ich nehme an, kann diese Sprache NA erzeugen, mit einer Turing

01:05:39.920 --> 01:05:40.320
-Maschine.

01:05:41.680 --> 01:05:46.700
Dann gibt es natürlich, wegen der Abzählbarkeit der Menge der Turing

01:05:46.700 --> 01:05:48.840
-Maschinen, das hatten wir gesagt, wir können uns die alle so

01:05:48.840 --> 01:05:52.540
anordnen, wir können also eine Abzählbarkeit auf jeden Fall

01:05:52.540 --> 01:05:53.220
postulieren.

01:05:53.860 --> 01:05:59.160
Dann gibt es eine Turing-Maschine TJ, die gerade diese Turing-Maschine

01:05:59.160 --> 01:06:02.520
ist, die die Sprache NA akzeptiert.

01:06:02.520 --> 01:06:06.020
Und jetzt kommt das Gleiche.

01:06:07.600 --> 01:06:11.640
Das WJ, hier diese Sprache NA, ist eine besondere Sprache.

01:06:11.840 --> 01:06:18.960
WI ist in der Sprache, wenn WI nicht aus der Sprache der ITEN-Turing

01:06:18.960 --> 01:06:19.940
-Maschine ist.

01:06:20.520 --> 01:06:23.460
Also wieder so eine Diagonalisierungssprache, genau wie vorher die

01:06:23.460 --> 01:06:25.140
Diagonalisierungsfunktion.

01:06:28.560 --> 01:06:33.280
Wenn ich also eine Turing-Maschine hätte, die diese Sprache

01:06:33.280 --> 01:06:37.840
akzeptieren kann, bei der gerade das Wort WI nicht aus der Sprache der

01:06:37.840 --> 01:06:42.500
Turing -Maschine TI ist, dann weiß ich, die Turing-Maschine ist

01:06:42.500 --> 01:06:44.360
irgendeine Turing-Maschine TJ.

01:06:45.320 --> 01:06:51.300
Das WJ ist also in der Sprache LNA, genau dann, wenn WJ aus L von T

01:06:51.300 --> 01:06:53.940
ist, weil ich annehme, L von T ist gleich LNA.

01:06:55.700 --> 01:07:00.900
Dann ist das WJ aber aus L von TJ, weil ich sage, T ist gleich TJ.

01:07:01.960 --> 01:07:06.840
Wenn aber das WJ aus L von TJ ist, ist WJ nicht aus LNA wegen dieser

01:07:06.840 --> 01:07:07.080
Definition.

01:07:09.560 --> 01:07:12.600
Und das heißt, ich habe hier einen Widerspruch, kann ja nicht sein,

01:07:12.740 --> 01:07:15.560
dass WJ aus LNA ist, genau wie wenn es nicht aus LNA ist.

01:07:15.940 --> 01:07:20.580
Das heißt, die Annahme, ich kann diese Sprache hier erzeugen durch

01:07:20.580 --> 01:07:23.080
eine Turing-Maschine, ist falsch.

01:07:23.940 --> 01:07:26.700
Es gibt eine Sprache, die kann ich nicht durch eine Turing-Maschine

01:07:26.700 --> 01:07:27.980
akzeptieren.

01:07:28.280 --> 01:07:31.800
Ich kann Ihnen die nicht explizit hinschreiben, aber es gibt eine

01:07:31.800 --> 01:07:34.040
solche Sprache, die ich hier formal definiert habe.

01:07:35.300 --> 01:07:38.140
Und das heißt, diese Sprache ist nicht durch eine Turing-Maschine

01:07:38.140 --> 01:07:38.980
berechenbar.

01:07:41.680 --> 01:07:44.680
Also, es gibt Sprachen, die nicht in L0 enthalten sind.

01:07:45.220 --> 01:07:50.340
L0 waren ja alle Sprachen, die ich durch Turing-Maschinen akzeptieren

01:07:50.340 --> 01:07:57.020
kann, beziehungsweise die erzeugt werden können von Typ-0 Grammatiken.

01:07:58.260 --> 01:08:01.040
Und dann ist die Frage, wie kann ich überhaupt Turing-Maschinen

01:08:01.040 --> 01:08:01.840
konstruieren?

01:08:03.000 --> 01:08:06.960
Das macht man einfach so, dass man elementare Funktionen sich hier

01:08:06.960 --> 01:08:11.460
nimmt, für die einfache Turing-Maschine aufschreibt und dann einfach

01:08:11.460 --> 01:08:16.040
für Addition, Multiplikation und Vergleich sich weitere erzeugt.

01:08:16.040 --> 01:08:20.060
Also ich erzeuge mir eine Turing-Maschine, die irgendwelche

01:08:20.060 --> 01:08:23.780
elementaren Anweisungen machen kann und schreibe dann auf, wie die

01:08:23.780 --> 01:08:25.440
Hintereinanderausführung aussehen soll.

01:08:25.520 --> 01:08:27.460
Ich kann eine Wiederholung machen, ich kann eine Verzweigung

01:08:27.460 --> 01:08:32.500
definieren und kann dann das im Prinzip aufschreiben als Verknüpfung

01:08:32.500 --> 01:08:33.460
von Turing-Maschinen.

01:08:34.100 --> 01:08:37.380
Und Sie sehen, das sind Beschreibungen von Turing-Maschinen, die auf

01:08:37.380 --> 01:08:40.280
einmal sehr ähnlich aussehen wie programmiersprachliche

01:08:40.280 --> 01:08:40.940
Beschreibungen.

01:08:41.500 --> 01:08:45.500
Das heißt im Prinzip erzeuge ich mit einer, wenn ich eine Turing

01:08:45.500 --> 01:08:50.000
-Maschine konstruiere, ein höhersprachliches Programm und ich habe die

01:08:50.000 --> 01:08:52.940
Analogie hinbekommen zwischen den Turing-Maschinen und

01:08:52.940 --> 01:08:54.260
höhersprachlichen Programmen.

01:08:56.020 --> 01:08:59.480
Jetzt ist es so, dass, das muss ich jetzt noch ganz kurz, dann bin ich

01:08:59.480 --> 01:09:03.500
am Ende eines wohldefinierten Abschnitts, es ist sicherlich so, dass

01:09:03.500 --> 01:09:07.060
jede Turing-berechenbare Funktion auch intuitiv berechenbar ist.

01:09:07.720 --> 01:09:10.760
Und die Turing-Maschine war das erste formale Modell zur

01:09:10.760 --> 01:09:13.260
Charakterisierung intuitiv berechenbarer Funktionen.

01:09:13.760 --> 01:09:16.460
Jetzt kann ich viele andere Sachen angeben.

01:09:16.620 --> 01:09:21.000
Ich kann den Lambda-Kalkül angeben, ich kann Postsysteme angeben, ich

01:09:21.000 --> 01:09:25.980
kann sehr viele verschiedene Formalisierungen berechenbarer Funktionen

01:09:25.980 --> 01:09:26.440
angeben.

01:09:27.280 --> 01:09:33.920
Und der Wissenschaftler Church hat diese Hypothese formuliert, der

01:09:33.920 --> 01:09:37.740
sagt, jede im intuitiven Sinne berechenbare Funktion ist auch Turing

01:09:37.740 --> 01:09:38.360
-berechenbar.

01:09:38.840 --> 01:09:41.200
Das ist eine These, weil ich sie nicht beweisen kann.

01:09:41.860 --> 01:09:45.060
Weil ich nicht sagen kann, was ist eine intuitiv berechenbare

01:09:45.060 --> 01:09:45.640
Funktion.

01:09:46.500 --> 01:09:48.380
Ich sage, die ist auch Turing-berechenbar.

01:09:48.520 --> 01:09:52.120
Das heißt, was immer ich mir für ein Modell mache für eine

01:09:52.120 --> 01:09:55.560
berechenbare Funktion, kann ich das überführen auf eine Turing

01:09:55.560 --> 01:09:56.600
-berechenbare Funktion.

01:09:57.380 --> 01:10:00.820
Und das ist die Church-These, die also die Grundlage darstellt dafür,

01:10:00.820 --> 01:10:05.160
dass ich mir für beliebige Fragestellungen auch unterschiedliche

01:10:05.160 --> 01:10:06.340
Modelle hernehmen kann.

01:10:06.940 --> 01:10:09.420
Ich muss nicht alles mit Turing-Maschinen machen, ich kann es auch mit

01:10:09.420 --> 01:10:14.220
anderen machen, aber diese intuitiv berechenbaren Funktionen sind im

01:10:14.220 --> 01:10:15.600
Prinzip alle Turing-berechenbar.

01:10:15.680 --> 01:10:17.500
Ich könnte mich also auf Turing-Maschinen beschränken.

01:10:18.060 --> 01:10:20.840
Wir werden das nicht tun, wir werden sehr schnell davon wegkommen und

01:10:20.840 --> 01:10:25.180
andere Maschinen betrachten, aber im Prinzip kann ich das so machen.

01:10:25.900 --> 01:10:29.560
Und man meint sogar, dass eben die Turing-Maschinen sogar die

01:10:29.560 --> 01:10:33.440
Rechenzeit bis auf polynomielle Faktoren richtig erfassen.

01:10:33.960 --> 01:10:39.220
Das heißt, ein Problem ist genau dann effizient polynomiell lösbar,

01:10:39.740 --> 01:10:45.780
also wenn ich die Problemgröße N habe, in Zeit O von N hoch K für

01:10:45.780 --> 01:10:49.500
irgendein Polynom, wenn es von Turing-Maschinen in polynomieller Zeit

01:10:49.500 --> 01:10:50.480
gelöst werden kann.

01:10:52.980 --> 01:10:56.460
Dann, Folgerung der Church-Synthese, die man natürlich nicht beweisen

01:10:56.460 --> 01:10:59.660
kann, weil ich nicht beweisen kann, was es heißt, dass etwas intuitiv

01:10:59.660 --> 01:11:00.340
berechenbar ist.

01:11:00.440 --> 01:11:02.040
Das ist kein formales Modell.

01:11:03.260 --> 01:11:07.320
Ich kann also in Bezug auf die Berechenbarkeit mich darauf

01:11:07.320 --> 01:11:09.260
beschränken, Turing-Maschinen zu betrachten.

01:11:09.880 --> 01:11:13.140
Ich darf aber, wenn ich andere Fragestellungen habe, bei denen die

01:11:13.140 --> 01:11:15.360
Turing -Maschine nicht so gut geeignet ist, auch andere Modelle

01:11:15.360 --> 01:11:18.060
verwenden, von denen ich Ihnen eigentlich kein einziges vorgeführt

01:11:18.060 --> 01:11:18.360
habe.

01:11:18.360 --> 01:11:21.440
Es gibt andere Modelle, wie sogenannte Postmaschinen, Postschirm

01:11:21.440 --> 01:11:24.700
-Modelle, es gibt den Lambda-Kalkül, es gibt myorekursive Funktionen,

01:11:24.920 --> 01:11:29.000
es gibt eine ganze Reihe verschiedener Charakterisierungen von

01:11:29.000 --> 01:11:32.480
berechenbaren Funktionen und jede dieser darf man verwenden, weil sie

01:11:32.480 --> 01:11:33.780
äquivalent sind zur Turing-Maschine.

01:11:33.920 --> 01:11:36.240
Das kann man alles beweisen, dass Postmaschinen äquivalent sind zur

01:11:36.240 --> 01:11:39.700
Turing -Maschine, dass Lambda-Kalkül äquivalent ist zur Turing

01:11:39.700 --> 01:11:44.220
-Maschine, dass die rekursiven Funktionen dazu äquivalent sind und so

01:11:44.220 --> 01:11:44.500
weiter.

01:11:44.640 --> 01:11:48.300
Das kann man von den verschiedenen Modellen zeigen können und deswegen

01:11:48.300 --> 01:11:49.260
diese Churchill-These.

01:11:50.400 --> 01:11:53.820
Also, das sind die ganzen Erkenntnisse, die man hier gewinnen kann.

01:11:54.020 --> 01:11:56.820
Jede aufzählbare Menge ist natürlich auch Turing-aufzählbar und

01:11:56.820 --> 01:12:00.460
umgekehrt wegen dieser Churchill-These und es ist so, dass jede

01:12:00.460 --> 01:12:02.680
entscheidbare Menge auf Turing-entscheidbar ist.

01:12:03.620 --> 01:12:09.640
Alles im Sinne dieser Churchill-These, das ist im Wesentlichen der

01:12:09.640 --> 01:12:10.140
Berechenbarkeitsbegriff.

01:12:11.280 --> 01:12:14.220
Und jetzt kommen wir zu einem Problem, bei dem ich Ihnen jetzt

01:12:14.220 --> 01:12:18.700
tatsächlich zeigen möchte, das ist ein Problem, das sehr einfach

01:12:18.700 --> 01:12:21.480
formulierbar ist und wir werden zeigen, dieses Problem ist nicht

01:12:21.480 --> 01:12:22.160
entscheidbar.

01:12:22.660 --> 01:12:27.760
Das ist folgende Frage, mit der man durchaus zu tun haben kann in

01:12:27.760 --> 01:12:28.760
dieser Praxis.

01:12:30.440 --> 01:12:33.680
Und aus dieser Frage folgen viele andere, die sehr praxisrelevant

01:12:33.680 --> 01:12:34.120
sind.

01:12:34.720 --> 01:12:37.340
Die Frage ist, gibt es einen Algorithmus, der für jedes beliebige

01:12:37.340 --> 01:12:41.320
Programm entscheidet, ob das Programm bei Eingabe eines beliebigen

01:12:41.320 --> 01:12:43.300
Wortes hält oder nicht.

01:12:45.560 --> 01:12:48.040
Ein beliebiges Programm, ich sage jetzt hier nicht Turing-Maschine,

01:12:48.140 --> 01:12:49.300
sondern ein beliebiges Programm.

01:12:50.260 --> 01:12:54.100
Ich kann aber, weil ich weiß, ein Programm beschreibt eine

01:12:54.100 --> 01:12:57.500
berechenbare Funktion, kann ich auch fragen, gibt es eine Turing

01:12:57.500 --> 01:13:02.340
-Maschine, die für jede Turing-Maschine T entscheidet, ob T bei

01:13:02.340 --> 01:13:03.620
Eingabe W hält oder nicht.

01:13:03.720 --> 01:13:05.480
Wir hatten ja gesehen, es gibt eine universelle Turing-Maschine.

01:13:06.180 --> 01:13:08.980
Diese universelle Turing-Maschine, die kann jede andere simulieren.

01:13:09.620 --> 01:13:12.400
Jetzt die Frage, gibt es auch eine, die die nicht nur simuliert,

01:13:12.400 --> 01:13:17.960
sondern die einfach diese Frage beantwortet, hält die Maschine bei

01:13:17.960 --> 01:13:19.540
Eingabe von W oder nicht.

01:13:21.200 --> 01:13:24.620
Und das Problem ist natürlich, wenn ich sage, die entscheidet das,

01:13:25.240 --> 01:13:28.180
dann muss die mir sagen können, diese Maschine wird nicht halten bei

01:13:28.180 --> 01:13:28.980
Eingabe von W.

01:13:29.920 --> 01:13:33.100
Wenn sie aber die Maschine simuliert, dann hält sie selber nicht, dann

01:13:33.100 --> 01:13:34.000
kann sie mir nichts mehr sagen.

01:13:36.040 --> 01:13:38.620
Das könnte ja sein, dass man die Maschine analysieren kann, die

01:13:38.620 --> 01:13:42.300
Beschreibung einer Maschine analysieren kann, so dass man feststellen

01:13:42.300 --> 01:13:45.740
kann, ob die Maschine bei Eingabe von irgendeinem Wort halten wird

01:13:45.740 --> 01:13:46.240
oder nicht.

01:13:47.600 --> 01:13:50.480
Wenn man die simuliert, eine Maschine, die bei Eingabe eines Wortes

01:13:50.480 --> 01:13:53.300
nicht hält, dann hält die simulierende Maschine natürlich auch nicht.

01:13:54.280 --> 01:13:55.700
Also ist das eine andere Frage.

01:13:56.220 --> 01:14:04.740
Und das ist so die Frage, naja, wenn ich als Übungsleiter Aufgaben von

01:14:04.740 --> 01:14:06.980
Studenten bearbeiten möchte und die liefern mir alle möglichen Turing

01:14:06.980 --> 01:14:10.080
-Maschinen ab, ich möchte gerne überprüfen können, sind das eigentlich

01:14:10.080 --> 01:14:11.040
vernünftige Programme.

01:14:12.160 --> 01:14:17.400
Und man kann also leicht zeigen, dass man auch damit das Problem

01:14:17.400 --> 01:14:21.040
festzustellen, ob zwei Programme, die mir geliefert werden, das

01:14:21.040 --> 01:14:21.880
gleiche tun.

01:14:23.220 --> 01:14:25.080
Auch das ist dann auf einmal nicht entscheidbar.

01:14:25.160 --> 01:14:26.360
Da kommen wir später nochmal drauf zurück.

01:14:26.960 --> 01:14:28.840
Und das sieht doch aus wie eine ganz übliche Aufgabe.

01:14:29.280 --> 01:14:32.920
Ich bekomme irgendwelche schönen Turing-Maschinen geliefert,

01:14:33.040 --> 01:14:37.640
irgendwelche Beschreibungen von 550 Studenten oder 600 Studenten und

01:14:37.640 --> 01:14:41.100
da zu überprüfen per Hand, sind die jetzt eigentlich diese speziellen

01:14:41.100 --> 01:14:43.780
Maschinen, halten die für jede Eingabe an oder nicht.

01:14:44.340 --> 01:14:47.360
Das kann man natürlich für eine spezielle Maschine überlegen, ob das

01:14:47.360 --> 01:14:48.360
das tut oder nicht.

01:14:48.840 --> 01:14:52.160
Aber ich kann nicht einen Algorithmus entwerfen, der das für alle tut.

01:14:52.860 --> 01:14:55.420
Und das ist ziemlich frustrierend.

01:14:55.480 --> 01:14:56.920
Und das ist auch ein praktisches Problem.

01:14:57.540 --> 01:15:00.280
Und trotzdem habe ich hier ein Problem, wo ich sagen kann, das ist ein

01:15:00.280 --> 01:15:01.760
Problem, das kann ich nicht entscheiden.

01:15:02.600 --> 01:15:05.000
Warum das so ist, wollen wir uns heute klar machen.

01:15:05.460 --> 01:15:06.800
Das ist gar nicht so schwer einzusehen.

01:15:07.540 --> 01:15:10.220
Dieses Problem nennt man das Halteproblem für Turing-Maschinen.

01:15:10.740 --> 01:15:12.440
Man könnte auch sagen, das Halteproblem für Programme.

01:15:13.060 --> 01:15:15.600
Aber formal beweisen tun wir das für die Turing-Maschinen, für dieses

01:15:15.600 --> 01:15:16.280
formale Modell.

01:15:17.760 --> 01:15:21.400
Und dieses Halteproblem für Turing-Maschinen ist unentscheidbar.

01:15:21.820 --> 01:15:25.660
Das ist also ein wesentlicher Satz über die Berechenbarkeit von

01:15:25.660 --> 01:15:27.080
Funktionen bzw.

01:15:28.100 --> 01:15:29.720
Entscheidbarkeit von Problemen.

01:15:30.280 --> 01:15:34.400
Und wir machen das so, dass wir einfach annehmen, es sei entscheidbar.

01:15:36.100 --> 01:15:38.760
Wenn wir annehmen, das Problem ist entscheidbar.

01:15:39.580 --> 01:15:41.500
Was heißt ein Problem ist entscheidbar?

01:15:41.840 --> 01:15:44.740
Dann heißt das, ich kann das mit einem Algorithmus entscheiden.

01:15:45.380 --> 01:15:48.720
Also gibt es dann eine Turing-Maschine H für Halten.

01:15:49.220 --> 01:15:53.400
Also die Haltemaschine oder die Maschine, die das Halteproblem löst.

01:15:54.040 --> 01:15:58.520
Die entscheidet, ob eine beliebige Turing-Maschine T angesetzt auf ein

01:15:58.520 --> 01:16:01.300
beliebiges Wort W hält oder nicht.

01:16:02.200 --> 01:16:03.640
Wir nehmen einfach an, das geht.

01:16:04.700 --> 01:16:07.780
Und dann müssen wir uns überlegen, ob wir daraus schließen können,

01:16:08.340 --> 01:16:13.400
dass eine Aussage bewiesen wird, von der wir wissen, dass sie falsch

01:16:13.400 --> 01:16:13.780
ist.

01:16:16.660 --> 01:16:20.140
Wenn wir also aus dieser Annahme etwas schließen können, von dem wir

01:16:20.140 --> 01:16:23.120
wissen, dass es falsch ist, dann war die Annahme falsch.

01:16:28.120 --> 01:16:30.480
Also, oder da haben wir eben Widerspruch daraus.

01:16:30.740 --> 01:16:35.240
Wir nehmen an, die Turing-Maschine H existiert.

01:16:36.220 --> 01:16:39.480
Und wir zeigen daraus, dass wir dann eine Turing-Maschine konstruieren

01:16:39.480 --> 01:16:42.360
können, die diese Sprache LNA akzeptiert.

01:16:43.640 --> 01:16:46.720
Wir wissen aber, es kann keine Turing-Maschine geben, die die Sprache

01:16:46.720 --> 01:16:47.480
LNA akzeptiert.

01:16:47.480 --> 01:16:50.380
Das habe ich letztes Mal gezeigt, das war der wesentliche Grund, warum

01:16:50.380 --> 01:16:53.300
ich Ihnen zeigen musste, es gibt keine Turing-Maschine, die die

01:16:53.300 --> 01:16:54.720
Sprache LNA akzeptiert.

01:16:57.080 --> 01:17:03.160
Und diese Maschine T, von der wir zeigen werden, wenn es eine Maschine

01:17:03.160 --> 01:17:07.240
H gibt, die das Halteproblem löst, dann kann ich eine Maschine T

01:17:07.240 --> 01:17:11.620
konstruieren, die die Sprache LNA akzeptiert, die werden wir jetzt wie

01:17:11.620 --> 01:17:12.540
folgt konstruieren.

01:17:12.540 --> 01:17:14.520
Das kommt jetzt auf dieser Folie.

01:17:15.760 --> 01:17:16.940
Was ist die Eingabe?

01:17:17.920 --> 01:17:21.760
Wir wollen also zeigen, wir können eine Turing-Maschine konstruieren,

01:17:21.960 --> 01:17:23.960
die diese Sprache LNA akzeptiert.

01:17:23.960 --> 01:17:35.370
LNA war die Sprache, das war die folgende Sprache, die Sprache W.

01:17:36.330 --> 01:17:38.290
Quatsch, die Menge aller Wörter W.

01:17:39.730 --> 01:17:45.950
Ich hatte gerade gesagt, die Menge aller WI, sodass WI nicht aus der

01:17:45.950 --> 01:17:48.970
Sprache ist, der I die Turing-Maschine.

01:17:49.950 --> 01:17:50.930
Das war das LNA.

01:17:55.650 --> 01:17:59.510
Wobei wir eben davon ausgehen, eigentlich hätte ich schreiben müssen,

01:17:59.750 --> 01:18:00.350
Menge aller W,

01:18:04.310 --> 01:18:10.690
sodass, das W hat ja irgendeinen Index, dass die Maschine mit dem

01:18:10.690 --> 01:18:14.450
Index dieses Wortes eine Sprache akzeptiert, in der das WI selbst

01:18:14.450 --> 01:18:14.970
nicht drin ist.

01:18:15.790 --> 01:18:18.290
Das ist hier aber nochmal dargestellt, so wie letztes Mal auch.

01:18:18.290 --> 01:18:22.730
Das ist also die Eingabe, wir wollen jetzt für ein Wort W überprüfen,

01:18:23.050 --> 01:18:25.790
ob dieses Wort in der Sprache LNA drin ist oder nicht.

01:18:25.970 --> 01:18:31.910
Das heißt, dieser Algorithmus, die Maschine soll uns sagen, ja, wenn

01:18:31.910 --> 01:18:34.370
das Wort aus LNA ist.

01:18:35.010 --> 01:18:38.570
Und andernfalls soll die Maschine sagen, nein.

01:18:39.110 --> 01:18:39.850
True oder false.

01:18:40.730 --> 01:18:41.870
Soll ja oder nein sagen.

01:18:43.150 --> 01:18:44.050
Was mache ich?

01:18:44.130 --> 01:18:47.970
Ich muss erstmal rausfinden, was ist der Index dieses Wortes.

01:18:47.970 --> 01:18:48.630
Ein W.

01:18:49.350 --> 01:18:52.530
Also bestimme ich erstmal den Index dieses Wortes.

01:18:53.070 --> 01:18:54.230
Das kann ich machen.

01:18:54.750 --> 01:18:58.250
Die Ordnung, wie ich also die Wörter über einem Alphabet E

01:18:58.250 --> 01:19:02.410
aufschreiben kann, das hatten wir uns überlegt.

01:19:02.570 --> 01:19:06.890
Das ist etwas, was ich hier auf jeden Fall hinschreiben kann.

01:19:06.970 --> 01:19:10.090
Ich kann genau den Index des Wortes bestimmen in Bezug auf eine

01:19:10.090 --> 01:19:11.190
Anordnung dieser Wörter.

01:19:11.850 --> 01:19:13.650
Die Anordnung kann ich berechenbar gestalten.

01:19:14.470 --> 01:19:24.230
Ich bestimme mein Ti, die Beschreibung der Iten-Turing-Maschine.

01:19:24.730 --> 01:19:30.890
Ich kann die Beschreibung der Turing-Maschinen alle aufschreiben und

01:19:30.890 --> 01:19:34.370
kann so den Index der Iten-Turing-Maschine bestimmen.

01:19:35.430 --> 01:19:37.630
Jede Turing-Maschine hat irgendeinen Index.

01:19:37.810 --> 01:19:40.530
Ich kann also die Ite-Turing-Maschine bestimmen, das Ti.

01:19:41.210 --> 01:19:46.750
Und jetzt simuliere ich die Maschine H.

01:19:47.650 --> 01:19:52.410
Also in diesem Algorithmus, den ich hier baue, simuliere ich jetzt die

01:19:52.410 --> 01:19:53.170
Maschine H.

01:19:53.270 --> 01:19:56.150
Die Maschine H war die Haltemaschine.

01:19:56.250 --> 01:20:00.230
Die Maschine, die überprüft, ob eine beliebige Turing-Maschine für

01:20:00.230 --> 01:20:01.950
eine beliebige Eingabe hält oder nicht.

01:20:03.230 --> 01:20:10.710
Also ich frage, das ist die Simulation, ich frage, hält die Maschine

01:20:10.710 --> 01:20:12.710
Ti angesetzt auf Wi an?

01:20:13.370 --> 01:20:16.350
Diese Frage kann die Maschine H beantworten.

01:20:16.670 --> 01:20:17.550
Das war die Annahme.

01:20:18.790 --> 01:20:22.890
Die Maschine H simuliere ich jetzt mit meiner Turing-Maschine T, die

01:20:22.890 --> 01:20:23.970
ich hier konstruieren möchte.

01:20:25.610 --> 01:20:32.590
Also ich lasse im Prinzip H laufen und bekomme von H, von dieser

01:20:32.590 --> 01:20:35.670
Turing -Maschine eine Antwort auf diesen Test.

01:20:36.430 --> 01:20:38.470
Hält Ti angesetzt auf Wi?

01:20:39.670 --> 01:20:46.790
Wenn ich die Antwort habe, dann kann ich entsprechend der Antwort

01:20:46.790 --> 01:20:48.150
unterschiedlich vorgehen.

01:20:48.890 --> 01:20:54.550
Das heißt, wenn sie hält, dann nehme ich meine universelle Turing

01:20:54.550 --> 01:21:00.990
-Maschine her und simuliere die Turing-Maschine Ti mit der Eingabe Wi.

01:21:02.410 --> 01:21:06.490
Die Turing-Maschine Ti ist irgendeine Turing-Maschine, die kann ich

01:21:06.490 --> 01:21:10.410
simulieren mit U, mit meiner universellen Turing-Maschine und kann sie

01:21:10.410 --> 01:21:16.810
auf Wi laufen lassen, auf Wi arbeiten lassen und bekomme dann von

01:21:16.810 --> 01:21:20.650
dieser Turing-Maschine, da sie ja hält, das steht hier oben, in

01:21:20.650 --> 01:21:23.070
endlicher Zeit eine Antwort auf diese Frage.

01:21:23.690 --> 01:21:25.490
Ist Wi aus L von Ti?

01:21:26.530 --> 01:21:30.450
Ich weiß, diese Antwort wird mir in endlicher Zeit geliefert, weil die

01:21:30.450 --> 01:21:33.190
Maschine ja hält.

01:21:34.010 --> 01:21:39.250
Ich bin in diesem Zweig drin, dieses If-Statements, die Maschine hält.

01:21:39.730 --> 01:21:42.610
Weil sie hält, kann ich diese Frage stellen, ich bekomme nach endlich

01:21:42.610 --> 01:21:47.350
vielen Schritten die Antwort, ist das Wort Wi aus L von Ti oder nicht?

01:21:47.650 --> 01:21:54.430
Wenn es aus L von Ti ist, dann wissen wir, kann das Wort Wi nicht in

01:21:54.430 --> 01:21:58.150
der Sprache LNA sein, das heißt die Ausgabe muss dann sein falsch.

01:21:59.230 --> 01:22:04.450
Wenn das Wi nicht aus L von Ti ist, dann wissen wir, das Element Wi

01:22:04.450 --> 01:22:05.610
ist in LNA drin.

01:22:06.330 --> 01:22:07.990
Dann haben wir also diese Entscheidung getroffen.

01:22:09.650 --> 01:22:15.590
Das war der Zweig für die Aussage, das Ti hält, angesetzt auf Wi an.

01:22:16.410 --> 01:22:22.590
Und wenn das Ti nicht hält, angesetzt auf Wi, dann wissen wir, dieses

01:22:22.590 --> 01:22:28.870
Wort Wi kann von L von Ti nicht akzeptiert werden, hält nicht in

01:22:28.870 --> 01:22:31.670
endlicher Zeit an, das hat uns die Haltemaschine gesagt.

01:22:32.250 --> 01:22:38.030
Und deswegen müssen wir auch dann sagen, dieses Wort Wi ist dann

01:22:38.030 --> 01:22:42.470
natürlich in LNA, weil das Wort Wi nicht in der Sprache von Ti ist.

01:22:43.850 --> 01:22:46.250
Die Maschine Ti hält ja nicht an auf Wi.

01:22:46.250 --> 01:22:51.710
Und damit haben wir genau entscheiden können, oder nicht entscheiden

01:22:51.710 --> 01:23:00.510
können, sondern festlegen können, wie diese Sprache LNA von einer

01:23:00.510 --> 01:23:02.630
Turing -Maschine akzeptiert werden kann.

01:23:04.150 --> 01:23:08.270
Die sind genau die Schritte und das Wesentliche war, dieser Punkt,

01:23:10.350 --> 01:23:17.590
diese Annahme, wir können durch eine Turing-Maschine H überprüfen, ob

01:23:17.590 --> 01:23:22.550
die Turing-Maschine Ti bei Eingabe des Wortes Wi hält oder nicht.

01:23:23.170 --> 01:23:26.170
Das war die entscheidende Annahme, denn sobald wir das entscheiden

01:23:26.170 --> 01:23:31.470
können, können wir auch die Frage beantworten, ob Wi aus L von Ti ist

01:23:31.470 --> 01:23:36.110
oder nicht und können damit genau diese Antwort geben auf die Frage,

01:23:36.250 --> 01:23:38.470
ob Wi in LNA ist oder nicht.

01:23:39.350 --> 01:23:43.410
Und das ist eindeutig ein Widerspruch zu unserem kurzen Beweis, dass

01:23:43.410 --> 01:23:46.490
die Sprache LNA von keiner Turing-Maschine akzeptiert werden kann.

01:23:47.790 --> 01:23:51.190
Hier zeige ich, wie das trotzt, wie das geht, basiert aber auf der

01:23:51.190 --> 01:23:56.050
Annahme, dass ich diese Frage in endlicher Zeit beantworten kann.

01:23:56.550 --> 01:23:57.950
Also muss die Annahme falsch sein.

01:23:59.750 --> 01:24:02.850
Das ist die wesentliche Annahme, ich habe angenommen, ich kann

01:24:02.850 --> 01:24:06.270
entscheiden, daraus folgt eine Aussage, von der ich weiß, dass sie

01:24:06.270 --> 01:24:09.330
falsch ist, also kann das nicht gestimmt haben.

01:24:10.090 --> 01:24:16.150
Und damit wissen wir, dass die Annahme nicht gilt.

01:24:16.510 --> 01:24:20.210
Es kann nicht sein, dass das Halteproblem entscheidbar ist.

01:24:20.430 --> 01:24:26.070
Das ist also die wesentliche Aussage und damit wissen wir, das

01:24:26.070 --> 01:24:27.430
Halteproblem ist unentscheidbar.

01:24:27.610 --> 01:24:30.070
Können Sie sagen, das Halteproblem interessiert mich nicht.

01:24:30.990 --> 01:24:34.010
Wir werden sehen, dass es eine ganze Reihe anderer Fragen gibt, die

01:24:34.010 --> 01:24:35.870
daraus folgen, die auch unentscheidbar sind.

01:24:37.810 --> 01:24:44.130
Kurze Bemerkung, wenn ich mich jetzt nur konzentriere auf eine

01:24:44.130 --> 01:24:50.990
Teilmenge, ich definiere eine Sprache LH, H für Haltend, das ist die

01:24:50.990 --> 01:24:54.930
Menge aller Wörter, die bestehen aus einer Beschreibung einer Turing

01:24:54.930 --> 01:24:59.550
-Maschine und einem Wort, sodass diese Turing-Maschine T angesetzt auf

01:24:59.550 --> 01:25:00.210
W hält.

01:25:00.830 --> 01:25:05.210
Das ist eine gewisse Sprache, kann ich als Sprache über 0,1

01:25:05.210 --> 01:25:09.030
definieren, entsprechend einer Kodierung der Turing-Maschine,

01:25:09.250 --> 01:25:13.290
Kodierung des Wortes, sodass das T angesetzt auf W hält.

01:25:13.470 --> 01:25:17.670
Das wäre also die Menge aller Beschreibungen von haltenden Instanzen

01:25:17.670 --> 01:25:18.910
von Turing-Maschinen.

01:25:20.230 --> 01:25:24.810
Diese Sprache kann ich akzeptieren durch eine Turing-Maschine.

01:25:24.810 --> 01:25:27.950
Durch ein ähnliches Verfahren, wie ich Ihnen das gerade eben

01:25:27.950 --> 01:25:32.150
dargestellt habe, weil ich dann nämlich, wenn ich weiß, das sind alles

01:25:32.150 --> 01:25:37.710
haltende Turing-Maschinen, dann kann ich ja die jeweils simulieren.

01:25:38.630 --> 01:25:41.970
Wenn ich weiß, hier sind nur solche Wörter drin, das heißt, das ist

01:25:41.970 --> 01:25:46.030
eine Sprache, hier steht L0, die kann ich aufzählen.

01:25:46.530 --> 01:25:50.570
Für jedes Wort aus dieser Sprache kann ich in endlicher Zeit

01:25:50.570 --> 01:25:55.110
feststellen, dass es in der Sprache ist.

01:25:55.410 --> 01:25:58.450
Ich kann also jedes Wort erzeugen von dieser Sprache.

01:25:59.230 --> 01:26:01.570
Ich kann aber nicht das Komplement aufzählen.

01:26:01.670 --> 01:26:05.710
Ich kann nicht für Wörter, die nicht darin sind, also ein Wort, das

01:26:05.710 --> 01:26:09.330
eine Turing-Maschine beschreibt, die für die Eingabe eines Wortes W

01:26:09.330 --> 01:26:13.710
nicht hält, das kann ich nicht überprüfen.

01:26:15.270 --> 01:26:18.790
Also hier kann man das noch ein bisschen etwas differenzieren.

01:26:18.790 --> 01:26:24.130
Das ist also eine Sprache, die ist tatsächlich aufzählbar, aber sie

01:26:24.130 --> 01:26:28.390
ist nicht entscheidbar.

01:26:29.710 --> 01:26:34.830
Das Komplement dieser Sprache ist nicht aufzählbar.

01:26:37.010 --> 01:26:41.050
Und das Interessante ist, wenn ich mir das eine Problem angucke, das

01:26:41.050 --> 01:26:45.590
zweite Problem, folgen daraus eine ganze Reihe weiterer Fragen, die

01:26:45.590 --> 01:26:47.410
auch nicht entscheidbar sind.

01:26:47.410 --> 01:26:54.090
Das erste einfache ist, dass ich von der Nichtentscheidbarkeit der

01:26:54.090 --> 01:26:57.670
Turing -Maschine sagen kann, ich kann das auch für beliebige Programme

01:26:57.670 --> 01:26:58.650
formulieren.

01:26:58.770 --> 01:27:02.310
Wenn ich also sage, ich brauche irgendetwas, was für ein beliebiges

01:27:02.310 --> 01:27:05.770
Programm entscheidet, ob das Programm hält oder nicht, dann ist das

01:27:05.770 --> 01:27:07.090
genauso nicht entscheidbar.

01:27:08.350 --> 01:27:11.490
Das heißt aber auch, ich kann nicht überprüfen, ob ein Programm total

01:27:11.490 --> 01:27:12.350
korrekt ist.

01:27:13.150 --> 01:27:15.330
Was heißt es, ein Programm ist total korrekt?

01:27:15.330 --> 01:27:19.370
Programm ist total korrekt heißt, ich habe eine Spezifikation meines

01:27:19.370 --> 01:27:26.230
Programms, das sagt, für jede zulässige Eingabe soll eine gewisse

01:27:26.230 --> 01:27:28.290
Ausgabe mit gewissen Eigenschaften entstehen.

01:27:28.390 --> 01:27:31.010
Das ist Spezifikation, eine Ausgabespezifikation.

01:27:31.730 --> 01:27:37.350
Und totale Korrektheit heißt, für jede akzeptable Eingabe meines

01:27:37.350 --> 01:27:43.630
Programms kann ich überprüfen, ob das Ergebnis den Anforderungen

01:27:43.630 --> 01:27:44.190
entspricht.

01:27:44.190 --> 01:27:46.190
Also ob das richtig ist.

01:27:46.630 --> 01:27:50.930
Das totale Korrektheit heißt, für jede Eingabe hält das Programm und

01:27:50.930 --> 01:27:52.310
das Ergebnis ist richtig.

01:27:53.070 --> 01:27:56.890
Um aber überprüfen zu können, ob das Programm für jede Eingabe hält,

01:27:57.790 --> 01:28:00.010
habe ich das Halteproblem als Teilproblem da drin.

01:28:00.470 --> 01:28:02.970
Und das Halteproblem kann ich nicht allgemein lösen.

01:28:03.190 --> 01:28:04.150
Das ist nicht entscheidbar.

01:28:04.650 --> 01:28:08.150
Das heißt, ich kann auch die totale Korrektheit eines Programms nicht

01:28:08.150 --> 01:28:09.050
entscheiden.

01:28:09.190 --> 01:28:11.210
Für beliebige Programme und beliebige Eingaben.

01:28:12.650 --> 01:28:16.890
Das heißt, ich kann nur über partielle Korrektheit reden.

01:28:17.430 --> 01:28:23.630
Für jede Eingabe eines Programms, bei dem das Programm hält, da kann

01:28:23.630 --> 01:28:27.230
ich überprüfen, ob das, was rauskommt, tatsächlich auch richtig ist

01:28:27.230 --> 01:28:27.690
oder nicht.

01:28:29.530 --> 01:28:33.150
Und das hat schon wieder eine weitere Konsequenz, wenn ich mir die

01:28:33.150 --> 01:28:36.030
Aufgabe anschaue, ich habe zwei Programme.

01:28:37.330 --> 01:28:41.770
Und diese zwei Programme, meinetwegen P und Q, die will ich daraufhin

01:28:41.770 --> 01:28:44.270
überprüfen, ob sie die gleiche Funktion berechnen.

01:28:45.670 --> 01:28:49.170
Sie bekommen zwei, Sie wollen sich ein Verfahren überlegen, bei dem

01:28:49.170 --> 01:28:51.670
Sie für beliebige Programme, die Ihnen geliefert werden, überprüfen

01:28:51.670 --> 01:28:51.990
können.

01:28:52.250 --> 01:28:53.310
Machen die das Gleiche?

01:28:54.750 --> 01:28:57.150
Dann ist auch diese Frage allgemein nicht entscheidbar.

01:28:57.690 --> 01:28:59.650
Sie können kein solches Verfahren angeben.

01:28:59.730 --> 01:29:03.630
Sie können das für eine Teilklasse von Programmen machen.

01:29:04.190 --> 01:29:05.990
Aber nicht für beliebige Programme.

01:29:06.250 --> 01:29:06.810
Warum nicht?

01:29:06.810 --> 01:29:13.010
Es könnte ja sein, dass ich Ihnen ein Programm gebe, das im Prinzip

01:29:13.010 --> 01:29:16.470
eine Schleife, wenn ich da genau reingucke, dann ist da irgendeine

01:29:16.470 --> 01:29:17.470
Schleife drin.

01:29:18.090 --> 01:29:20.570
Dieses Programm hält nie.

01:29:22.670 --> 01:29:27.870
Da wäre aber eine Äquivalenz dieser beiden Programme nur gegeben, wenn

01:29:27.870 --> 01:29:29.750
auch das Programm P nie hält.

01:29:30.770 --> 01:29:33.530
Das kann ich aber nicht entscheiden für ein beliebiges Programm.

01:29:34.330 --> 01:29:38.450
Das heißt, ich habe hier als Teilproblem der Äquivalenz von zwei

01:29:38.450 --> 01:29:40.790
beliebigen Programmen das Halteproblem drin.

01:29:41.370 --> 01:29:43.190
Also ist dieses Problem auch nicht entscheidbar.

01:29:44.410 --> 01:29:45.410
Jetzt geht es noch weiter.

01:29:46.370 --> 01:29:50.610
Ich gebe Ihnen beliebige kontextfreie Grammatiken G und G'.

01:29:52.110 --> 01:29:53.930
Kontextfreie Grammatiken sind ja ganz einfach.

01:29:54.090 --> 01:29:57.230
Da waren ja immer nur solche Nicht-Terminalzeichen und rechts konnte

01:29:57.230 --> 01:30:00.810
irgendwas stehen, zum Beispiel irgendwie A auf BC, also das war, wenn

01:30:00.810 --> 01:30:05.430
wir Chomsky Normalform nehmen, A auf BC oder A auf A, nur von diesem

01:30:05.430 --> 01:30:07.330
Typ, ganz einfache Grammatiken.

01:30:09.530 --> 01:30:13.930
Für beliebige kontextfreie Grammatiken kann ich für beliebige

01:30:13.930 --> 01:30:18.950
kontextfreie Grammatiken entscheiden, ob die äquivalent sind oder

01:30:18.950 --> 01:30:20.610
nicht, ob die die gleiche Sprache erzeugen.

01:30:22.390 --> 01:30:25.750
Auch das kann man nachweisen, ist nicht entscheidbar.

01:30:27.070 --> 01:30:31.370
Das heißt, für beliebige Grammatiken geht das nicht.

01:30:31.510 --> 01:30:32.630
Sie müssen sich einschränken.

01:30:34.030 --> 01:30:37.890
Und das ist einfach etwas, was ich Ihnen vermitteln möchte an dieser

01:30:37.890 --> 01:30:38.250
Stelle.

01:30:39.030 --> 01:30:42.810
Man muss sich genauer angucken, wenn Ihnen ein Problem gegeben wird,

01:30:43.610 --> 01:30:46.530
wie sind die Eigenschaften dieses Problems?

01:30:46.610 --> 01:30:50.650
Kann ich das überhaupt formal bearbeiten oder kann ich nur einen

01:30:50.650 --> 01:30:54.270
kleinen Ausschnitt davon tatsächlich entscheiden über einen

01:30:54.270 --> 01:30:54.910
Algorithmus?

01:30:57.010 --> 01:30:59.530
Also wenn Sie nachweisen können, bei einem Auftrag, den Sie kriegen,

01:30:59.650 --> 01:31:02.470
das ist gar nicht entscheidbar, dann geben Sie sofort den Auftrag

01:31:02.470 --> 01:31:05.150
zurück oder sagen, ich bewerbe mich nur für einen Teil davon.

01:31:05.690 --> 01:31:08.250
Den Rest kann man gar nicht machen.

01:31:09.730 --> 01:31:13.790
Also das ist die wichtige Erkenntnis, es gibt Fragen praktischer

01:31:13.790 --> 01:31:16.710
Bedeutung, bei denen man weiß, die sind nicht entscheidbar.

01:31:17.770 --> 01:31:22.890
Und dann kommt natürlich, gut, hier nochmal kurze Bemerkung zu dem,

01:31:22.890 --> 01:31:25.590
was wir uns eigentlich jetzt überlegt haben.

01:31:26.050 --> 01:31:28.070
Wir kommen gleich dann noch auf das nächste Problem.

01:31:28.190 --> 01:31:31.010
Wenn ich weiß, ich kann etwas berechnen, wie ist eigentlich der

01:31:31.010 --> 01:31:31.670
Aufwand dafür?

01:31:31.750 --> 01:31:32.610
Da kommen wir gleich drauf.

01:31:32.950 --> 01:31:35.510
Aber erstmal nochmal kurz eine Bemerkung, das ist jetzt das, was wir

01:31:35.510 --> 01:31:38.950
uns überlegt haben, die ganzen Sprachklassen der Chomsky-Hierarchie.

01:31:39.450 --> 01:31:43.090
Wir haben also jetzt ziemlich gut Kenntnis über diese Struktur der

01:31:43.090 --> 01:31:44.170
Menge der Sprachen.

01:31:45.090 --> 01:31:48.950
Wenn wir uns die Chomsky-Hierarchie anschauen, also die Typen 3, 2, 1,

01:31:49.050 --> 01:31:53.610
0 Sprachen, oben drüber beliebige Sprachen, von denen wir wissen, da

01:31:53.610 --> 01:31:57.010
gibt es auch welche, die nicht ein 0 sind, wie eben dieses LNA zum

01:31:57.010 --> 01:31:57.450
Beispiel.

01:31:59.750 --> 01:32:01.690
Und das ist die Struktur der Sprachen.

01:32:02.550 --> 01:32:04.930
Man muss sich enttäuschen, es gibt leider auch noch andere Modelle.

01:32:05.990 --> 01:32:07.990
Es gibt zum Beispiel Lindenmayr-Systeme.

01:32:08.890 --> 01:32:09.830
Noch ein Wissenschaftler.

01:32:10.410 --> 01:32:14.590
Lindenmayr war kein Sprachtheoretiker, Lindenmayr ist ein Biologe, ein

01:32:14.590 --> 01:32:14.830
Systembiologe.

01:32:16.170 --> 01:32:19.970
Und der Lindenmayr hat sich angeguckt, es gibt so Wachstumsprozesse.

01:32:21.390 --> 01:32:27.450
Irgendein Element wächst und wachsen heißt, irgendwelche Zellen teilen

01:32:27.450 --> 01:32:27.850
sich.

01:32:29.030 --> 01:32:31.590
Und wenn sich Zellen teilen, dann machen sie das häufig parallel.

01:32:31.950 --> 01:32:34.850
Das kann ich jetzt nicht machen, weil ich nur einen Stift habe.

01:32:36.610 --> 01:32:40.750
Dann entstehen irgendwelche Strukturen, da wächst irgendetwas.

01:32:41.570 --> 01:32:43.330
Wachsen geschieht durch Zellteilung.

01:32:43.490 --> 01:32:44.710
Was ist denn eine Zellteilung?

01:32:45.370 --> 01:32:49.990
Aus einer Zelle A entsteht irgendetwas, meinetwegen BB.

01:32:51.150 --> 01:32:54.570
Oder vielleicht entsteht da auch etwas AA oder sowas.

01:32:55.150 --> 01:33:02.350
Und wenn ich irgendein Wort habe, meinetwegen A, B, A, A, und ich habe

01:33:02.350 --> 01:33:06.790
diese Regeln hier, A, BB oder A, A, A, dann kann ich auf einmal daraus

01:33:06.790 --> 01:33:09.970
in einem Schritt, wenn ich das parallel mache, erzeugen.

01:33:10.030 --> 01:33:13.350
Zum Beispiel hier gehe ich auf BB, das eine B bleibt stehen, das

01:33:13.350 --> 01:33:16.930
nächste A geht auf AA, das nächste A auch auf AA.

01:33:17.710 --> 01:33:20.510
Dann habe ich auf einmal, wenn ich sage, ich habe jetzt sowas wie

01:33:20.510 --> 01:33:27.030
parallele Zellteilung, dann mache ich eine kleine Modifikation meiner

01:33:27.030 --> 01:33:30.050
Ableitungsregeln bei formalen Sprachen und sage, ich mache das nicht

01:33:30.050 --> 01:33:34.610
sequenziell, dass ich jedes einzelne Nicht-Terminalsymbol ersetze

01:33:34.610 --> 01:33:38.070
durch das, was auf der rechten Seite steht, sondern ich mache das

01:33:38.070 --> 01:33:40.090
parallel, gleichzeitig.

01:33:41.330 --> 01:33:45.510
Das ist das, was wir in der Natur sehen, dass Zellteilungen parallel

01:33:45.510 --> 01:33:46.010
passieren.

01:33:46.130 --> 01:33:48.050
Und das wollte der Lindenmaier genau untersuchen.

01:33:48.930 --> 01:33:53.830
Wie kann ich eigentlich Wachstumsprozesse in der Natur durch formale

01:33:53.830 --> 01:33:55.170
Systeme untersuchen?

01:33:56.090 --> 01:34:00.870
Man hat dafür Modelle entwickelt, die man eben so auf diese Art und

01:34:00.870 --> 01:34:03.570
Weise beschreiben kann, durch parallele Ableitungen.

01:34:04.490 --> 01:34:08.370
Das gibt dann auch wieder eine Hierarchie von solchen verschiedenen

01:34:08.370 --> 01:34:09.270
Lindenmaier -Systemen.

01:34:09.350 --> 01:34:11.470
Da kann ich wiederum die verschiedenen Regeln aufschreiben.

01:34:11.470 --> 01:34:16.190
Ich kann das kontextsensitiv, kontextfrei machen und kann da

01:34:16.190 --> 01:34:18.110
verschiedenste Sachen aufschreiben.

01:34:19.150 --> 01:34:23.030
Und kann, wenn ich mir kontextfreie Regeln hernehme, kann ich schon

01:34:23.030 --> 01:34:25.450
sehr viel untersuchen und kann dann das Wachstum von Organismen

01:34:25.450 --> 01:34:25.890
beschreiben.

01:34:27.750 --> 01:34:30.290
Was ähnlich ist, sind die ganzen Fraktale.

01:34:31.490 --> 01:34:35.550
Fraktale sind auch im Prinzip endliche Systeme, Ersetzungsregeln, mit

01:34:35.550 --> 01:34:37.590
denen ich neue Strukturen erzeuge.

01:34:37.950 --> 01:34:40.170
Damit können Sie sehr komplexe Bilder erzeugen.

01:34:40.170 --> 01:34:45.630
Also solche formalen Modelle, endliche Systeme, mit denen Sie komplexe

01:34:45.630 --> 01:34:49.650
Systeme beschreiben können oder komplexe Prozesse, gibt es nicht nur

01:34:49.650 --> 01:34:53.330
zur Beschreibung von Sprachen, sondern auch von anderen Dingen, wie

01:34:53.330 --> 01:34:58.090
eben hier zur Beschreibung des Wachstums von Organismen.

01:34:58.790 --> 01:35:02.850
Ein anderer Punkt ist, wie gesagt, hier sind die Sprachen dann ganz

01:35:02.850 --> 01:35:05.870
anders strukturiert als die Chomsky-Sprachen.

01:35:06.490 --> 01:35:11.990
Wenn wir uns noch wieder etwas anderes angucken, bei den Automaten, da

01:35:11.990 --> 01:35:14.490
muss nicht immer alles deterministisch laufen, es geht auch nicht

01:35:14.490 --> 01:35:15.250
deterministisch.

01:35:15.850 --> 01:35:18.650
Nicht deterministisch hieß aber nur, wir haben eine gewisse

01:35:18.650 --> 01:35:20.990
Unsicherheit über das, was passiert.

01:35:21.450 --> 01:35:24.970
Der Automat wird aber natürlich irgendeine Fahrt, irgendeine

01:35:24.970 --> 01:35:29.290
Möglichkeit dort nachvollziehen, wird also irgendeinen Pfad durch die

01:35:29.290 --> 01:35:32.590
Möglichkeit oder durch die möglichen Wege durchlaufen.

01:35:33.330 --> 01:35:36.990
Wir hatten gesagt, da wird ein Wort akzeptiert, wenn es überhaupt

01:35:36.990 --> 01:35:39.210
irgendeine Möglichkeit gibt, dort hinzukommen.

01:35:39.690 --> 01:35:43.690
Bei den stochastischen Automaten, da ist es so, dass bei jedem

01:35:43.690 --> 01:35:47.110
Zustandsübergang, wenn wir also hier von einem Zustand S auf einen

01:35:47.110 --> 01:35:51.730
Zustand T übergehen, bei Eingabe eines Wortes W, dass wir dabei noch

01:35:51.730 --> 01:35:55.370
eine gewisse Wahrscheinlichkeit P haben, mit der dieser Übergang

01:35:55.370 --> 01:35:56.230
stattfinden wird.

01:35:56.310 --> 01:35:58.830
Was ähnliches wie Markov-Modelle oder ähnliche Dinge.

01:35:59.650 --> 01:36:02.590
Markov-Prozesse sind was ganz Ähnliches wie stochastische Automaten.

01:36:03.770 --> 01:36:06.910
Und da können Sie auf einmal für Sprachen definieren oder für Wörter

01:36:06.910 --> 01:36:11.050
definieren, wann solche Wörter akzeptiert werden, wenn sie nämlich mit

01:36:11.050 --> 01:36:15.550
einer gewissen Mindestwahrscheinlichkeit zu einem Endzustand führen.

01:36:16.450 --> 01:36:19.870
Und darüber kriegen Sie dann wieder eine Klassifizierung verschiedener

01:36:19.870 --> 01:36:23.210
Sprachen, die völlig quer liegt zu diesen Sprachen der Chomsky

01:36:23.210 --> 01:36:23.520
-Hierarchie.

01:36:24.230 --> 01:36:29.510
Nur um anzudeuten, diese Modelle zur Beschreibung von Sprachen sind

01:36:29.510 --> 01:36:32.610
deutlich vielfältiger als nur das, was wir in der Chomsky-Hierarchie

01:36:32.610 --> 01:36:33.370
betrachtet haben.

01:36:34.030 --> 01:36:37.090
Chomsky-Hierarchie ist aber das, was wir brauchen, wenn wir die Frage

01:36:37.090 --> 01:36:41.710
beantworten wollen, mit der wir uns zu Anfang gestellt haben.

01:36:41.910 --> 01:36:45.450
Was ist das richtige Modell, um Programmiersprachen zu beschreiben?

01:36:45.950 --> 01:36:51.130
Und dafür waren die Chomsky-Grammatiken die richtige formale

01:36:51.130 --> 01:36:51.710
Modellierung.

01:36:52.370 --> 01:36:56.990
Aber es gibt viele andere Dinge, die man ähnlich untersuchen kann.

01:36:56.990 --> 01:37:00.570
Wie gesagt, Lindenmeier-Systeme, stochastische Automaten, bei denen

01:37:00.570 --> 01:37:05.070
man einfach an der Art, wie wir diese Prozesse gestalten, etwas tut.

01:37:05.650 --> 01:37:09.990
Bei Lindenmeier-Systemen machen wir diese Übertragungen, also diese

01:37:09.990 --> 01:37:12.150
Ersetzungen parallel auf einmal.

01:37:12.610 --> 01:37:17.070
Bei stochastischen Automaten geht es um Wahrscheinlichkeiten für den

01:37:17.070 --> 01:37:19.010
Übergang von einem Zustand in den anderen.

01:37:20.170 --> 01:37:23.250
Insgesamt haben wir jetzt diese Tabelle weitgehend ausgefüllt, die wir

01:37:23.250 --> 01:37:24.390
uns hier aufgemalt haben.

01:37:25.090 --> 01:37:28.910
Jetzt in den letzten Doppelstunden haben wir herausgefunden, dass es

01:37:28.910 --> 01:37:32.450
entscheidbare Sprachen, das habe ich Ihnen nicht gezeigt, dass es also

01:37:32.450 --> 01:37:35.170
entscheidbare Sprachen gibt, die nicht kontextsensitiv sind.

01:37:36.010 --> 01:37:39.230
Es gibt aber aufzielbare Sprachen.

01:37:40.070 --> 01:37:43.510
Ich hatte Ihnen gezeigt, oder kurz beschrieben definiert, die Sprache

01:37:43.510 --> 01:37:48.330
LH, eine Sprache, die aufzielbar ist, aber nicht entscheidbar.

01:37:48.870 --> 01:37:51.670
Aber eben eine L0-Sprache akzeptiert werden kann durch eine Turing

01:37:51.670 --> 01:37:52.070
-Maschine.

01:37:52.070 --> 01:37:57.290
Ich hatte Ihnen die Sprache angegeben und gezeigt, diese Sprache LNA

01:37:57.290 --> 01:38:00.890
ist nicht durch eine Turing-Maschine akzeptierbar, also nicht in L0.

01:38:01.810 --> 01:38:05.630
Und damit wissen wir etwas eben deutlich mehr über diese verschiedenen

01:38:05.630 --> 01:38:06.470
Strukturen.

01:38:07.210 --> 01:38:10.570
Wir wissen auch, wenn wir beliebige Sprachen haben, dann kann

01:38:10.570 --> 01:38:13.770
natürlich der Aufwand zur Akzeptierung beliebig groß werden.

01:38:14.290 --> 01:38:19.110
Exponentiell ist ja immer noch deutlich, also in einem kleinen

01:38:19.110 --> 01:38:22.950
Bereich, wir können ja auch etwas hyper-exponentiell haben, 2 hoch 2

01:38:22.950 --> 01:38:26.070
hoch N oder 2 hoch und hier irgendwas hoch N.

01:38:26.650 --> 01:38:30.930
Beliebig hoch exponentiell kann etwas sein, vom Aufwand her.

01:38:32.190 --> 01:38:35.390
Die erste Exponentialstufe ist schon schwierig genug.

01:38:36.130 --> 01:38:39.370
Es kann natürlich darüber hinaus noch wesentlich schwierigere Probleme

01:38:39.370 --> 01:38:40.850
geben und gibt es auch genügend.

01:38:41.290 --> 01:38:44.530
Wir müssen sehen, dass wir uns mit Problemen beschäftigen, die

01:38:45.290 --> 01:38:47.930
einigermaßen vernünftig zu bearbeiten sind.

01:38:47.930 --> 01:38:51.610
Das heißt, wir müssen uns damit beschäftigen, nicht nur, ist etwas

01:38:51.610 --> 01:38:55.190
prinzipiell, entscheidbar oder nicht entscheidbar oder berechenbar

01:38:55.190 --> 01:38:58.870
oder nicht berechenbar, sondern welche Kosten verursacht das?

01:38:59.930 --> 01:39:04.970
Der Mathematiker fragt nur, ist etwas entscheidbar oder nicht?

01:39:05.410 --> 01:39:07.330
Ist ein Problem lösbar oder nicht?

01:39:08.330 --> 01:39:10.830
Wie groß der Aufwand ist, interessiert den eigentlich normalerweise

01:39:10.830 --> 01:39:11.430
überhaupt nicht.

01:39:11.890 --> 01:39:15.030
Uns interessiert das selbstverständlich, was kostet die Berechnung

01:39:15.030 --> 01:39:18.290
einer Funktion, das interessiert jeden Informatiker und erst recht

01:39:18.290 --> 01:39:19.310
jeden Wirtschaftsingenieur.

01:39:20.450 --> 01:39:24.350
Was sind die Kosten, die ich investieren muss, um bestimmte Aufgaben

01:39:24.350 --> 01:39:25.230
erfüllen zu können?

01:39:25.650 --> 01:39:27.770
Und wenn die Kosten zu hoch sind, dann gucke ich mir an, kann ich

01:39:27.770 --> 01:39:30.810
eventuell mit einer eingeschränkten Variante dieser Funktionalität

01:39:30.810 --> 01:39:34.350
arbeiten, die ich mit weniger Aufwand realisieren kann.

01:39:35.590 --> 01:39:40.970
Also Kosten anzugucken ist ein ganz wesentlicher Punkt, sowohl bei

01:39:40.970 --> 01:39:44.530
Informatikern als auch insbesondere bei Wirtschaftsingenieuren.

01:39:45.210 --> 01:39:49.110
Und natürlich ist es so, dass die Kosten für eine Berechnung abhängen

01:39:49.110 --> 01:39:52.850
vom Berechnungsmodell und vom verwendeten Algorithmus.

01:39:53.530 --> 01:39:56.730
Wenn ich eine Turing-Maschine nehme, mit diesem endlos langen Band,

01:39:57.670 --> 01:40:01.450
dann ist allein die Aufgabe zu überprüfen, was stand eigentlich

01:40:01.450 --> 01:40:03.150
irgendwo vorne bei dem Band.

01:40:04.230 --> 01:40:08.070
Also wenn ich hier mein sehr langes Band habe, ich bin irgendwo da

01:40:08.070 --> 01:40:10.730
hinten und will nachgucken, was stand eigentlich hier vorne.

01:40:10.730 --> 01:40:14.090
Dann muss ich das ganze Ende zurücklaufen, angucken, was da gestanden

01:40:14.090 --> 01:40:17.990
hat, mir das merken und laufe hier wieder zurück und kann da irgendwas

01:40:17.990 --> 01:40:18.430
schreiben.

01:40:20.390 --> 01:40:22.010
Das dauert natürlich sehr lange.

01:40:22.810 --> 01:40:26.270
Wenn ich ein anderes Modell habe, bei dem ich einfach einen Speicher

01:40:26.270 --> 01:40:29.370
habe, bei dem ich sage, was stand eigentlich hier oben, ich bin hier

01:40:29.370 --> 01:40:32.310
unten, habe mir das angeschaut, will nachgucken, was steht da oben,

01:40:32.390 --> 01:40:33.930
dann gehe ich einfach da hin und schaue nach.

01:40:35.610 --> 01:40:39.230
Wenn ich darauf wahlfrei zugreifen kann, habe ich ein ganz anderes

01:40:39.230 --> 01:40:39.630
Modell.

01:40:41.330 --> 01:40:44.930
Das heißt, wenn das in einem Schritt möglich ist, ist das ja etwas

01:40:44.930 --> 01:40:45.950
viel schnelleres.

01:40:46.010 --> 01:40:47.690
Also das Berechnungsmodell ist ganz wichtig.

01:40:48.970 --> 01:40:51.610
Ich hatte zwar gesagt, im Prinzip reicht das Turing-Maschinen-Modell

01:40:51.610 --> 01:40:55.750
aus, aber es ist durchaus wichtig, ob etwas Linearzeit dauert oder

01:40:56.990 --> 01:41:00.110
quadratisch, kubisch oder N hoch 4 oder N hoch 5 oder sowas.

01:41:00.750 --> 01:41:03.270
Auf diese Unterschiede kommt es uns nicht an, wenn wir nur Turing

01:41:03.270 --> 01:41:06.850
-Maschinen betrachten, aber bei realen Aufwandsabschätzungen schon.

01:41:07.990 --> 01:41:13.010
Also, wir wollen im Prinzip Antworten haben, bezüglich von Klassen

01:41:13.010 --> 01:41:14.430
ähnlicher Berechnungsmodelle.

01:41:15.530 --> 01:41:18.490
Zum Beispiel wollen wir unterscheiden, sequenzielle Berechnungen mit

01:41:18.490 --> 01:41:21.510
elementaren Operationen und parallele Berechnungen mit elementaren

01:41:21.510 --> 01:41:21.790
Operationen.

01:41:22.650 --> 01:41:26.750
Kann ich auf einem Multicore oder Manicore Rechner oder auf einem

01:41:26.750 --> 01:41:29.030
hochparallelen Rechner, was kann ich da eigentlich besser machen als

01:41:29.030 --> 01:41:29.530
auf dem anderen?

01:41:30.470 --> 01:41:34.470
Kann ich dort alle Funktionen entsprechend mit dem Zeitgewinn

01:41:34.470 --> 01:41:36.030
berechnen oder nicht?

01:41:37.030 --> 01:41:38.510
Muss man sich genauer angucken.

01:41:39.230 --> 01:41:41.570
Und die üblichen Ansätze sind, eben verschiedene Modelle zu

01:41:41.570 --> 01:41:45.090
betrachten, zum Beispiel Turing-Maschine oder Register-Maschine oder

01:41:45.090 --> 01:41:49.150
Random -Axis-Machines oder Parallel-Random-Axis-Machines.

01:41:50.770 --> 01:41:55.450
Ich werde über die parallelen Verfahren Ihnen hier nicht viel erzählen

01:41:55.450 --> 01:41:57.470
können, das mache ich in der Vorlesung effizienter Algorithmen.

01:41:58.290 --> 01:42:02.630
Da geht es um beliebige oder über die sinnvolle Nutzung beliebiger

01:42:02.630 --> 01:42:05.730
Rechner -Infrastrukturen, insbesondere auch von parallelen Strukturen.

01:42:06.350 --> 01:42:09.750
Hier werden wir uns nur auf die Turing-Maschinen beschränken und

01:42:09.750 --> 01:42:14.270
sehen, was können wir prinzipiell aussagen über diese Berechnungen mit

01:42:14.270 --> 01:42:15.090
Turing -Maschinen.

01:42:16.490 --> 01:42:19.270
Und zwar wollen wir zunächst mal jetzt charakterisieren die

01:42:19.270 --> 01:42:20.970
Komplexität von Problemen.

01:42:22.230 --> 01:42:25.430
Sie haben in Grundlagen der Informatik 1 gelernt, wie man den

01:42:25.430 --> 01:42:29.230
Berechnungsaufwand eines Algorithmus abschätzt.

01:42:29.230 --> 01:42:33.230
Da waren elementare Operationen drin, Sie haben die gezählt und haben

01:42:33.230 --> 01:42:36.050
festgestellt, dieser Algorithmus braucht so und so viel Rechenzeit

01:42:36.050 --> 01:42:37.610
oder so und so viel Speicher.

01:42:38.950 --> 01:42:43.530
Jeder Algorithmus liefert also eine obere Schranke für den

01:42:43.530 --> 01:42:45.210
Berechnungsaufwand eines Problems.

01:42:45.230 --> 01:42:48.310
Wenn Sie ein Sortierproblem haben und Sie finden einen Algorithmus,

01:42:48.570 --> 01:42:51.330
der das Sortierproblem löst, schauen Sie an, welchen Aufwand hat der,

01:42:51.790 --> 01:42:54.670
dann haben Sie eine obere Schranke für den Aufwand zur Lösung des

01:42:54.670 --> 01:42:58.210
Sortierproblems, weil Sie wissen, maximal brauche ich so viel Zeit für

01:42:58.210 --> 01:43:00.110
diesen Algorithmus, den ich gerade analysiert habe.

01:43:00.590 --> 01:43:02.090
Es mag auch besser gehen.

01:43:03.630 --> 01:43:09.710
Eine untere Schranke, also das ist hier, Sie haben hier eine Skala für

01:43:09.710 --> 01:43:12.830
die Komplexität und Sie sagen, naja, ich habe jetzt hier durch einen

01:43:12.830 --> 01:43:15.830
bestimmten Algorithmus, habe ich die Rechenzeit abgeschätzt für den

01:43:15.830 --> 01:43:20.910
Algorithmus A, dann kann es natürlich sein, dass es einen anderen

01:43:20.910 --> 01:43:23.370
Algorithmus gibt, der besser ist.

01:43:23.570 --> 01:43:26.630
Dann habe ich hier TA- könnte sein, dass es noch einen besseren gibt.

01:43:26.790 --> 01:43:27.170
TA-.

01:43:27.910 --> 01:43:30.430
Sie erinnern sich, beim Sortierproblem war es so, da hatten Sie bei

01:43:30.430 --> 01:43:34.990
den naiven Zeit n² für folgende Länge n, und das konnte man reduzieren

01:43:34.990 --> 01:43:36.210
darunter auf n log n.

01:43:36.890 --> 01:43:40.010
Vielleicht geht es ja auch mit n oder log n oder sowas.

01:43:41.190 --> 01:43:43.250
Da kann man sich sofort überlegen, dass log n nicht sein kann, aber n

01:43:43.250 --> 01:43:45.610
könnte ja sein, dass ich nur jedes Element angucken muss und ich bin

01:43:45.610 --> 01:43:45.990
fertig.

01:43:47.410 --> 01:43:53.550
Also, interessant ist, gibt es hier irgendeine untere Schranke, sodass

01:43:53.550 --> 01:43:56.950
ich sagen kann, egal welchen Algorithmus sie mir liefern, ich weiß,

01:43:57.050 --> 01:43:59.570
der braucht mindestens so viele Schritte.

01:44:00.750 --> 01:44:04.710
Und diese Aussage möchte ich machen durch Analyse des Problems.

01:44:06.690 --> 01:44:11.070
Ich gucke mir also Problemeigenschaften an und möchte daraus auf

01:44:11.070 --> 01:44:12.290
untere Schranken kommen.

01:44:12.530 --> 01:44:15.410
Und dann kann ich Qualitätsaussagen machen für Algorithmen, kann

01:44:15.410 --> 01:44:19.910
sagen, nicht nur sagen, Algorithmus A- ist besser als A, sondern ich

01:44:19.910 --> 01:44:24.970
kann sagen, wie weit ein Algorithmus entfernt ist von der optimalen

01:44:25.730 --> 01:44:26.250
Komplexität.

01:44:26.970 --> 01:44:31.090
Wie gut ist der eigentlich, ist das ein optimaler Algorithmus in Bezug

01:44:31.090 --> 01:44:32.070
auf den Zeitaufwand?

01:44:32.650 --> 01:44:35.670
Das kann ich nur machen, wenn ich untere Schranken habe, sonst nicht.

01:44:36.870 --> 01:44:42.570
Und wir werden also entsprechend uns jetzt dieses etwas genauer

01:44:42.570 --> 01:44:46.350
angucken, wie kann ich solche Aussagen über obere und untere Schranken

01:44:46.350 --> 01:44:49.790
machen, wie kann ich den Aufwand für Probleme klassifizieren.

01:44:50.870 --> 01:44:54.010
Jetzt kommt es wieder, zurück zu den Turing-Maschinen, wir machen das

01:44:54.010 --> 01:44:57.310
wieder über Komplexität von Turing-Maschinen, genauso wie wir die

01:44:57.310 --> 01:45:01.410
Berechenbarkeit charakterisiert haben über Turing-Maschinen, machen

01:45:01.410 --> 01:45:06.070
wir das jetzt auch mal für die Komplexität, für den Aufwand für die

01:45:06.070 --> 01:45:07.110
Berechnung von Problemen.

01:45:07.350 --> 01:45:11.930
Wir nehmen also an, wir haben irgendeine berechenbare Funktion von M1

01:45:11.930 --> 01:45:15.750
nach M2, die durch eine Turing-Maschine entsprechend berechnet wird,

01:45:15.830 --> 01:45:18.910
also Turing-Berechenbare Funktion und dann definieren wir

01:45:18.910 --> 01:45:21.250
Komplexitätsmaße, Zeit- und Platzkomplexität.

01:45:22.030 --> 01:45:28.070
Wir haben also unsere Funktion f, nochmal von M1 nach M2 und wir haben

01:45:28.070 --> 01:45:35.290
die Turing-Maschine tm, die das berechnet und jetzt ist die

01:45:35.290 --> 01:45:39.930
Zeitkomplexität der Berechnung von f, also um so ein f von w zu

01:45:39.930 --> 01:45:45.310
berechnen mit der Maschine tm, schauen wir uns an, wie lang ist die

01:45:45.310 --> 01:45:52.070
kürzeste Konfigurationfolge von der Anfangs- zur Endkonfiguration.

01:45:52.230 --> 01:45:55.230
Zunächst also, es kann ja sein, dass es unterschiedliche gibt, wenn es

01:45:55.230 --> 01:45:58.370
eine nicht deterministische Turing-Maschine ist, aber zunächst, also

01:45:58.370 --> 01:46:02.150
wir sagen die kürzeste Konfigurationfolge von der Anfangs- zur

01:46:02.150 --> 01:46:02.930
Endkonfiguration.

01:46:03.790 --> 01:46:06.210
Wenn es eine deterministische Turing-Maschine ist, gibt es nur eine

01:46:06.210 --> 01:46:08.730
Konfigurationfolge, da sind wir gleich, da wissen wir sofort, welche

01:46:08.730 --> 01:46:09.410
Länge das ist.

01:46:10.390 --> 01:46:15.870
Und dann haben wir also für dieses Wort w festgestellt, wie ist der

01:46:15.870 --> 01:46:21.910
Aufwand, um dieses f von w zu berechnen mit der Turing-Maschine tm.

01:46:23.410 --> 01:46:27.590
Und jetzt schauen wir uns an, eine Verallgemeinerung, nicht nur ein

01:46:27.590 --> 01:46:30.910
Wort w, sondern alle Wörter der gleichen Länge.

01:46:32.070 --> 01:46:37.590
Wir betrachten also die Problemgröße als Länge des Wortes und sagen,

01:46:37.670 --> 01:46:42.050
jetzt schauen wir uns an, wie ist der Aufwand der Turing-Maschine zur

01:46:42.050 --> 01:46:45.610
Berechnung von f von w für alle Wörter der gleichen Länge n.

01:46:46.610 --> 01:46:50.670
Und da gucken wir uns an, den schlechtesten Fall, also das Maximum

01:46:50.670 --> 01:46:53.010
über alle solche Berechnungen.

01:46:54.550 --> 01:46:59.990
tm von w, das war die Länge der kürzesten Konfigurationfolge für die

01:46:59.990 --> 01:47:04.450
Berechnung von f von w für ein spezielles w, das jetzt für alle Wörter

01:47:04.450 --> 01:47:10.770
der gleichen Länge betrachtet, dann habe ich eine Aussage über den

01:47:10.770 --> 01:47:14.990
schlechtesten Fall, die höchste Rechenzeit, die ich brauche, wenn ich

01:47:15.470 --> 01:47:17.590
ein Eingabewort der Länge n habe.

01:47:19.010 --> 01:47:26.390
Das ist also eine worst case execution time, nennt man auch so

01:47:26.390 --> 01:47:27.070
manchmal, bz.

01:47:28.390 --> 01:47:34.090
Ganz wichtige Sache, wenn Sie in irgendwelchen technischen Systemen

01:47:34.090 --> 01:47:37.930
analysieren wollen, ob die verschiedenen Prozesse, die da wichtig

01:47:37.930 --> 01:47:43.690
sind, ob die mit den Echtzeitanforderungen zurechtkommen.

01:47:44.210 --> 01:47:49.950
Sie haben irgendwelche Mindestreaktionszeiten, oder Sie haben

01:47:49.950 --> 01:47:53.190
Reaktionszeitenanforderungen in einem technischen System, wie z.B.

01:47:53.310 --> 01:47:54.030
einem Flugzeug.

01:47:55.450 --> 01:47:59.070
Da müssen Sie worst case execution time Analysen machen, d.h.

01:47:59.230 --> 01:48:05.290
Untersuchungen für die längste zu erwartende Ausführungszeit für eine

01:48:05.290 --> 01:48:06.290
bestimmte Teiloperation.

01:48:08.090 --> 01:48:11.810
Und das ist also bei EADS z.B., bei der Flugzeugkonstruktion, bei den

01:48:11.810 --> 01:48:17.850
Airbus -Maschinen, da wird ganz systematisch untersucht, sind die

01:48:17.850 --> 01:48:20.850
ganzen Echtzeitanforderungen von den vielfältigen Prozessen, die da

01:48:20.850 --> 01:48:23.430
ablaufen, tatsächlich erfüllbar.

01:48:23.550 --> 01:48:27.110
Und da macht man sehr geschickte Untersuchungen über worst case

01:48:27.110 --> 01:48:31.930
execution times, also über Zeitverhalten im schlechtesten Fall.

01:48:33.210 --> 01:48:34.910
Sehr wichtige Art der Analyse.

01:48:36.090 --> 01:48:40.590
Für viele Probleme mag es sein, dass man nicht nur den schlechtesten

01:48:40.590 --> 01:48:41.170
Fall anguckt.

01:48:41.790 --> 01:48:44.310
Das eine ist die Zeit, die man braucht, das andere ist der Platz.

01:48:44.710 --> 01:48:46.170
Das kann man natürlich genauso machen.

01:48:46.610 --> 01:48:49.730
Da schaue ich mir an, den Platz, den ich brauche, was ist der Platz

01:48:49.730 --> 01:48:50.630
bei einer Touringmaschine?

01:48:51.470 --> 01:48:53.810
Ja, das ist der Platz auf dem Band, den ich brauche.

01:48:53.970 --> 01:48:59.830
Also Anzahl der durch Schreiben veränderten Zellen des Bandes.

01:49:00.550 --> 01:49:01.690
Das ist ein wichtiger Punkt.

01:49:02.590 --> 01:49:04.110
Nur durch Schreiben verändert.

01:49:05.230 --> 01:49:12.710
Wenn ich nur lese, ich muss ja das Wort einmal einlesen, dann zähle

01:49:12.710 --> 01:49:13.330
ich das nicht.

01:49:14.330 --> 01:49:17.230
Ansonsten könnte ich zum Beispiel nicht sagen, dass ich für die

01:49:17.230 --> 01:49:22.090
Bearbeitung irgendeines Problems irgendwie sehr wenig Zeit brauche.

01:49:22.610 --> 01:49:23.750
Also weniger als Linearzeit.

01:49:23.750 --> 01:49:25.790
Dann hätte ich ja für immer Linearzeit, mindestens.

01:49:26.150 --> 01:49:27.130
Wenn ich alles lesen muss.

01:49:30.270 --> 01:49:32.870
Also Anzahl der durch Schreiben veränderten Zellen, wobei man

01:49:32.870 --> 01:49:39.270
natürlich auch sagen kann, wenn ich eine Zelle angeguckt habe, wir

01:49:39.270 --> 01:49:47.390
merken, es war etwas unscharf, wenn ich hier mein Band habe, ich gehe

01:49:47.390 --> 01:49:53.270
durch das Band durch und sage, ich schaue mir jetzt diese Zelle an und

01:49:53.270 --> 01:49:54.290
schreibe dort etwas hin.

01:49:54.810 --> 01:49:59.210
Dann schaue ich mir noch diese Zelle an und schreibe da etwas hin.

01:49:59.750 --> 01:50:02.890
Auf der Turingmaschine muss ich natürlich hier durchlaufen, von links

01:50:02.890 --> 01:50:03.770
nach rechts darüber.

01:50:05.850 --> 01:50:09.150
Aber wenn ich dort nichts verändere, sage ich, das zähle ich nicht.

01:50:10.090 --> 01:50:13.850
Ich schaue mir ja nur einige Punkte hier an und mache dort etwas mit.

01:50:15.130 --> 01:50:17.370
Und dann sage ich, dann kann ich eben, dadurch, dass ich nur an

01:50:17.370 --> 01:50:19.950
einigen Stellen gucke und ansonsten nur rüberlaufe, wenn ich nur

01:50:19.950 --> 01:50:23.250
rüberlaufe und nichts mit den Dingen mache, die ich dort sehe, dann

01:50:23.250 --> 01:50:24.550
zähle ich diesen Aufwand nicht.

01:50:25.030 --> 01:50:28.230
Das heißt, dann könnte ich auch sagen, ich kann gewisse Probleme zum

01:50:28.230 --> 01:50:30.530
Beispiel in logarithmischer Zeit lösen.

01:50:32.230 --> 01:50:36.830
Also wenn ich suche in einer sortierten Folge, wenn ich irgendwie ein

01:50:36.830 --> 01:50:40.290
bestimmtes Element suche, geht das ja in logarithmischer Zeit.

01:50:41.230 --> 01:50:43.690
Das wissen Sie, logarithmische Anzahl von Operationen.

01:50:44.390 --> 01:50:49.250
Aber, dann darf ich nicht das zählen, dass ich also bis zu einem Punkt

01:50:49.250 --> 01:50:49.970
erstmal laufe.

01:50:51.330 --> 01:50:54.090
Das sind so kleine Dinge, die man da beachten muss.

01:50:54.510 --> 01:50:58.710
Hier zähle ich also nur den Platz der beschreiben veränderten Zellen.

01:50:59.210 --> 01:51:01.870
Bei den Zellen, wo etwas gleich bleibt, zähle ich es nicht.

01:51:02.630 --> 01:51:04.350
Das ist also die Platzkomplexität.

01:51:05.510 --> 01:51:10.470
Und, ich könnte also auch sagen, ich habe bei der Turing-Maschine, nur

01:51:10.470 --> 01:51:12.830
um das nochmal zu verdeutlichen, ich habe mein Eingabeband und ich

01:51:12.830 --> 01:51:15.970
habe hier noch dazu, da lese ich etwas drauf und ich habe hier ein

01:51:15.970 --> 01:51:20.890
Arbeitsband und im Prinzip zähle ich also die Anzahl der Zellen auf

01:51:20.890 --> 01:51:25.570
dem Arbeitsband, die ich brauche, um meine Funktionen zu berechnen,

01:51:25.650 --> 01:51:28.310
insofern ich auf dem Eingabeband nur lesen darf.

01:51:29.350 --> 01:51:33.710
Also wenn ich ein reines Leseband habe als Eingabeband und die ganze

01:51:33.710 --> 01:51:36.730
Arbeit auf einem extra Arbeitsband machen muss.

01:51:36.790 --> 01:51:41.270
Wir wissen, dass das prinzipiell äquivalent ist, aber für diese Zwecke

01:51:41.270 --> 01:51:41.610
nicht.

01:51:42.250 --> 01:51:45.610
Da kann ich nämlich sagen, ich habe hier ein Arbeitsband und dort

01:51:45.610 --> 01:51:46.850
mache ich die relevanten Operationen.

01:51:47.810 --> 01:51:50.850
Dann zähle ich nur das, was ich auf diesem Arbeitsband tatsächlich

01:51:50.850 --> 01:51:54.430
verändern muss, als Platzkomplexität.

01:51:54.530 --> 01:51:57.930
Wie viel Platz brauche ich auf dem Arbeitsband, um ein Problem zu

01:51:57.930 --> 01:51:58.570
lösen?

01:51:59.890 --> 01:52:01.590
Das ist also die Platzkomplexität.

01:52:02.710 --> 01:52:07.130
Ich könnte auch sagen, wie viel brauche ich an internem Speicher, um

01:52:07.130 --> 01:52:08.190
ein Problem zu lösen?

01:52:09.610 --> 01:52:12.670
Ja, das ist das, was ich hier im Prinzip sage, mit dieser

01:52:12.670 --> 01:52:13.630
Platzkomplexität.

01:52:15.010 --> 01:52:17.190
Dann eben auch Platzkomplexität im schlechtesten Fall.

01:52:18.110 --> 01:52:21.950
Ich könnte natürlich genauso den mittleren Fall definieren oder den

01:52:21.950 --> 01:52:22.650
besten Fall.

01:52:23.070 --> 01:52:25.650
Die Definition erspare ich mir jetzt, kann man sich hinschreiben,

01:52:25.770 --> 01:52:29.930
wobei ich für den mittleren Fall natürlich annehmen muss, was ist

01:52:29.930 --> 01:52:32.090
eigentlich die Verteilung der Probleminstanzen?

01:52:33.810 --> 01:52:39.610
Was macht dann Aussagen über den Erwartungswert für eine bestimmte

01:52:41.030 --> 01:52:41.470
Aufgabe?

01:52:42.130 --> 01:52:45.110
Ich kann auch sagen, ich habe eine bestimmte, das ist meine ganze

01:52:45.110 --> 01:52:49.050
Problemklasse, Menge aller Instanzen, und es gibt darin eine bestimmte

01:52:49.050 --> 01:52:56.110
Teilmenge, irgendeine Problemklasse P', Teilmenge eines Problems, und

01:52:56.110 --> 01:52:59.010
ich schaue mir an, wie ist denn die Rechenzeit, um alle Probleme

01:52:59.010 --> 01:53:00.350
dieser Teilmenge zu lösen?

01:53:01.530 --> 01:53:04.270
Dann habe ich wieder was anderes als eine mittlere Rechenzeit und habe

01:53:04.270 --> 01:53:05.850
ich nur für einen Ausschnitt das betrachtet.

01:53:05.850 --> 01:53:08.950
Aber wenn das genau die sind, die ich in einem definierten Zeitraum

01:53:08.950 --> 01:53:12.770
bearbeiten muss, dann weiß ich etwas über den Aufwand für diese Menge

01:53:12.770 --> 01:53:13.610
von Problemen.

01:53:13.770 --> 01:53:17.890
Also man kann das noch sehr weiter verfeinern, ich beschränke mich

01:53:17.890 --> 01:53:21.850
aber auf den schlechtesten Fall für diese weiteren Untersuchungen.

01:53:23.370 --> 01:53:26.550
Das andere, mittlerer, bester Fall, haben Sie ja angeschaut in

01:53:26.550 --> 01:53:29.870
Grundlagen der Informatik I, schaue ich an in Effiziente Algorithmen

01:53:29.870 --> 01:53:34.630
und schaue mir in vielen anderen Vorlesungen an, wo es um Komplexität

01:53:34.630 --> 01:53:37.030
geht oder um Effiziente Algorithmen.

01:53:37.370 --> 01:53:41.010
Jetzt habe ich also diese Abschätzungen und jetzt bestimme ich

01:53:41.010 --> 01:53:43.050
bestimmte Komplexitätsklassen.

01:53:44.710 --> 01:53:49.450
Komplexitätsklassen heißt, ich fasse gewisse Turing-Maschinen

01:53:49.450 --> 01:53:54.670
zusammen, die ähnlich viel Zeit brauchen.

01:53:56.450 --> 01:54:02.770
Also, jetzt kommen wir hier zu einer Klasse D-Time von G.

01:54:03.050 --> 01:54:03.910
D-Time von G.

01:54:04.010 --> 01:54:06.470
D steht für deterministisch.

01:54:07.830 --> 01:54:08.670
Deterministisch.

01:54:09.510 --> 01:54:12.490
Alles sind Turing-Maschinen und es geht hier um Zeit.

01:54:13.050 --> 01:54:13.430
Time.

01:54:13.710 --> 01:54:14.410
D-Time.

01:54:14.510 --> 01:54:15.670
Deterministic Time.

01:54:16.870 --> 01:54:17.750
Von G.

01:54:19.030 --> 01:54:26.130
Und G ist die Zeitkomplexität oder charakterisiert die Zeitkomplexität

01:54:26.130 --> 01:54:27.750
einer bestimmten Turing-Maschine.

01:54:28.390 --> 01:54:33.290
G kann zum Beispiel G ist eine Funktion, steht hier von N nach N.

01:54:34.790 --> 01:54:38.450
G kann also zum Beispiel eine lineare Funktion sein.

01:54:39.310 --> 01:54:45.270
Könnte also sagen, G sei zum Beispiel aus O von N.

01:54:49.190 --> 01:54:52.350
Also O von oder hier, dieses F.

01:54:52.550 --> 01:54:54.990
F ist mit Zeitkomplexität O von G berechenbar.

01:54:55.090 --> 01:54:59.410
Die Zeit wäre da drin.

01:54:59.510 --> 01:55:01.190
Also G ist eine lineare Funktion.

01:55:01.910 --> 01:55:08.310
Wenn das G eine lineare Funktion ist, wäre in D-Time von N oder von D

01:55:08.310 --> 01:55:14.290
-Time von G wären alle Turing-Maschinen oder alle Funktionen drin, die

01:55:14.290 --> 01:55:19.090
mit Zeitkomplexität O von N von einer deterministischen Turing

01:55:19.090 --> 01:55:19.990
-Maschine berechenbar sind.

01:55:20.050 --> 01:55:21.310
In linearer Zeit berechenbar.

01:55:22.170 --> 01:55:25.210
Oder ich nehme N² als Funktion G.

01:55:25.850 --> 01:55:29.210
Dann wären das alle Turing-Maschinen, beziehungsweise alle Funktionen

01:55:30.090 --> 01:55:33.790
ich habe hier betrachtete Funktionen alle Funktionen, alle Probleme,

01:55:34.470 --> 01:55:39.310
die mit quadratischem Aufwand berechenbar sind von einer Turing

01:55:39.310 --> 01:55:39.670
-Maschine.

01:55:40.590 --> 01:55:43.310
Quadratisch in der Größe der Eingabe.

01:55:44.590 --> 01:55:47.510
Das also kann ich, egal welche Funktion ich nehme, ich sage, ich gucke

01:55:47.510 --> 01:55:50.090
mir alle an, die mit Aufwand 2 hoch N berechenbar sind.

01:55:51.770 --> 01:55:56.750
Alle Funktionen, die maximal exponentielle Zeit brauchen, um von

01:55:56.750 --> 01:55:57.970
Turing -Maschinen berechnet zu werden.

01:55:58.550 --> 01:56:00.750
Dann habe ich also verschiedene Problemklassen, oder verschiedene

01:56:00.750 --> 01:56:03.110
Komplexitätsklassen für Probleme.

01:56:03.370 --> 01:56:06.430
Das sind hier meine Funktionen F, das sind jetzt meine zu berechnenden

01:56:06.430 --> 01:56:06.890
Funktionen.

01:56:08.310 --> 01:56:12.970
Ich charakterisiere sie anhand dieses Aufwandes, um sie mit Turing

01:56:12.970 --> 01:56:14.050
-Maschinen zu berechnen.

01:56:14.810 --> 01:56:17.830
Das kann ich machen für deterministische Turing-Maschinen, ich kann es

01:56:17.830 --> 01:56:20.250
aber auch machen für nicht-deterministische Turing-Maschinen.

01:56:20.250 --> 01:56:22.810
Dann rede ich von N-Time.

01:56:23.830 --> 01:56:28.930
Alle Turing-Maschinen, alle berechenbaren Funktionen F, die mit einem

01:56:28.930 --> 01:56:38.150
gewissen Aufwand maximal Groß-O von G berechenbar sind, von einer

01:56:38.150 --> 01:56:39.270
Turing -Maschine.

01:56:41.950 --> 01:56:43.830
Und zwar von einer nicht-deterministischen Turing-Maschine.

01:56:44.670 --> 01:56:47.090
Sie wissen, das ist was anderes als eine deterministische, bei der

01:56:47.090 --> 01:56:50.270
deterministischen habe ich nur eine Folge von Konfiguration, bei der

01:56:50.270 --> 01:56:52.990
nicht -deterministischen wissen wir, wenn wir die deterministisch

01:56:52.990 --> 01:56:55.430
simulieren wollen, kann der Aufwand deutlich größer werden.

01:56:56.390 --> 01:56:59.870
Aber nicht-deterministisch heißt ja dann, ich gucke mir an, die Länge

01:56:59.870 --> 01:57:08.050
der kürzesten akzeptierenden Pfad bei der Ausführung einer nicht

01:57:08.050 --> 01:57:10.630
-deterministischen Turing-Maschine, um die Funktion F zu berechnen.

01:57:11.070 --> 01:57:12.970
Das gleiche kann ich machen für den Platz.

01:57:13.650 --> 01:57:15.770
Dann habe ich D-Space und N-Space.

01:57:17.250 --> 01:57:21.910
Der Platz, um mit einer deterministischen Turing-Maschine eine

01:57:21.910 --> 01:57:27.630
Funktion zu berechnen, sei beschränkt durch dieses G, die O von G.

01:57:28.130 --> 01:57:29.490
Kommen gleich konkrete Beispiele.

01:57:30.810 --> 01:57:33.990
Und genauso N-Space von G.

01:57:35.110 --> 01:57:38.210
Das heißt, ich schaue mir an, wie ist der Zeitaufwand, wie ist der

01:57:38.210 --> 01:57:41.690
Platzaufwand zur Berechnung von Funktionen mit Turing-Maschinen.

01:57:42.550 --> 01:57:44.730
Und jetzt kommen hier also typische spezielle Funktionen.

01:57:44.830 --> 01:57:47.250
Also G von N kann sein, irgendein N hoch K.

01:57:48.210 --> 01:57:50.230
K gleich eins, zwei, drei, irgendwas.

01:57:50.790 --> 01:57:52.710
Linear, quadratisch, kubisch oder noch höher.

01:57:54.470 --> 01:57:57.290
Sie haben bei Sortierverfahren kennengelernt.

01:57:57.390 --> 01:57:59.490
Das sind also Sortierproblemen.

01:57:59.850 --> 01:58:05.510
Die Funktion, oder das Problem, eine Folge zu sortieren, wissen Sie,

01:58:06.770 --> 01:58:11.490
ist in D-Time von N log N.

01:58:12.190 --> 01:58:15.970
Weil Sie mit einem deterministischen Algorithmus jede sortierende

01:58:15.970 --> 01:58:18.350
Folge in Zeit N log N sortieren können.

01:58:18.870 --> 01:58:22.510
Deswegen ist das Sortierproblem in D-Time von N log N.

01:58:24.010 --> 01:58:28.250
Oder Sie können exponentielle Komplexitätsklasse hinschreiben oder

01:58:28.250 --> 01:58:31.170
auch eine Klasse log hoch K von N.

01:58:31.330 --> 01:58:37.230
Das heißt, das ist nicht log, log, log, log von N, sondern das ist log

01:58:37.230 --> 01:58:41.050
N zum Quadrat hoch 3 oder irgendetwas.

01:58:42.850 --> 01:58:44.850
Auch das ist eine typische Klasse, die man anschaut.

01:58:46.090 --> 01:58:47.790
Natürlich ist logarithmisch ganz toll.

01:58:48.670 --> 01:58:52.310
Bei der binären Suche, wissen Sie, geht das logarithmischer Zeit bei

01:58:52.310 --> 01:58:53.630
Eingaben der folgenden Länge N.

01:58:54.070 --> 01:58:57.670
Das wäre also ein Problem, das in D-Time von N log N drin ist.

01:58:58.390 --> 01:59:00.310
Und so können wir verschiedene Klassen betrachten.

01:59:00.390 --> 01:59:01.750
Für jeweils festes K natürlich.

01:59:03.270 --> 01:59:06.450
Und jetzt können wir das noch weiter verallgemeinern.

01:59:06.590 --> 01:59:12.890
Wir können sagen, wir betrachten einfach alle Funktionen, die von

01:59:12.890 --> 01:59:18.130
deterministischen Turing-Maschinen in der Zeit N hoch K berechnet

01:59:18.130 --> 01:59:21.570
werden können, für irgendein K.

01:59:22.450 --> 01:59:28.830
Das heißt, wir vereinigen alle diese Klassen von Problemen, die für

01:59:28.830 --> 01:59:33.090
irgendein N hoch K in der Zeit O von N hoch K berechenbar sind.

01:59:33.350 --> 01:59:40.410
Und nennen das einfach groß P. Als Klasse der Funktionen, die in

01:59:40.410 --> 01:59:44.410
polynomialer Zeit durch deterministische Turing-Maschinen berechenbar

01:59:44.410 --> 01:59:44.750
sind.

01:59:46.050 --> 01:59:52.610
Und können entsprechend eine Klasse definieren von Problemen, die von

01:59:52.610 --> 01:59:56.130
nicht deterministischen Turing-Maschinen in polynomialer Zeit

01:59:56.130 --> 01:59:57.010
berechenbar sind.

01:59:59.070 --> 02:00:04.030
Nicht deterministisch berechnet, aber die kürzeste

02:00:04.910 --> 02:00:08.890
Konfigurationenfolge, die zu der Lösung führt, hat polynomielle Länge

02:00:08.890 --> 02:00:12.390
in der Größe des Problems.

02:00:12.910 --> 02:00:16.350
Das wäre also die Vereinigung aller N-Time von N hoch K-Klassen.

02:00:17.150 --> 02:00:19.770
Nicht deterministisch, mit polynomiellem Aufwand.

02:00:21.370 --> 02:00:24.370
Und das kann ich etwas anders charakterisieren.

02:00:25.210 --> 02:00:31.870
NP, diese Klasse, bedeutet also, es gibt eine Konfigurationenfolge,

02:00:32.890 --> 02:00:35.010
die polynomielle Zeit braucht.

02:00:35.930 --> 02:00:37.730
Ich kann es etwas anders formulieren.

02:00:38.670 --> 02:00:43.670
Ich kann eine potenzielle Lösung raten und dann in polynomialer Zeit

02:00:43.670 --> 02:00:46.490
überprüfen, ob die Lösung korrekt ist oder nicht.

02:00:47.010 --> 02:00:48.310
Ganz einfaches Beispiel.

02:00:50.010 --> 02:00:54.710
Sie haben eine Aufgabe, Sie wollen von einer Stadt, das seien alles

02:00:54.710 --> 02:00:58.070
Städte, und Sie wollen eine Rundtour durch diese Städte machen.

02:00:58.070 --> 02:00:59.670
Das geht natürlich hier sofort ganz einfach.

02:01:00.110 --> 02:01:01.790
Aber ist das die kürzeste Rundtour?

02:01:03.330 --> 02:01:06.570
Ich habe hier einfach eine aufgemalt, muss ja nicht unbedingt die

02:01:06.570 --> 02:01:07.330
kürzeste sein.

02:01:08.650 --> 02:01:09.890
Das heißt, Sie haben eine Folge von Städten.

02:01:09.910 --> 02:01:12.850
Das typische Problem des Handelsreisenden, haben Sie im Operations

02:01:12.850 --> 02:01:17.230
Research vielleicht schon kennengelernt, geht es darum, dass ich die

02:01:17.230 --> 02:01:19.850
kürzeste Rundtour, den kürzesten Hamiltonischen Kreis finde.

02:01:21.070 --> 02:01:22.770
Sie wissen, das ist ein sehr schwieriges Problem.

02:01:23.710 --> 02:01:25.290
Hier können wir es genau charakterisieren.

02:01:26.010 --> 02:01:30.250
Dieses Problem kann ich auf folgende Art und Weise lösen.

02:01:30.730 --> 02:01:33.590
Ich rate einfach eine Lösung.

02:01:34.810 --> 02:01:38.710
Wenn ich also fragen will, gibt es eine Rundtour kleiner gleich

02:01:38.710 --> 02:01:42.030
irgendeine obere Grenze G, meinetwegen.

02:01:43.290 --> 02:01:47.230
Ich gebe mir irgendeine Schranke vor und sage, gibt es eine Rundtour,

02:01:47.490 --> 02:01:49.370
die nicht länger als G ist.

02:01:51.470 --> 02:01:53.450
Rundtour nicht länger als G.

02:01:56.190 --> 02:02:00.610
Dann rate ich eine Lösung, eine Rundtour und überprüfe, ist diese

02:02:00.610 --> 02:02:02.830
Rundtour kürzer als G.

02:02:02.930 --> 02:02:03.950
Das kann ich schnell überprüfen.

02:02:04.290 --> 02:02:06.850
Ich kann nämlich die Länge einer solchen Tour ganz einfach berechnen,

02:02:07.290 --> 02:02:10.830
das ist lineare Aufwand in der Größe des Problems und stelle dann

02:02:10.830 --> 02:02:13.150
fest, ist diese Länge kleiner gleich G oder nicht.

02:02:13.590 --> 02:02:16.030
Wenn ich eine gefunden habe, kleiner gleich G, dann gucke ich das

02:02:16.030 --> 02:02:19.210
nächste Mal an, ob ich auch eine finde für die halbe Länge und wenn

02:02:19.210 --> 02:02:21.490
nicht, mache ich dreiviertel Länge und so weiter.

02:02:21.670 --> 02:02:24.170
Da kann ich also dann einfach suchen, kann die optimale Länge

02:02:24.170 --> 02:02:24.570
bestimmen.

02:02:26.630 --> 02:02:31.290
Aber, ich rate einfach eine Lösung.

02:02:31.650 --> 02:02:37.150
Und ich kann ja sagen, naja, ich könnte ja gerade diese beste Lösung

02:02:37.150 --> 02:02:42.770
raten und damit habe ich nicht deterministisch das Problem gelöst.

02:02:43.610 --> 02:02:49.050
Nicht deterministisch heißt ja, es gibt eine Folge von

02:02:49.050 --> 02:02:52.830
Konfigurationen, die in polynomeller Zeit die Antwort liefert.

02:02:54.290 --> 02:02:57.210
Und das ist durch solch ein Verfahren machbar.

02:02:57.270 --> 02:03:00.690
Wenn ich sage, ich rate die Lösung, dann kann ich ja auch die beste

02:03:00.690 --> 02:03:03.170
raten und kann die überprüfen und bin fertig.

02:03:04.430 --> 02:03:07.570
Also so kann ich das prinzipiell abstrakt charakterisieren.

02:03:08.270 --> 02:03:11.770
Das ist kein praktisches Verfahren, weil ich ja raten muss.

02:03:14.110 --> 02:03:18.150
Praktisch heißt das, ich muss tatsächlich deterministisch irgendetwas

02:03:18.150 --> 02:03:22.050
machen und da sind wir damit geschlagen, dass wir leider wissen, wenn

02:03:22.050 --> 02:03:24.750
wir etwas deterministisch simulieren, was eigentlich nicht

02:03:24.750 --> 02:03:28.450
deterministisch ist, dann haben wir im schlechtesten Fall auf einmal

02:03:28.450 --> 02:03:31.370
einen exponentiellen höheren Aufwand.

02:03:32.230 --> 02:03:33.930
Und da sind wir weit weg von polynomiell.

02:03:35.170 --> 02:03:39.290
Und das interessante ist, natürlich ist es so, dass P enthalten in NP

02:03:39.290 --> 02:03:39.930
ist, das ist klar.

02:03:40.570 --> 02:03:43.270
Jede deterministische Toremaschine ist auch nicht deterministisch,

02:03:43.370 --> 02:03:46.390
also wenn ich etwas deterministisches in der Zeit machen kann, dann

02:03:46.390 --> 02:03:47.570
natürlich auch nicht deterministisch.

02:03:48.710 --> 02:03:52.370
Aber andersrum weiß man das nicht.

02:03:53.530 --> 02:03:59.650
Das ist eines der interessantesten offenen Probleme der Informatik.

02:04:01.590 --> 02:04:07.830
Kann ich ein Problem, das auf diese Weise lösbar ist, in polynomieller

02:04:07.830 --> 02:04:13.710
Zeit, kann ich das auch deterministisch in polynomieller Zeit lösen?

02:04:14.910 --> 02:04:17.970
Das heißt, das ist ja eine gewisse Teilklasse.

02:04:18.110 --> 02:04:20.930
Es könnte ja sein, dass der Aufwand immer exponentiell ist.

02:04:21.030 --> 02:04:25.670
Selbst wenn ich geraten habe, alle Pfade, die ich brauche, haben

02:04:25.670 --> 02:04:26.550
exponentielle Länge.

02:04:26.830 --> 02:04:29.150
Dann ist es weit außerhalb dieser Menge NP.

02:04:31.330 --> 02:04:34.290
Aber wenn ich in der Klasse NP bin, die sind ja gar nicht so schlimm,

02:04:34.770 --> 02:04:38.850
da bin ich doch in Bereichen, ich muss ja nur raten und dann kann ich

02:04:38.850 --> 02:04:39.950
die richtige Lösung finden.

02:04:40.050 --> 02:04:46.070
Wenn ich das geschickt mache, geschickt raten, sodass ich zum Problem

02:04:46.070 --> 02:04:50.070
komme oder vielleicht ganz nah herankomme an das Problem, geht das

02:04:50.070 --> 02:04:52.530
nicht effizienter und effizient heißt polynomiell?

02:04:54.270 --> 02:05:00.050
Das ist eine ganz spannende Frage und man weiß es nicht.

02:05:00.630 --> 02:05:05.430
Man weiß bis heute nicht, ob die beiden Mengen übereinstimmen oder ob

02:05:05.430 --> 02:05:06.370
sie unterschiedlich sind.

02:05:07.610 --> 02:05:10.490
Man nimmt an, dass sie unterschiedlich sind.

02:05:10.890 --> 02:05:14.090
Es gibt bis heute keinen Beweis dafür, dass das so ist.

02:05:14.470 --> 02:05:18.010
Das heißt, man hat bis heute kein einziges Problem finden können, von

02:05:18.010 --> 02:05:23.410
dem nachweisbar ist, deterministisch kann ich dieses Problem nicht in

02:05:23.410 --> 02:05:24.530
polynomieller Zeit lösen.

02:05:26.410 --> 02:05:27.330
Das ist heute nicht gelungen.

02:05:27.410 --> 02:05:29.850
Für kein einziges Problem, das in NP liegt.

02:05:30.930 --> 02:05:33.250
Nun ist die Frage, wie geht man da eigentlich vor?

02:05:34.410 --> 02:05:38.770
Wie kann ich denn eine solche Frage überhaupt untersuchen?

02:05:40.390 --> 02:05:42.950
Das heißt, ich suche nach einem schwierigen Problem.

02:05:43.510 --> 02:05:48.010
Ein Problem, von dem ich zeigen kann, das geht nicht deterministisch

02:05:48.010 --> 02:05:48.990
in polynomieller Zeit.

02:05:51.250 --> 02:05:52.430
Wie mache ich sowas denn?

02:05:52.490 --> 02:05:55.010
Wie kann ich denn etwas sagen, das ist jetzt ein ganz schwieriges

02:05:55.010 --> 02:05:55.270
Problem?

02:05:55.390 --> 02:05:59.770
Das heißt, ich habe meine Menge NP, das ist also hier meine Menge NP

02:05:59.770 --> 02:06:03.670
und ich weiß, irgendwo da drin liegt meine Menge P, die kann ich alle

02:06:03.670 --> 02:06:04.370
außen vor lassen.

02:06:05.310 --> 02:06:08.750
Ich weiß, das ist NP, die interessieren mich nicht für diese Frage.

02:06:09.450 --> 02:06:13.730
Ich suche also irgendein Problem, das da liegt, das muss ja schwerer

02:06:13.730 --> 02:06:20.030
sein als P, möglichst ganz schwierig, möglichst weit am Rand dieser

02:06:20.030 --> 02:06:22.590
Menge und das wollen wir jetzt charakterisieren.

02:06:24.050 --> 02:06:28.530
Probleme, die zu den schwersten gehören in NP, von denen ich

02:06:28.530 --> 02:06:36.370
nachweisen kann, irgendeine Teilklasse der Probleme, von denen ich

02:06:36.370 --> 02:06:41.090
zeigen kann, wenn ich irgendeines dieser Probleme rausnehmen kann und

02:06:41.090 --> 02:06:45.570
zeigen kann, ich kann für dieses Problem zeigen, das geht in

02:06:45.570 --> 02:06:50.210
polynomieller Zeit, dann kann ich alle Probleme aus NP in

02:06:50.210 --> 02:06:51.270
polynomieller Zeit lösen.

02:06:54.320 --> 02:06:55.900
Das ist jetzt noch eine andere Frage.

02:06:56.000 --> 02:06:58.280
Ich hätte es jetzt gesagt, wir suchen nach einem Problem, von dem ich

02:06:58.280 --> 02:07:01.520
zeigen kann, es geht nicht in polynomieller Zeit.

02:07:02.740 --> 02:07:06.180
Was ich gerade eben gesagt habe, war noch ein anderer Ansatz.

02:07:06.860 --> 02:07:11.820
Ich nehme irgendein Problem her, irgendein Problem X und wenn ich

02:07:11.820 --> 02:07:18.360
weiß, das ist eines der schwersten in NP und ich kann dieses, das

02:07:18.360 --> 02:07:21.540
eines der schwersten ist, tatsächlich in polynomieller Zeit lösen,

02:07:21.620 --> 02:07:25.600
deterministisch, dann will ich daraus schließen können, dann kann ich

02:07:25.600 --> 02:07:30.280
die gesamte Klasse NP, also jedes einzelne Problem daraus in

02:07:30.280 --> 02:07:31.280
polynomieller Zeit lösen.

02:07:32.960 --> 02:07:35.420
Und das ist der Ansatz, den wir jetzt angucken.

02:07:36.000 --> 02:07:38.260
Das geht also praktisch darum, wie kann ich beim Problem

02:07:38.260 --> 02:07:42.220
charakterisieren, dass es zu den schwersten in NP gehört.

02:07:44.320 --> 02:07:50.620
Und das, was hier also jetzt hinter dieser Animation steht, ist eben,

02:07:50.700 --> 02:07:53.300
dass wir von vielen praktischen Problemen wissen, dass sie in NP

02:07:53.300 --> 02:07:53.620
liegen.

02:07:54.100 --> 02:07:57.480
Die meisten Probleme, die sie im Operations Research vorgesetzt

02:07:57.480 --> 02:08:01.420
bekommen, liegen in NP und leider liegen die meisten daran auch noch

02:08:01.420 --> 02:08:03.840
in der Menge der schwersten Probleme von NP.

02:08:04.600 --> 02:08:07.080
Ich hatte Ihnen das Problem des Handelsreisenden genannt, das ist

02:08:07.080 --> 02:08:08.100
eines dieser schwersten.

02:08:09.560 --> 02:08:13.060
Und es gibt noch viele andere, sehr, sehr, sehr viele andere, leider

02:08:13.060 --> 02:08:16.180
liegen die meisten Probleme im Operations Research in einer dieser

02:08:16.180 --> 02:08:17.000
Klassen.

02:08:17.100 --> 02:08:19.280
Das heißt, die meisten Probleme, mit denen Sie zu tun haben als

02:08:19.280 --> 02:08:21.860
Wirtschaftsingenieure, liegen in dieser Klasse.

02:08:22.540 --> 02:08:25.360
Es sei denn, Sie haben irgendwelche schönen weiteren Randbedingungen,

02:08:25.780 --> 02:08:29.260
die es Ihnen erlauben zu zeigen, mein Problem ist in NP, ich kann es

02:08:29.260 --> 02:08:29.980
effizient lösen.

02:08:30.480 --> 02:08:32.100
Auf diese Frage kommen wir gleich noch wieder zurück.

02:08:33.280 --> 02:08:37.120
Jetzt möchte ich diese Probleme charakterisieren und feststellen, an

02:08:37.120 --> 02:08:39.200
welcher Stelle liegen die eigentlich.

02:08:40.620 --> 02:08:43.920
Und dazu will ich ja den Aufwand der Probleme charakterisieren.

02:08:44.040 --> 02:08:48.240
Ich möchte zwei Probleme vergleichen und sagen können, das eine

02:08:48.240 --> 02:08:51.540
Problem ist irgendwie mindestens so schwer wie das andere.

02:08:52.060 --> 02:08:54.080
Ich habe jetzt zwei Probleme P und Q.

02:08:54.620 --> 02:08:55.540
P und Q.

02:08:57.040 --> 02:09:00.220
Und ich möchte wissen, gibt es da irgendeine Beziehung zwischen diesen

02:09:00.220 --> 02:09:01.220
beiden Problemen?

02:09:02.580 --> 02:09:10.660
Und ich sage folgendes, ich gucke mir das Problem Q an und überlege

02:09:10.660 --> 02:09:15.840
mir ein Verfahren, wie ich jede Instanz dieses Problems hier

02:09:15.840 --> 02:09:19.640
überführen kann in eine Instanz des anderen Problems.

02:09:20.480 --> 02:09:25.080
Also zum Beispiel das Problem des Handelsreisenden.

02:09:26.980 --> 02:09:30.920
Also das Travelling Salesman Problem.

02:09:32.420 --> 02:09:39.440
Das kann ich doch irgendwie ausdrücken als ein Problem, ich schreibe

02:09:39.440 --> 02:09:43.800
einfach mal hin, Satisfiability Problem, Erfüllbarkeitsproblem der

02:09:43.800 --> 02:09:44.640
Aussagenlogik.

02:09:45.360 --> 02:09:49.160
Das, was ich hier hinschreibe als TSP, als Travelling Salesperson

02:09:49.160 --> 02:09:53.060
Problem, kann ich doch in einer aussagenlogischen Formel hinschreiben.

02:09:55.920 --> 02:09:58.500
Das ist ja eine Beschreibung eines Problems, das kann ich

02:09:58.500 --> 02:09:59.480
aussagenlogisch machen.

02:09:59.560 --> 02:10:03.260
Sie kennen aus Grundlagen der Informatik 1, wissen Sie, was

02:10:03.650 --> 02:10:04.400
Aussagenlogik ist.

02:10:06.120 --> 02:10:12.900
Und wenn ich eine Instanz T aus TSP überführen kann in eine

02:10:14.400 --> 02:10:21.700
aussagenlogische Formel, eine Aussagenlogik, dann kann ich mir

02:10:21.700 --> 02:10:23.700
anschauen, kann ich diese Formel erfüllen.

02:10:24.840 --> 02:10:31.040
Gibt es eine Belegung der Variablen dieser Formel, sodass ich die

02:10:31.040 --> 02:10:31.660
erfüllen kann.

02:10:31.740 --> 02:10:34.120
Das heißt, ich habe das Erfüllbarkeitsproblem der Aussagenlogik, wenn

02:10:34.120 --> 02:10:37.560
die erfüllt ist, die Formel, dann habe ich festgestellt, gibt es eine

02:10:37.560 --> 02:10:40.140
Rundtour, die kürzer ist als eine bestimmte Schranke.

02:10:41.540 --> 02:10:47.200
Und dann übertrage ich diese Aussage, das ist wahr oder falsch, es

02:10:47.200 --> 02:10:52.240
gibt eine Tour kürzerer Länge oder nicht, übertrage ich eine Lösung

02:10:52.240 --> 02:10:54.260
meines ursprünglichen Problems.

02:10:56.280 --> 02:11:02.240
Und nun ist die wesentliche Aussage, diese Überführung hier, von der

02:11:02.240 --> 02:11:04.460
nehmen wir an, die geht in polynomialer Zeit.

02:11:06.560 --> 02:11:11.340
Also um ein Problem, Travelling Salesperson Problem, zu übertragen in

02:11:11.340 --> 02:11:14.660
eine aussagenlogische Formel, das ist nicht sehr aufwendig.

02:11:14.800 --> 02:11:18.040
Das geht in polynomialer Zeit in der Größe der Beschreibung des

02:11:18.040 --> 02:11:20.000
Problems t aus tsp.

02:11:21.000 --> 02:11:23.620
Deswegen in polynomialer Zeit überführbar.

02:11:24.680 --> 02:11:29.360
Jede Instanz aus dem Problem q ist überführbar in eine Instanz aus dem

02:11:29.360 --> 02:11:30.040
Problem p.

02:11:30.820 --> 02:11:35.380
Dann löse ich diese Instanz mit einem Verfahren, mit dem ich hier mein

02:11:35.380 --> 02:11:37.100
Problem p zu lösen habe.

02:11:38.080 --> 02:11:42.300
Und sofern ich in polynomialer Zeit die Lösung meines Problems p

02:11:42.300 --> 02:11:47.260
überführen kann in eine Lösung meines Problems q, dann habe ich hier

02:11:47.260 --> 02:11:49.380
also eine Reduzierbarkeit.

02:11:50.160 --> 02:11:57.040
Dann sage ich das Problem q ist polynomial Zeit reduzierbar auf das

02:11:57.040 --> 02:11:57.720
Problem p.

02:11:58.140 --> 02:12:02.220
So geschrieben habe ich hier eine Beziehung.

02:12:02.360 --> 02:12:07.940
Ich sage dann nämlich folgendes, ich kann ja aus der Lösung eines

02:12:07.940 --> 02:12:13.940
Problems p etwas ableiten über die Schwierigkeit der Lösung des

02:12:13.940 --> 02:12:14.620
Problems q.

02:12:15.580 --> 02:12:17.480
Was weiß ich auf diesem Weg?

02:12:18.320 --> 02:12:22.400
Ich weiß, ich brauche um das f hier zu berechnen, polynomiale Zeit.

02:12:23.120 --> 02:12:23.660
Maximal.

02:12:24.980 --> 02:12:27.540
Um das p zu berechnen, brauche ich irgendeine Zeit.

02:12:28.740 --> 02:12:29.300
tp.

02:12:32.240 --> 02:12:34.940
Und dann brauche ich noch irgendeine Zeit, um das g, diese

02:12:34.940 --> 02:12:37.180
Rücktransformation zu berechnen, das ist polynomial.

02:12:37.940 --> 02:12:44.320
Und das heißt doch, die Zeit für die Berechnung von q, die ist jetzt

02:12:44.920 --> 02:12:49.920
leicht zu bestimmen, das ist die Zeit, um f zu berechnen, die Zeit, um

02:12:49.920 --> 02:12:53.120
p zu lösen und die Zeit, um g zu berechnen.

02:12:55.360 --> 02:12:59.760
Das heißt, wenn das p zum Beispiel auch polynomial Zeit lösbar wäre,

02:13:00.680 --> 02:13:04.540
wenn das polynomial Zeit zu machen wäre, wenn das tp ein Polynom wäre,

02:13:05.200 --> 02:13:09.740
in der Größe der Instanz, dann hätte ich über diesen Weg hier einmal

02:13:09.740 --> 02:13:14.220
ganz rum das Problem q in Polynomialzeit gelöst.

02:13:17.050 --> 02:13:23.230
Also, wenn das q reduzierbar ist auf p in Polynomialzeit und das p

02:13:23.230 --> 02:13:28.150
polynomial lösbar, dann kann ich auch das q polynomial lösen.

02:13:30.050 --> 02:13:34.290
Andersrum heißt das aber auch, wenn ich nachweisen kann, das Problem

02:13:34.290 --> 02:13:41.370
p, äh Quatsch, wenn ich nachweisen kann, das Problem q ist nicht

02:13:41.370 --> 02:13:46.530
polynomiell lösbar, dann ist auch das Problem p nicht polynomiell

02:13:46.530 --> 02:13:47.050
lösbar.

02:13:50.980 --> 02:13:53.100
Ja, das ist genau die Umkehrung davon.

02:13:55.520 --> 02:14:00.040
Also, das ist, weil ja das Problem q im Prinzip ein Teilproblem ist

02:14:00.040 --> 02:14:00.940
von dem Problem p.

02:14:02.820 --> 02:14:06.600
Also, das sind die wesentlichen Erkenntnisse hier, wir können Probleme

02:14:06.600 --> 02:14:10.100
aufeinander abbilden und haben dann so eine Abschätzung der

02:14:10.100 --> 02:14:10.840
Komplexität.

02:14:11.400 --> 02:14:19.100
Kleine Beispiele, ich möchte mir anschauen, zwei Probleme,

02:14:19.460 --> 02:14:24.060
Multiplikation von n x n Matrizen und Inversion von n x n Matrizen.

02:14:26.060 --> 02:14:29.080
Probleme, die sind beide polynomiell, das ist ja nicht weiter wichtig

02:14:29.080 --> 02:14:29.640
im Augenblick.

02:14:30.740 --> 02:14:37.480
Also, ich habe als Problem q das Matrix-Multiplikationsproblem.

02:14:37.640 --> 02:14:39.200
Ich möchte zwei Matrizen multiplizieren.

02:14:39.780 --> 02:14:40.980
Ich weiß nicht, wie das geht.

02:14:41.500 --> 02:14:44.500
Ich weiß aber, wie ich Matrizen invertieren kann.

02:14:46.340 --> 02:14:49.980
Dann bilde ich einfach diese Matrix c.

02:14:50.880 --> 02:14:54.240
Also, mein Problem ist, ich möchte a mal b berechnen.

02:14:55.520 --> 02:14:59.620
Ich plette das ein in ein anderes Problem für das Inversionsproblem

02:14:59.620 --> 02:15:03.660
Ich definiere eine Matrix, die so aussieht, eine große Matrix.

02:15:03.780 --> 02:15:08.380
Wenn ich also n x n Matrizen a und b habe, baue ich mir eine 3n x 3n

02:15:08.380 --> 02:15:12.560
Matrix, die hier auf der Diagonale Einheitsmatrizen hat und die beiden

02:15:12.560 --> 02:15:15.980
Matrizen a und b hier im oberen Dreieck und ganz oben noch eine

02:15:15.980 --> 02:15:18.180
Nullmatrix und unten drunter auch nur Nullmatrizen.

02:15:18.940 --> 02:15:22.480
Dann kann ich sofort nachweisen, ich weiß c hoch minus 1, die Inverse

02:15:22.480 --> 02:15:27.780
von c ist gerade eine Matrix dieser Gestalt und da ist dann hier oben

02:15:27.780 --> 02:15:29.140
das Produkt drin.

02:15:30.140 --> 02:15:33.920
Können Sie sich überlegen, wenn Sie die beiden Matrizen

02:15:33.920 --> 02:15:35.760
multiplizieren, kommt die Einheitsmatrix raus.

02:15:36.440 --> 02:15:38.080
Ganz einfache Berechnung.

02:15:39.440 --> 02:15:44.980
Also, wenn ich in der Lage bin, Matrizen zu invertieren, dann kann ich

02:15:44.980 --> 02:15:49.440
das Problem der Multiplikation einbetten in dieses Inversionsproblem.

02:15:49.660 --> 02:15:54.680
Ich kann das Polynomialzeit reduzieren auf das Inversionsproblem, kann

02:15:54.680 --> 02:15:57.760
die Lösung mir angucken und kann aus der Lösung die Lösung meines

02:15:57.760 --> 02:16:00.540
Matrixmultiplikationsproblems heraus destillieren.

02:16:00.920 --> 02:16:02.740
Das ist nämlich gerade hier die obere rechte Ecke.

02:16:04.980 --> 02:16:08.380
Das ist eine solche einfache Transformation.

02:16:10.820 --> 02:16:14.560
Und jetzt machen wir das ein bisschen, jetzt schauen wir uns an, wie

02:16:14.560 --> 02:16:18.340
wir damit auf diese Frage kommen können, wie wir die Schwierigkeit von

02:16:18.340 --> 02:16:22.240
Problemen jetzt in Bezug auf diese Frage NP und P Verhältnisse

02:16:22.240 --> 02:16:23.240
charakterisieren können.

02:16:23.240 --> 02:16:29.500
Wir sagen jetzt folgendes, ein Problem X, irgend beliebiges Problem X,

02:16:30.540 --> 02:16:37.620
das ist NP schwer, das heißt mindestens so schwer wie jedes beliebige

02:16:37.620 --> 02:16:44.980
Problem aus NP, wenn wir jedes Problem Q aus NP, das wollte ich hier

02:16:44.980 --> 02:16:52.020
nicht, das wollte ich auch nicht, wenn ich jedes beliebige Problem Q

02:16:52.020 --> 02:16:57.980
aus NP, irgendein Problem Q oder Q' oder Q2', verschiedentlich jedes

02:16:57.980 --> 02:17:04.240
Problem aus NP Polynomialzeit reduzieren kann auf dieses Problem X.

02:17:04.480 --> 02:17:08.980
Also nicht nur eines, wie gerade eben Matrixmultiplikation auf

02:17:08.980 --> 02:17:13.520
Inversion, sondern ich kann, ich nehme ein Problem X her und zeige

02:17:13.520 --> 02:17:18.140
dieses Problem oder will zeigen, dieses Problem ist mindestens so

02:17:18.140 --> 02:17:23.440
schwer wie jedes andere in NP, dann heißt das, ich muss jedes Problem

02:17:23.440 --> 02:17:29.540
aus NP in Polynomialzeit reduzieren können auf das Problem X.

02:17:31.460 --> 02:17:36.620
Und dann weiß ich ja, wenn wir diesen Satz von der vorigen Folie

02:17:36.620 --> 02:17:41.900
nehmen, wenn ich jetzt zeigen könnte, dieses Problem X hier kann ich

02:17:41.900 --> 02:17:47.220
in Polynomialzeit lösen, deterministisch, dann könnte ich jedes

02:17:47.220 --> 02:17:49.460
Problem in NP in Polynomialzeit lösen.

02:17:50.100 --> 02:17:53.680
Das heißt, diese NP-schweren Probleme sind genau solche, die ich mir

02:17:53.680 --> 02:17:57.540
angucken müsste, um eine Antwort zu kriegen auf die Frage oder um

02:17:57.540 --> 02:18:03.920
zeigen zu können, NP ist gleich P. Beziehungsweise dieses Problem X

02:18:03.920 --> 02:18:05.500
ist sicherlich ein sehr schweres Problem.

02:18:05.660 --> 02:18:07.140
Allerdings ist das ein beliebiges Problem.

02:18:10.180 --> 02:18:15.820
Also ich habe jetzt aufgrund des Satzes von der vorigen Folie

02:18:16.340 --> 02:18:20.300
zumindest schon mal die Aussage, wenn man X in Polynomialzeit lösen

02:18:20.300 --> 02:18:25.220
kann, dann kann ich also, wenn das X ist NP-schwer, dann habe ich für

02:18:25.220 --> 02:18:28.640
jedes Problem aus NP ein Polynomiallösungsverfahren, das heißt, dann

02:18:28.640 --> 02:18:33.080
ist NP gleich P. Wenn einem von Ihnen, ich hätte Ihnen das als Aufgabe

02:18:33.080 --> 02:18:37.980
geben müssen, als Übungsaufgabe, dass Sie das für irgendeines dieser

02:18:37.980 --> 02:18:41.240
Probleme überprüfen, ob Sie dafür einen polynomialen Algorithmus

02:18:41.240 --> 02:18:41.600
finden.

02:18:42.320 --> 02:18:46.000
Wenn Ihnen das gelingt, für eines der Probleme, von denen man weiß,

02:18:46.100 --> 02:18:49.160
dass NP schwer ist, zu zeigen, das geht deterministisch im Polynomial

02:18:49.160 --> 02:18:53.840
der Zeit, dann haben Sie den Nobelpreis für Informatik verdient.

02:18:54.080 --> 02:18:56.460
Den gibt es leider nicht, aber haben Sie den Turing Award verdient.

02:18:57.040 --> 02:18:58.920
Das ist also der höchste Preis der Informatiker.

02:18:59.740 --> 02:19:01.680
Der Turing Award vergleichbar zum Nobelpreis.

02:19:04.320 --> 02:19:07.700
Also, ein NP-Problem ist mindestens so schwer wie jedes beliebige

02:19:07.700 --> 02:19:08.620
Problem aus NP.

02:19:10.340 --> 02:19:12.160
Und das reicht uns aber noch nicht.

02:19:12.240 --> 02:19:17.280
Wir wollten ja eigentlich sagen, wir haben hier unsere Klasse NP, wir

02:19:17.280 --> 02:19:20.140
haben die Klasse P und wir wollten hier jetzt irgendwelche schweren

02:19:20.140 --> 02:19:21.460
Probleme charakterisieren.

02:19:22.820 --> 02:19:25.900
Das sollte hier ein NP sein.

02:19:28.260 --> 02:19:31.020
Wir wollten jetzt hier schwierige Probleme charakterisieren.

02:19:31.140 --> 02:19:33.480
Das Problem X lag aber irgendwo hier draußen.

02:19:35.040 --> 02:19:43.420
Und jetzt sagen wir, das Problem P ist NP-vollständig, wenn es NP

02:19:43.420 --> 02:19:49.000
-schwer ist und außerdem selber in NP liegt.

02:19:51.000 --> 02:19:56.540
Ja, also wenn ich hier irgendein Problem habe, in NP, von dem ich

02:19:56.540 --> 02:20:00.840
zeigen kann, ich kann jedes andere Problem aus dieser Klasse darauf

02:20:00.840 --> 02:20:05.980
reduzieren in polynomial Zeit, dann ist das ein NP-vollständiges

02:20:05.980 --> 02:20:06.400
Problem.

02:20:09.380 --> 02:20:14.940
Das ist also etwas, was eine ganz wichtige Erkenntnis ist und eine

02:20:14.940 --> 02:20:17.220
ganz wichtige Charakterisierung ist.

02:20:17.760 --> 02:20:22.320
Das ist vor 40 Jahren gemacht worden von Stephen Cook in Toronto.

02:20:23.400 --> 02:20:28.020
Der hat das als erster sich so überlegt und seitdem hat man für viele

02:20:28.020 --> 02:20:31.300
Probleme nachgewiesen, dass sie NP-vollständig sind.

02:20:31.380 --> 02:20:34.300
Das erste Problem, das hat Stephen Cook gemacht, war der Nachweis,

02:20:34.440 --> 02:20:38.220
dass das Erfüllbarkeitsproblem der Aussagenlogik ein NP-schweres

02:20:38.220 --> 02:20:38.880
Problem ist.

02:20:39.680 --> 02:20:45.900
Wir wissen, dass das Erfüllbarkeitsproblem der Aussagenlogik, also für

02:20:45.900 --> 02:20:50.780
eine beliebige Formel der Aussagenlogik in konjunktiver Normalform,

02:20:50.920 --> 02:21:04.680
also irgendwie x oder y oder z und hier mal wegen x-strich oder y

02:21:04.680 --> 02:21:07.520
-strich oder z und so weiter.

02:21:07.700 --> 02:21:12.600
Also irgendeine Formel, bei der sie konjunktiver Normalform hieß ja,

02:21:13.040 --> 02:21:16.920
sie haben eine Konjunktion von Disjunktionen.

02:21:18.020 --> 02:21:21.040
Disjunktionen und die sind durch Konjunktionen verbunden.

02:21:21.280 --> 02:21:25.080
Sie können jede Formel der Aussagenlogik in konjunktiver Normalform

02:21:25.080 --> 02:21:25.640
angeben.

02:21:26.100 --> 02:21:31.680
Also eine große Konjunktion von irgendwelchen Klauseln und das ist

02:21:31.680 --> 02:21:33.660
also irgendeine Formel der Aussagenlogik.

02:21:33.660 --> 02:21:38.920
Irgendeine Konjunktion von Formeln CI und jede Formel CI, jede Klausel

02:21:38.920 --> 02:21:40.300
CI ist eine Disjunktion.

02:21:42.640 --> 02:21:44.800
Das ist also das Erfüllbarkeitsproblem.

02:21:44.980 --> 02:21:46.720
Ist eine solche Formel erfüllbar oder nicht?

02:21:46.820 --> 02:21:49.840
Gibt es also eine Belegung der Variablen mit Wahrheitswerten, sodass

02:21:49.840 --> 02:21:52.540
diese Formel den Wert wahr hat?

02:21:53.120 --> 02:21:55.740
Das war das erste Problem, bei dem man die NP-Vollständigkeit

02:21:55.740 --> 02:21:56.660
nachweisen konnte.

02:21:56.780 --> 02:22:00.820
Das heißt, man kann jedes Problem aus NP als eine Aussagenlogische

02:22:00.820 --> 02:22:01.740
Formel beschreiben.

02:22:01.740 --> 02:22:06.440
Diese Transformation dauert polymelle Zeit und aus der Lösung, aus der

02:22:06.440 --> 02:22:11.720
Erfüllbarkeit der Formel folgt dann in polymelle Zeit die Lösung

02:22:11.720 --> 02:22:13.320
meines Ausgangsproblems.

02:22:14.300 --> 02:22:18.020
Das Travelling Salesperson Problem ist ein solches NP-Vollständiges

02:22:18.020 --> 02:22:18.440
Problem.

02:22:19.480 --> 02:22:27.000
Ich kann zeigen, ich kann, das ist jetzt interessant, ich habe hier NP

02:22:27.000 --> 02:22:35.660
nochmal aufgemalt und ich weiß, dass das Satzproblem hier außen hin,

02:22:35.700 --> 02:22:40.300
obwohl wir wissen, das ist in NP direkt, ich kann jedes Problem aus NP

02:22:40.300 --> 02:22:42.740
auf Satz abbilden.

02:22:42.960 --> 02:22:43.580
Jedes Problem.

02:22:44.900 --> 02:22:52.740
Und jetzt muss ich nur Folgendes zeigen, ich kann das, anders als ich

02:22:52.740 --> 02:22:56.700
es gerade eben angedeutet habe, ich kann das Erfüllbarkeitsproblem

02:22:58.840 --> 02:23:02.480
reduzieren in polynomial Zeit auf das TSP-Problem.

02:23:05.470 --> 02:23:09.210
Ich kann also aus jedem TSP-Problem, oder ich kann aus jedem

02:23:09.210 --> 02:23:13.110
Satzproblem, jedem Erfüllbarkeitsproblem eine im Prinzip Tour durch

02:23:13.110 --> 02:23:19.250
Städte konstruieren und das Problem von TSP, ob das eine Tour, kleiner

02:23:19.250 --> 02:23:23.650
gleich irgendeine Schranke ist, entspricht dann der Lösung dieses

02:23:23.650 --> 02:23:24.830
Erfüllbarkeitsproblems.

02:23:24.970 --> 02:23:30.090
Wenn ich das kann, diese eine Überführung machen kann, dann kann ich

02:23:30.090 --> 02:23:36.010
durch Transitivität jedes Problem aus NP, jedes Problem X aus NP erst

02:23:36.010 --> 02:23:38.130
in Satz und dann in TSP überführen.

02:23:38.530 --> 02:23:42.710
Und habe dann schon gezeigt, dass TSP auch ein NP-schweres Problem

02:23:42.710 --> 02:23:42.890
ist.

02:23:42.990 --> 02:23:46.950
Das heißt, wenn ich ein Problem habe, und das war dieses Satzproblem,

02:23:47.890 --> 02:23:53.010
wenn ich von dem bewiesen habe, das ist NP-vollständig, dann ist jedes

02:23:53.010 --> 02:23:58.810
Problem, auf das ich dieses Satzproblem in Polynomialzeit reduzieren

02:23:58.810 --> 02:24:05.350
kann, auch wieder NP-schwer.

02:24:05.690 --> 02:24:07.970
Und wenn es in NP liegt, NP-vollständig.

02:24:09.190 --> 02:24:11.330
Also das TSP-Problem gehört dazu.

02:24:11.790 --> 02:24:15.870
Genauso Projektplanung mit beschränkten Ressourcen und zeitlichen und

02:24:15.870 --> 02:24:16.470
so weiter.

02:24:17.870 --> 02:24:20.670
Das ist so, wenn Sie Projektplanung mit beschränkten Ressourcen

02:24:20.670 --> 02:24:23.250
machen, kennen Sie vielleicht aus dem Operations-Research, wenn Sie

02:24:23.250 --> 02:24:27.050
dann auch weitere Dinge dazufügen, wie zeitliche Mindest- und

02:24:27.050 --> 02:24:30.410
Maximalabstände, zwischen der Ausführung von irgendwelchen

02:24:30.410 --> 02:24:35.250
Teilvorgängen, dann ist sogar die Bestimmung einer zulässigen Lösung

02:24:35.250 --> 02:24:37.470
selbst ein NP-schweres Problem.

02:24:37.970 --> 02:24:41.870
Nicht nur der optimale Projektplan, die Bestimmung des optimalen

02:24:41.870 --> 02:24:45.050
Projektplans ist dann NP-vollständig, sondern selbst die Bestimmung

02:24:45.050 --> 02:24:46.630
einer akzeptablen Lösung.

02:24:47.870 --> 02:24:51.070
Das heißt, das ist dann schon ein schwieriges Problem, gehört mit zu

02:24:51.070 --> 02:24:52.430
den schwierigsten Problemen in NP.

02:24:53.190 --> 02:24:55.230
Und jetzt ist die Frage, was heißt das eigentlich?

02:24:57.750 --> 02:25:01.950
Es gibt zig Probleme mittlerweile, von denen man weiß, sie sind in NP.

02:25:03.010 --> 02:25:07.970
Und deswegen vermutet man, dass es keinen Algorithmus gibt, der NP

02:25:07.970 --> 02:25:10.930
-vollständige Probleme in polymerer Zeit löst.

02:25:11.630 --> 02:25:13.010
Man weiß es bis heute nicht.

02:25:14.090 --> 02:25:15.370
Und da ist man also dran.

02:25:15.370 --> 02:25:21.050
Und wenn man also zeigen will, dass ein Problem vermutlich nicht

02:25:21.050 --> 02:25:27.070
polynomial lösbar ist, dann zeigt man, dass sich ein beliebiges NP

02:25:27.070 --> 02:25:30.430
-vollständiges Problem auf dieses Problem P reduzieren lässt.

02:25:31.010 --> 02:25:38.070
Ich habe irgendein Problem X, das habe ich, da steht P, da muss ich

02:25:38.070 --> 02:25:43.250
auch P hinschreiben, also dieses Problem P und ich habe ein Problem X,

02:25:43.250 --> 02:25:48.490
das ist NP-vollständig, dann wenn ich das reduzieren kann auf das P,

02:25:48.590 --> 02:25:55.290
wenn ich also zeigen kann, X ist kleiner gleich P in polynomialer Zeit

02:25:55.290 --> 02:25:59.290
reduzierbar auf das P, dann ist das P selber auch genau in der

02:25:59.290 --> 02:25:59.930
gleichen Klasse.

02:26:01.610 --> 02:26:05.610
Und damit haben wir also hier jetzt diese Beziehung, Klasse NP, da

02:26:05.610 --> 02:26:10.990
gibt es die Klasse der in polynomialer Zeit lösbaren deterministisch,

02:26:10.990 --> 02:26:15.150
dann gibt es die NP-vollständigen, aber ob das richtig ist, was ich

02:26:15.150 --> 02:26:20.730
hier aufmale, dass die NP-vollständigen außerhalb liegen von P, das

02:26:20.730 --> 02:26:22.530
ist die große Frage, das weiß man nicht.

02:26:23.170 --> 02:26:25.050
Es kann sein, dass es alles eine Klasse ist.

02:26:26.850 --> 02:26:31.730
Es gibt also durchaus Komplexitätsklassen, von denen man lange der

02:26:31.730 --> 02:26:36.090
Meinung war, das ist eine Hierarchie von Klassen und auf einmal hat

02:26:36.090 --> 02:26:37.810
einer festgestellt, die fallen alle zusammen.

02:26:38.890 --> 02:26:43.190
Also es ist nicht ausgeschlossen, dass die zusammenfallen, aber wir

02:26:43.190 --> 02:26:45.690
haben bisher dafür keine wirklichen Lösungen.

02:26:46.870 --> 02:26:52.470
Es gibt es noch viel mehr, es gibt noch, hier ist eine ganze Reihe

02:26:52.470 --> 02:26:57.550
angegeben, also ich kann genauso die Klasse P-Space definieren.

02:26:58.470 --> 02:27:02.730
Alle Funktionen, alle Probleme, die mit polynomiellem Platz

02:27:02.730 --> 02:27:08.210
deterministisch lösbar sind, ist übrigens gleich der Klasse der

02:27:08.710 --> 02:27:11.970
Funktionen, die nicht deterministisch mit polynomiellem Platz lösbar

02:27:11.970 --> 02:27:12.310
sind.

02:27:12.870 --> 02:27:16.990
Oder alle Probleme, die deterministisch in exponentieller Zeit lösbar

02:27:16.990 --> 02:27:21.110
sind, ist übrigens gleich der Klasse, die von nicht deterministischen

02:27:21.110 --> 02:27:24.010
Maschinen in exponentieller Zeit lösbar sind.

02:27:24.730 --> 02:27:33.130
Oder X-Space und da weiß man, dass das hier eine echte, dass das P

02:27:33.130 --> 02:27:34.810
-Space echt größer ist als NP.

02:27:35.290 --> 02:27:36.410
Hier weiß man es nicht.

02:27:37.350 --> 02:27:40.890
Da weiß man das, bei X-Time weiß man das, bei X-Space weiß man das

02:27:40.890 --> 02:27:41.170
auch.

02:27:42.630 --> 02:27:46.230
Das sind weitere und ich kann beliebig weitergehen, kann dort noch

02:27:46.230 --> 02:27:48.690
wesentlich größere Klassen aufmalen.

02:27:49.050 --> 02:27:53.510
Wir werden am Mittwoch, nicht am Mittwoch, am Montag, geht es darum,

02:27:53.990 --> 02:27:57.330
dann nochmal sich konkret anzugucken für ein Problem, wie man hier

02:27:57.330 --> 02:28:01.490
diese Reduzierung macht, für in dem Fall für das Problem Dreisat auf

02:28:01.490 --> 02:28:02.450
Klick zu reduzieren.

02:28:02.790 --> 02:28:06.090
Dabei geht es nicht um Fernsehprogramme, sondern da geht es um ein

02:28:06.090 --> 02:28:12.630
Problem, dass ich eine aussagenlogische Formel habe mit drei Variablen

02:28:12.630 --> 02:28:15.430
oder drei Literalen pro Klausel maximal.

02:28:16.590 --> 02:28:19.390
Und das will ich auf das Klickenproblem überführen, ein typisches

02:28:19.390 --> 02:28:23.510
anderes Problem, bei dem es darum geht, dass in irgendeinem Grafen,

02:28:23.870 --> 02:28:27.010
irgendein Teilgraf vollständig verbunden ist.

02:28:27.370 --> 02:28:30.990
Und ich will wissen, ob es eine Klicke einer bestimmten Größe gibt.

02:28:31.250 --> 02:28:34.050
Und jetzt möchten wir nochmal auf diese Reduktion zurückkehren.

02:28:34.830 --> 02:28:36.910
Wir wollen jetzt reduzieren Dreisat nach Klicke.

02:28:37.830 --> 02:28:39.050
Und warum machen wir das?

02:28:39.330 --> 02:28:40.990
Also, wir wollen jetzt folgendes zeigen.

02:28:41.090 --> 02:28:47.430
Dreisat, kleiner gleich Pol, Klicke.

02:28:49.190 --> 02:28:50.550
Und warum könnten wir das tun wollen?

02:28:50.730 --> 02:28:53.030
Das heißt, wir wissen dann später, dass die Relation zwischen Dreisat

02:28:53.030 --> 02:28:56.650
und Klicke die ist, dass Dreisat nichts schwerer ist als Klicke oder

02:28:56.650 --> 02:28:58.090
Klicke nicht leichter ist als Dreisat.

02:28:59.850 --> 02:29:02.410
Also, welche zwei Sachen können wir jetzt eigentlich feststellen?

02:29:02.530 --> 02:29:05.710
Angenommen, wir wissen, dass Klicke leicht ist, dann können wir damit

02:29:05.710 --> 02:29:07.830
herausfinden, dass Dreisat auch leicht ist.

02:29:09.170 --> 02:29:12.390
Wenn Klicke leicht ist und Dreisat ist leichter als Klicke, ist

02:29:12.390 --> 02:29:13.150
Dreisat auch leicht.

02:29:13.730 --> 02:29:16.070
Das ist aber nicht die Richtung, die wir jetzt machen wollen, sondern

02:29:16.070 --> 02:29:17.710
die Richtung, die wir machen wollen, ist genau die umgekehrte.

02:29:18.170 --> 02:29:19.970
Wir sagen jetzt, wir wissen, dass Dreisat schwer ist.

02:29:20.110 --> 02:29:23.170
Wir haben schon vorher mal herausgefunden, nicht wir, aber andere

02:29:23.170 --> 02:29:26.590
Leute haben das herausgefunden, dass Dreisat Np-vollständig ist.

02:29:28.270 --> 02:29:31.230
Und Np-vollständig heißt insbesondere Np-schwer, also alle Probleme

02:29:31.230 --> 02:29:32.650
aus Np sind darauf reduzierbar.

02:29:33.370 --> 02:29:34.670
Also ist Dreisat ein schweres Problem.

02:29:35.870 --> 02:29:40.110
Wenn wir jetzt Dreisat auf Klicke reduzieren könnten, dann wüssten wir

02:29:40.110 --> 02:29:41.550
also, dass Klicke auch ein schweres Problem ist.

02:29:42.090 --> 02:29:44.310
Ich weiß, dass Sie die Begriffe Dreisat und Klicke vielleicht noch

02:29:44.310 --> 02:29:48.090
nicht so verinnerlicht haben, kommen gleich auf den nächsten Folien,

02:29:48.170 --> 02:29:49.710
aber das ist zumindest die Idee.

02:29:49.890 --> 02:29:53.810
Wenn man zwei Probleme in Relation setzt mit dieser kleiner Gleich

02:29:53.810 --> 02:29:57.790
-Poll -Relation, dann weiß man, dass eins leichter oder höchstens so

02:29:57.790 --> 02:29:58.530
schwer ist, wie das andere.

02:29:59.370 --> 02:30:02.630
Und in dem Fall wollen wir zeigen, dass Dreisat ist schon schwer, das

02:30:02.630 --> 02:30:05.010
wissen wir, und wir wollen zeigen, dass Klicke also auch schwer ist.

02:30:05.710 --> 02:30:06.150
Np-schwer.

02:30:07.490 --> 02:30:13.750
Das Problem Dreisat dürfte Ihnen bekannt sein, zumindest von der Idee

02:30:13.750 --> 02:30:13.970
her.

02:30:14.070 --> 02:30:17.830
Es ist nämlich eine Einschränkung des Problems Sat, wo wir die Frage

02:30:17.830 --> 02:30:20.330
stellen, wir haben eine aussagenlogische Formel, die kann irgendwie

02:30:20.330 --> 02:30:23.510
aussehen, die kann auch, muss es nicht diese strenge Form haben, wie

02:30:23.510 --> 02:30:26.670
hier bei Dreisat, sondern die kann irgendwelche mit und und oder

02:30:26.670 --> 02:30:28.510
verknüpften Literale haben.

02:30:29.830 --> 02:30:34.090
Und die Frage ist, gibt es eine erfüllende Belegung für diese Formel?

02:30:34.650 --> 02:30:36.830
Ja, also können wir irgendwie da Nullen und Einsen zuweisen, den

02:30:36.830 --> 02:30:39.530
Variablen, sodass da am Ende Eins rauskommt.

02:30:41.590 --> 02:30:44.630
Und da, das ist eben dieses erste Problem, für das gezeigt wurde, dass

02:30:44.630 --> 02:30:50.410
es entweder vollständig ist, und bei Dreisat sind diese Formeln jetzt

02:30:50.410 --> 02:30:51.610
sehr stark eingeschränkt.

02:30:51.690 --> 02:30:54.630
Das heißt, wir haben jetzt eine beliebige Anzahl von Klauseln.

02:30:54.750 --> 02:30:55.830
Also das hier ist eine Klausel.

02:30:56.550 --> 02:31:00.450
C1, C2 und C3.

02:31:00.870 --> 02:31:02.090
Davon kann es beliebig viele geben.

02:31:02.270 --> 02:31:04.550
Das kann auch hier weitergehen mit C4.

02:31:05.610 --> 02:31:08.750
Aber es gibt nur drei Literale in jeder Klausel.

02:31:10.250 --> 02:31:11.490
Und das ist immer diese Struktur.

02:31:11.610 --> 02:31:14.930
Wir haben immer X1 oder X2 oder X3 und dann und.

02:31:15.570 --> 02:31:19.050
Dann wieder Literal 1 oder Literal 2 oder Literal 3 und so weiter.

02:31:20.010 --> 02:31:21.850
Und damit kann man eben auch zeigen, das ist auch schon irgendwie

02:31:21.850 --> 02:31:22.470
vollständig.

02:31:23.730 --> 02:31:26.490
Kann man dann auch so schreiben, einfach als Tupel von diesen

02:31:26.490 --> 02:31:27.390
Klauseln.

02:31:29.270 --> 02:31:32.590
Wobei dann, ja genau, mit diesen Klauseln hier halt.

02:31:33.690 --> 02:31:35.410
Und das ist jetzt einfach eine andere Schreibweise und das ist unser

02:31:35.410 --> 02:31:36.050
Problem Dreisat.

02:31:36.130 --> 02:31:37.810
Ich frage, gibt es eine erfüllende Belegung dafür?

02:31:38.910 --> 02:31:39.530
Ja, das steht hier nochmal.

02:31:39.530 --> 02:31:43.230
Sucht eine Belegung der Variablen X1 bis X4 mit 0 oder 1.

02:31:43.730 --> 02:31:45.930
Sodass A insgesamt den Wert 1 annimmt.

02:31:46.830 --> 02:31:50.370
Falls es so eine Belegung gibt, A erfüllbar, dann geben wir also True

02:31:50.370 --> 02:31:50.710
aus.

02:31:51.370 --> 02:31:53.190
Wenn wir einen Algorithmus dafür geschrieben haben.

02:31:53.890 --> 02:31:55.450
Und sonst geben wir False aus.

02:31:57.170 --> 02:32:00.290
Hier nochmal der Kommentar, ist es einfach ein Lösungskandidaten auf

02:32:00.290 --> 02:32:01.750
seine Gültigkeit hin zu überprüfen?

02:32:02.890 --> 02:32:07.010
Ja, wenn jemand Ihnen sagt, wir geben hier 1 sein, hier 1 sein und

02:32:07.010 --> 02:32:09.910
hier 1 sein und hier irgendwie, keine Ahnung, andere Werte, hier geben

02:32:09.910 --> 02:32:10.990
wir 0 ein und was weiß ich was.

02:32:11.890 --> 02:32:14.970
Dann können Sie leicht ausrechnen, ob das dann eine 1 ergibt am Ende.

02:32:15.650 --> 02:32:16.430
Das ist kein Problem.

02:32:16.930 --> 02:32:20.870
Wenn es eine 1 ergibt, wissen Sie, die logische Formel ist erfüllbar.

02:32:21.570 --> 02:32:24.150
Aber das Finden eines gültigen Lösungskandidaten ist schwierig.

02:32:25.210 --> 02:32:26.750
Und das ist, warum das Problem in NP liegt.

02:32:28.850 --> 02:32:33.070
das hier ist der Grund, warum es in NP liegt, weil nämlich eine nicht

02:32:33.070 --> 02:32:34.830
-heterogenistische Turing-Maschine kann ja einfach raten.

02:32:34.830 --> 02:32:36.110
Das ist ja das, was sie können.

02:32:36.710 --> 02:32:40.670
Sie können einfach eine Lösung erraten und dann kann man in mehrer

02:32:40.670 --> 02:32:43.010
Zeit überprüfen, ob diese Lösung stimmt.

02:32:44.050 --> 02:32:45.610
Das ist immer die Idee bei der nicht-heterogenistischen Turing

02:32:45.610 --> 02:32:48.550
-Maschine, weil die so viele Berechnungswege auf einmal abgehen kann,

02:32:50.590 --> 02:32:52.710
kann man es sich als Raten vorstellen.

02:32:52.810 --> 02:32:54.270
Sie sucht sich einfach den richtigen raus, sozusagen.

02:32:55.630 --> 02:32:58.390
Und wenn es einen richtigen gibt, man weiß ja nicht, ob es einen

02:32:58.390 --> 02:33:01.370
richtigen gibt, deswegen muss man am Ende noch überprüfen, ob das, was

02:33:01.370 --> 02:33:02.650
sie herausgefunden hat, auch wirklich richtig ist.

02:33:04.170 --> 02:33:04.650
So.

02:33:05.650 --> 02:33:06.450
Das war Dreisatz.

02:33:07.030 --> 02:33:08.050
Kommt das Problem Clique.

02:33:08.290 --> 02:33:10.490
Und Clique ist vielleicht sogar noch ein bisschen einfacher, zumindest

02:33:10.490 --> 02:33:11.290
von der Vorstellung her.

02:33:11.710 --> 02:33:16.470
Wir haben einen ungerichteten Graphen gegeben und wir haben ein K

02:33:16.470 --> 02:33:20.770
-Element N gegeben, also irgendeine Zahl, eine natürliche Zahl.

02:33:21.790 --> 02:33:25.830
Und die Frage ist, hat dieser Graph jetzt hier eine Clique der Größe

02:33:25.830 --> 02:33:26.330
K?

02:33:26.490 --> 02:33:28.650
Und Clique ist in dem Fall ein vollständig verbundener Teilgraph.

02:33:29.350 --> 02:33:34.870
Also die größte Clique für K gleich 3 wäre das eben genau diese Clique

02:33:34.870 --> 02:33:36.370
hier, die jetzt gerade rot geworden ist.

02:33:37.410 --> 02:33:38.390
Die sind vollständig verbunden.

02:33:38.850 --> 02:33:40.390
Alle Knoten müssen paarweise verbunden sein.

02:33:42.150 --> 02:33:45.790
Wenn wir eine Clique der Größe 4 haben wollten, dann könnten wir zum

02:33:45.790 --> 02:33:46.830
Beispiel hier so etwas verbinden.

02:33:48.150 --> 02:33:49.730
Aber es müssten alle miteinander verbunden sein.

02:33:51.230 --> 02:33:53.310
Ist die Clique-Definition klar?

02:33:54.990 --> 02:33:56.790
Und Dreisatz ist auch klar geworden allen?

02:33:57.850 --> 02:33:58.210
So.

02:33:59.310 --> 02:34:01.270
Jetzt denken Sie vielleicht, die beiden Probleme sind ja irgendwie

02:34:01.270 --> 02:34:02.010
unterschiedlich.

02:34:03.870 --> 02:34:07.050
Die Frage ist, wie kann man jetzt eigentlich eine Eingabe für Dreisatz

02:34:07.050 --> 02:34:08.330
in eine Eingabe für Clique umwandeln?

02:34:09.630 --> 02:34:13.630
Sodass dann, wenn wir das Problem Clique lösen, auch eine Lösung für

02:34:13.630 --> 02:34:14.690
Dreisatz rauskommt.

02:34:14.850 --> 02:34:16.870
Man denkt sich, wir haben hier außer-agnotische Formeln und hier haben

02:34:16.870 --> 02:34:17.670
wir ein Graph-Problem.

02:34:18.110 --> 02:34:18.990
Wie macht man das eigentlich?

02:34:19.770 --> 02:34:22.450
Und das Schöne ist, dass es eigentlich relativ einfach geht.

02:34:24.290 --> 02:34:26.790
Wir müssen jetzt nur ein bisschen kurz mitdenken, es sieht schwieriger

02:34:26.790 --> 02:34:27.710
aus, als es ist eigentlich.

02:34:28.550 --> 02:34:32.690
Also wir haben ein Dreisatzproblem.

02:34:33.370 --> 02:34:34.870
Das sind also M-Klauseln.

02:34:36.050 --> 02:34:42.210
Und jede Klausel CI besteht aus einem Literal oder drei Literalen CI1,

02:34:42.310 --> 02:34:43.230
CI2 und CI3.

02:34:43.490 --> 02:34:46.690
Also Literal ist immer eine Variable oder eine Negation der Variablen.

02:34:47.690 --> 02:34:47.710
Klar.

02:34:49.270 --> 02:34:49.870
So.

02:34:50.870 --> 02:34:52.590
Und wir haben also M von diesen Klauseln.

02:34:53.470 --> 02:34:56.970
Und jetzt konstruieren wir einen Graphen auf folgende Art.

02:34:57.890 --> 02:35:00.490
Wir nehmen drei M-Knoten rein.

02:35:01.270 --> 02:35:04.170
Drei M heißt, für jede Klausel nehmen wir drei Knoten rein.

02:35:04.250 --> 02:35:06.990
Das ist relativ naheliegend, weil jede Klausel ja auch drei Literale

02:35:06.990 --> 02:35:07.170
hat.

02:35:07.210 --> 02:35:08.930
Und jeder Knoten wird dann auch zu einem Literal gehören.

02:35:09.910 --> 02:35:12.050
Also wenn wir uns dieses Beispiel hier mal anschauen, das, was hier

02:35:12.050 --> 02:35:16.470
unten steht, mit diesen Belegungen hier, dann würde dieser Knoten,

02:35:16.570 --> 02:35:18.810
also das ist hier die erste Klausel, zweite Klausel und dritte

02:35:18.810 --> 02:35:19.270
Klausel.

02:35:20.470 --> 02:35:23.130
Und dieser erste Knoten würde zu X1 gehören.

02:35:23.250 --> 02:35:25.490
Also das ist dieses Literal hier.

02:35:26.290 --> 02:35:28.730
Das würde zu X2 gehören und das zu X3.

02:35:29.710 --> 02:35:32.030
Dann haben wir die nächste Klausel, die machen wir einfach eins

02:35:32.030 --> 02:35:32.390
drunter.

02:35:33.550 --> 02:35:37.970
X1' X2 X3'.

02:35:39.490 --> 02:35:45.190
Und ganz unten haben wir hier das hier, X1 X2' X3'.

02:35:46.210 --> 02:35:47.050
Und X3.

02:35:47.970 --> 02:35:50.110
So, wir haben also jedem Literal jetzt einen Knoten zugewiesen,

02:35:50.170 --> 02:35:50.450
sozusagen.

02:35:51.410 --> 02:35:53.850
Und dann befolgen wir folgende Regel, um Kanten einzubauen.

02:35:54.650 --> 02:35:57.650
Wir sagen, also ich habe die Knoten jetzt, das ist keine Benennung der

02:35:57.650 --> 02:35:59.490
Knoten, die Benennung steht immer hier daneben.

02:36:00.630 --> 02:36:03.630
Die Knoten sind immer mit IJ benannt, wobei immer IJ für die

02:36:05.090 --> 02:36:11.590
entsprechend, also ein Knoten IJ gehört auch immer zu dem Literal CIJ.

02:36:13.450 --> 02:36:16.970
Und dann bauen wir Kanten ein, indem wir sagen, eine Kante IJ nach I

02:36:16.970 --> 02:36:25.170
'J' ist genau dann vorhanden, Element der Kanten, des Graphen, genau

02:36:25.170 --> 02:36:27.950
dann, wenn erstens I ungleich I' ist.

02:36:28.390 --> 02:36:31.030
Das heißt, wir dürfen keine Kanten, so eine Kante ist nicht erlaubt,

02:36:31.070 --> 02:36:33.730
zwischen zwei Knoten innerhalb einer Klausel.

02:36:35.070 --> 02:36:35.850
Da werden wir gleich sehen, warum.

02:36:37.410 --> 02:36:41.370
Und CIJ und C'J' müssen gleichzeitig erfüllbar sein.

02:36:42.490 --> 02:36:46.230
Also nicht gleich einer Variablen XI und deren Komplement XI' sein.

02:36:46.990 --> 02:36:48.970
Das ist einfach die einzige Regel hier.

02:36:49.170 --> 02:36:53.490
So eine Kante dürfen wir nicht einbauen, weil die beiden nicht

02:36:53.490 --> 02:36:54.310
gleichzeitig erfüllbar sind.

02:36:54.630 --> 02:36:58.470
Aber wir dürfen zum Beispiel diese Kante einbauen, diese Kante

02:36:58.470 --> 02:37:01.010
einbauen, diese hier oder diese hier.

02:37:02.490 --> 02:37:08.010
Also diese hier wieder nicht, aber diese hier, oder, keine Ahnung,

02:37:08.090 --> 02:37:08.850
diese Kante hier.

02:37:09.670 --> 02:37:11.630
All diese Kanten können wir einbauen, wenn wir das alles komplett

02:37:11.630 --> 02:37:16.130
eingebaut haben, dann kommt hier also ein etwas unbesichtiger Graph

02:37:16.130 --> 02:37:16.330
raus.

02:37:16.370 --> 02:37:18.990
Und das ist auch logisch, wenn das Problem einfach wäre, könnten wir

02:37:18.990 --> 02:37:21.350
ja das Dreisat auch mit erschlagen gleich.

02:37:21.670 --> 02:37:24.810
Also in diesem Graphen hier sehen Sie nicht gleich, ob es eine Clique

02:37:24.810 --> 02:37:25.690
der Größe 3 gibt.

02:37:26.490 --> 02:37:27.630
Und das ist jetzt aber genau die Idee.

02:37:28.390 --> 02:37:32.270
Wir nehmen jetzt dieses M hier, was die Anzahl der Klauseln ist, in

02:37:32.270 --> 02:37:37.630
dem früheren Dreisat-Problem, und sagen unser K, diese Frage nach der

02:37:37.630 --> 02:37:39.830
Größenclique, ist genau gleich M.

02:37:39.970 --> 02:37:42.550
Und in dem Fall ist es gleich 3, weil wir hier eben 3 Klauseln haben.

02:37:43.810 --> 02:37:45.730
Und jetzt kommt der Knackpunkt.

02:37:46.230 --> 02:37:51.690
Wenn es eine Clique der Größe 3 gibt, dann muss die ja aus jeder Ebene

02:37:51.690 --> 02:37:55.770
hier einen Knoten enthalten.

02:37:56.210 --> 02:38:00.730
Weil Knoten aus einer einzelnen Ebene sind ja nie miteinander

02:38:00.730 --> 02:38:01.170
verbunden.

02:38:01.730 --> 02:38:04.530
Das heißt, es können zwei Knoten aus einer Ebene auch nicht Teil einer

02:38:04.530 --> 02:38:05.050
Clique sein.

02:38:06.430 --> 02:38:08.530
Knoten, die miteinander verbunden sind, können Teil einer Clique sein.

02:38:09.550 --> 02:38:13.010
Also aus jeder Ebene muss genau ein Knoten vorhanden sein, weil wir M

02:38:13.010 --> 02:38:15.470
-Ebenen haben und das K gleich M gesetzt wird.

02:38:16.690 --> 02:38:19.770
Und zusätzlich haben wir ja gesagt, dass die alle miteinander

02:38:19.770 --> 02:38:20.530
erfüllbar sein müssen.

02:38:20.930 --> 02:38:23.870
Wir haben ja Kanten nur eingebaut, wenn die Knoten dazwischen

02:38:24.430 --> 02:38:25.850
gleichzeitig erfüllbar sein konnten.

02:38:27.430 --> 02:38:29.410
Das heißt, wenn wir so eine Clique finden, dann haben wir auch eine

02:38:29.410 --> 02:38:32.430
erfüllbare Lösung gefunden.

02:38:32.850 --> 02:38:35.310
Also wenn wir eine Clique finden, dann ist diese aussagenlogische

02:38:35.310 --> 02:38:35.950
Formel erfüllbar.

02:38:36.610 --> 02:38:38.930
Die Lösung gefunden haben wir dann noch nicht gleich, aber zumindest

02:38:38.930 --> 02:38:40.110
haben wir das dann bewiesen.

02:38:42.210 --> 02:38:42.970
Ist das klar soweit?

02:38:43.870 --> 02:38:47.130
Ich weiß, dass das ein bisschen auf den ersten Blick ein bisschen

02:38:47.130 --> 02:38:51.630
unintuitiv ist, aber Sie können sich das ja nochmal genau daheim

02:38:51.630 --> 02:38:51.990
anschauen.

02:38:52.650 --> 02:38:54.790
Aber was Sie hier mitnehmen sollen, ist auf jeden Fall, wir haben ein

02:38:54.790 --> 02:38:58.170
Problem, das sich auf aussagenlogische Formeln bezieht.

02:38:58.270 --> 02:39:00.170
Jetzt übertragen auf ein graftheoretisches Problem.

02:39:01.310 --> 02:39:04.870
Wo man zuerst vielleicht denken würde, dass das vielleicht gar nicht

02:39:04.870 --> 02:39:05.110
geht.

02:39:06.010 --> 02:39:07.150
Gibt es dazu konkrete Fragen?

02:39:14.630 --> 02:39:15.330
Ja, genau.

02:39:21.490 --> 02:39:23.470
Die Frage ist, ob...

02:39:23.470 --> 02:39:26.130
Ich habe ja gesagt, dass dieses I ungleich I Strich bedeutet, dass es

02:39:26.130 --> 02:39:28.750
nicht auf einer Ebene, dass zwei Knoten nicht auf einer Ebene

02:39:28.750 --> 02:39:29.470
verbunden sein dürfen.

02:39:30.270 --> 02:39:31.170
Und wie war das dann?

02:39:31.410 --> 02:39:33.630
1 ,1 zu...

02:39:33.630 --> 02:39:35.150
1,2 zu 2,2.

02:39:35.150 --> 02:39:36.430
Ja, das ist ja in Ordnung.

02:39:36.810 --> 02:39:38.390
Ebenenweise meine ich diese Ebenen hier.

02:39:40.330 --> 02:39:44.370
Innerhalb einer Klausel darf es keine zwei verbundenen Knoten geben.

02:39:46.910 --> 02:39:47.930
Noch weitere Fragen?

02:39:51.350 --> 02:39:51.610
Okay.

02:39:52.570 --> 02:39:56.810
Wie gesagt, das ist der bisschen knifflige Beweis, aber da...

02:39:59.530 --> 02:40:01.210
Wenn Sie das mal verstanden haben, dann haben Sie auch diese ganze

02:40:01.210 --> 02:40:02.250
Reduktionsgeschichte verstanden.

02:40:04.090 --> 02:40:04.490
So.

02:40:05.270 --> 02:40:07.070
Hier steht nochmal, was ich eigentlich schon gesagt habe.

02:40:08.390 --> 02:40:10.770
Offensichtlich, das habe ich noch nicht gesagt, aber diese

02:40:10.770 --> 02:40:13.450
Transformation, die wir gerade gemacht haben, die geht in polemneller

02:40:13.450 --> 02:40:13.810
Zeit.

02:40:14.650 --> 02:40:19.590
Ja, wir müssen einfach nur für jeden Knoten, für jedes Literal aus der

02:40:19.590 --> 02:40:22.750
Formel, einen Knoten einbauen und dann halt diese Kanten einsetzen.

02:40:22.850 --> 02:40:27.470
Also maximal n² in der Anzahl der Variablen Zeit kostet das.

02:40:28.390 --> 02:40:31.190
Das heißt, wir haben, also wenn wir uns dieses Diagramm hier nochmal

02:40:31.190 --> 02:40:33.270
anschauen, wir haben 3 Satz.

02:40:33.370 --> 02:40:34.670
Das wollen wir auf Clique reduzieren.

02:40:35.690 --> 02:40:38.550
Und diese Funktion f hier, die muss in polemneller Zeit gehen.

02:40:39.550 --> 02:40:40.630
Das haben wir jetzt gezeigt.

02:40:40.770 --> 02:40:41.510
Diese Funktion f.

02:40:41.910 --> 02:40:44.070
Die haben wir gerade eben gezeigt.

02:40:44.530 --> 02:40:45.950
Dann können wir das Problem Clique lösen.

02:40:47.270 --> 02:40:48.550
Wir kriegen eine Lösung für Clique raus.

02:40:48.770 --> 02:40:50.650
Und normalerweise müssten wir das noch transformieren in eine Lösung

02:40:50.650 --> 02:40:55.350
für 3 Satz, aber weil das hier sowieso so eine True-False-Sache ist,

02:40:55.390 --> 02:40:57.750
wir kriegen hier nur wahr oder falsch raus, müssen wir da gar nichts

02:40:57.750 --> 02:40:58.290
mehr transformieren.

02:40:58.410 --> 02:40:59.570
Also diese Funktion g ist trivial.

02:41:00.110 --> 02:41:01.490
Die macht einfach gar nichts.

02:41:02.510 --> 02:41:07.270
Und dann haben wir sozusagen das Problem 3 Satz gelöst, indem wir

02:41:07.270 --> 02:41:08.930
diesen Umweg gegangen sind über das Problem Clique.

02:41:11.950 --> 02:41:14.170
Hier steht nochmal, wir müssen k gleich m wählen, gleich die Anzahl

02:41:14.170 --> 02:41:14.750
der Klauseln.

02:41:15.930 --> 02:41:18.170
Und die Frage ist, hat g eine Clique der Größe m?

02:41:18.570 --> 02:41:21.630
Dann haben wir diese Sache bewiesen.

02:41:21.810 --> 02:41:24.290
Dann gibt es m Literal in m verschiedenen Klauseln, das habe ich auch

02:41:24.290 --> 02:41:26.670
schon gesagt, sodass alle gleichzeitig erfüllt werden können.

02:41:27.570 --> 02:41:31.470
Und wir brauchen ja pro Klausel brauchen wir nur ein einziges Literal,

02:41:31.550 --> 02:41:33.870
was erfüllt ist, weil wir ja so eine und-Verknüpfung haben und innen

02:41:33.870 --> 02:41:34.890
drin sind oder-Verknüpfungen.

02:41:35.650 --> 02:41:38.270
Sobald eins in jeder erfüllt ist, ist die gesamte Formel erfüllt.

02:41:42.510 --> 02:41:45.650
Und damit haben wir gezeigt, Clique np schwer.

02:41:46.990 --> 02:41:49.450
Wer weiß, wie man zeigen würde, dass Clique in np ist, also dass es

02:41:49.450 --> 02:41:50.310
auch np-vollständig ist.

02:41:51.770 --> 02:41:52.990
Was müsste man dafür tun?

02:41:57.540 --> 02:42:01.780
Was macht man allgemein, wenn man zeigen will, dass es in np liegt?

02:42:03.500 --> 02:42:06.800
Man zeigt, dass es eine nicht-atomistische Turing-Maschine gibt, die

02:42:06.800 --> 02:42:10.560
die Lösung raten kann und in polymerer Zeit verifizieren, so wie

02:42:10.560 --> 02:42:11.600
vorhin für das Drei-Satz-Problem.

02:42:12.100 --> 02:42:14.880
Und bei Clique ist es einfach so, man kann einfach eine Teilmenge der

02:42:14.880 --> 02:42:17.120
Knoten raten und dann kann die Turing-Maschine auch wieder in

02:42:17.120 --> 02:42:19.660
polymerer Zeit verifizieren, aha, das ist eine Clique.

02:42:20.540 --> 02:42:22.420
Ja, da muss man nur noch schauen, ob die alle miteinander verbunden

02:42:22.420 --> 02:42:22.680
sind.

02:42:23.160 --> 02:42:26.900
Das dauert maximal irgendwie e², wenn n die Anzahl der Kanten ist.

02:42:29.920 --> 02:42:32.280
Nein, n², wenn n die Anzahl der Knoten ist, sagen wir es mal so.

02:42:34.540 --> 02:42:36.860
Okay, gut, dann haben wir das geschafft.

02:42:37.760 --> 02:42:40.720
Jetzt kommen noch einige Bemerkungen dazu, die jetzt auch nochmal ganz

02:42:40.720 --> 02:42:41.280
interessant sind.

02:42:41.740 --> 02:42:45.120
Wir haben uns jetzt die sogenannte Entscheidungsvariante von dem

02:42:45.120 --> 02:42:46.260
Problem Clique angeschaut.

02:42:47.960 --> 02:42:51.820
Und diese war, gibt es eine Clique der Größe k in einem Graphen g?

02:42:52.640 --> 02:42:56.420
Das heißt, wir haben sowohl den Graphen g, als auch die Zahl k

02:42:56.420 --> 02:42:57.120
vorgegeben.

02:42:58.540 --> 02:43:00.600
Jetzt könnte man sich aber vorstellen, vielleicht habe ich einen

02:43:00.600 --> 02:43:03.940
Graphen und mich interessiert nicht für ein bestimmtes k, ob es das

02:43:03.940 --> 02:43:07.980
gibt, sondern mich interessiert das größte k, für das es noch eine

02:43:07.980 --> 02:43:08.420
Clique gibt.

02:43:08.580 --> 02:43:11.280
Das ist dann die sogenannte Optimierungsvariante.

02:43:11.360 --> 02:43:13.320
Eine Optimierungsvariante, das andere ist eigentlich auch eine.

02:43:13.800 --> 02:43:17.900
Die nächste Variante, die dritte hier, ist, da wollen wir sogar eine

02:43:17.900 --> 02:43:18.820
Clique berechnen.

02:43:20.300 --> 02:43:22.580
Die größte Clique berechnen, die in diesem Graphen ist.

02:43:24.080 --> 02:43:28.480
Jetzt ist offensichtlich, was hier steht, wenn wir das Problem 3

02:43:28.480 --> 02:43:30.540
gelöst haben, dann können wir auch die anderen alle lösen.

02:43:30.940 --> 02:43:32.060
Dieses blöde Ding da.

02:43:33.320 --> 02:43:34.240
Ich konnte das nicht ausschalten.

02:43:34.300 --> 02:43:36.280
Ich wollte das eigentlich ausschalten, aber ich weiß echt nicht, wie

02:43:36.280 --> 02:43:36.920
man das deaktiviert.

02:43:36.980 --> 02:43:39.580
Das ist irgendwie mit dem Computer verwachsen, glaube ich.

02:43:40.940 --> 02:43:43.580
Da kann man nämlich so dann Schriftzeichen erkennen lassen, wenn man

02:43:43.580 --> 02:43:44.640
das hier ausfährt.

02:43:46.000 --> 02:43:46.880
Aber ist egal.

02:43:48.160 --> 02:43:51.220
Okay, also in dieser Richtung können wir, wenn wir das dritte Problem

02:43:51.220 --> 02:43:52.980
gelöst haben, können wir das zweite und erste auch lösen.

02:43:54.300 --> 02:43:57.040
Weil wenn wir eine Clique schon kennen, die größte, dann können wir

02:43:57.040 --> 02:43:59.540
einfach die Knoten zählen und wissen, aha, dann ist das also das

02:43:59.540 --> 02:43:59.980
größte K.

02:44:00.480 --> 02:44:04.780
Und wenn wir das größte K kennen, dann können wir auch wenn uns jemand

02:44:04.780 --> 02:44:08.800
fragt, gibt es eine Clique der Größe L, dann schauen wir einfach, ist

02:44:08.800 --> 02:44:12.660
das L kleiner als das K oder kleiner gleicht K, dann sagen wir ja, so

02:44:12.660 --> 02:44:13.160
eine gibt es.

02:44:13.460 --> 02:44:15.020
Für alles Kleiner gibt es ja dann.

02:44:16.080 --> 02:44:18.320
Wenn wir eine Dreiklicke haben, haben wir auch Zweiklicken und

02:44:18.320 --> 02:44:18.740
Einzerklicken.

02:44:20.960 --> 02:44:22.580
Und wenn es größer ist, sagen wir nein.

02:44:23.240 --> 02:44:24.300
Das heißt, in die Richtung ist es klar.

02:44:24.800 --> 02:44:28.840
Interessant ist jetzt aber auch, dass wir auch in die Richtung, das

02:44:28.840 --> 02:44:29.500
gilt das auch.

02:44:29.820 --> 02:44:32.040
Wenn wir das erste Problem gelöst haben, haben wir im Wesentlichen

02:44:32.040 --> 02:44:33.040
auch die anderen beiden gelöst.

02:44:33.500 --> 02:44:34.760
Bis auf problemelle Faktoren.

02:44:35.260 --> 02:44:36.260
Und zwar, wie macht man das?

02:44:36.720 --> 02:44:40.340
Angenommen, wir haben herausgefunden, wie man dieses Problem löst.

02:44:40.400 --> 02:44:41.760
Gibt es eine Clique der Größe K in G.

02:44:42.800 --> 02:44:46.320
Und wir wollen mit dieser Idee, mit diesem Algorithmus dafür, wollen

02:44:46.320 --> 02:44:49.760
wir jetzt lösen, die Frage, berechnet das größte K, sodass G eine K

02:44:49.760 --> 02:44:50.340
-Clique enthält.

02:44:51.440 --> 02:44:55.660
Es gibt ja für dieses K genau N verschiedene Möglichkeiten.

02:44:55.800 --> 02:45:01.180
Wenn wir N Knoten haben, ist die größte Clique entweder 1, also wenn

02:45:01.180 --> 02:45:02.080
es ein nicht trivialer Graph ist.

02:45:02.160 --> 02:45:04.180
In einem leeren Graphen hätten wir eine Clique der Größe 0 nur.

02:45:04.320 --> 02:45:06.440
Aber sobald wir überhaupt ein Knoten haben, haben wir schon die Größe

02:45:06.440 --> 02:45:06.700
1.

02:45:06.800 --> 02:45:07.800
Deswegen schreibe ich hier mal 1 hin.

02:45:08.560 --> 02:45:09.580
Und das Maximum ist N.

02:45:09.980 --> 02:45:13.480
Ja, wir können irgendwas zwischen 1 und N...

02:45:14.700 --> 02:45:16.500
ist dieses maximale K groß.

02:45:18.360 --> 02:45:20.540
Und dann können wir einfach eine binäre Suche auf diesem Suchraum

02:45:20.540 --> 02:45:20.780
machen.

02:45:20.920 --> 02:45:22.520
Wir können sagen, wir fangen mal mit N halber an.

02:45:23.220 --> 02:45:24.280
Eine binäre Suche kennen Sie.

02:45:24.920 --> 02:45:27.120
Wir fangen mit N halber an und schauen, gibt es eine Clique dieser

02:45:27.120 --> 02:45:27.480
Größe?

02:45:27.760 --> 02:45:30.780
Wenn es eine gibt, dann gehen wir in diese Richtung.

02:45:31.240 --> 02:45:32.480
Wenn es keine gibt, gehen wir in diese Richtung.

02:45:32.680 --> 02:45:37.760
Angenommen, es gibt eine, sind wir dann hier bei 3 Viertel N.

02:45:39.100 --> 02:45:41.620
Und testen da mal, ob es eine Clique der Größe 3 Viertel N gibt.

02:45:41.800 --> 02:45:44.080
Wenn es eine, wenn es keine gibt, dann gehen wir hier hin.

02:45:45.860 --> 02:45:47.520
5 Achtel N oder sowas hier.

02:45:49.120 --> 02:45:52.440
Und so arbeiten wir uns hier praktisch immer näher an die Lösung ran.

02:45:53.520 --> 02:45:57.680
Und brauchen maximal logarithmisch viel Zeit, um das rauszukriegen.

02:45:58.940 --> 02:46:02.100
Also um das größte K zu kriegen, müssen wir nur logarithmisch mal mehr

02:46:02.100 --> 02:46:10.360
Aufwand reinstecken, irgendwie ein Log, als wir für das ursprüngliche

02:46:10.360 --> 02:46:11.220
Problem reingesteckt haben.

02:46:11.460 --> 02:46:12.600
Also nur minimal mehr Aufwand.

02:46:13.800 --> 02:46:16.920
Und angenommen, wir haben jetzt einen Algorithmus, dementsprechend,

02:46:17.060 --> 02:46:19.740
der jetzt dieses zweite Problem löst, dann können wir

02:46:19.740 --> 02:46:21.360
interessanterweise auch das dritte Problem lösen.

02:46:21.520 --> 02:46:25.820
Wenn wir uns mal nämlich, steht hier, was gemacht werden muss.

02:46:26.440 --> 02:46:29.660
Wenn wir ein maximales K erkennen, entfernen wir einfach jede Kante

02:46:29.660 --> 02:46:33.200
probeweise aus dem Graphen und schauen, ob sich dieses maximale K

02:46:33.200 --> 02:46:33.580
ändert.

02:46:34.940 --> 02:46:38.080
Wenn es sich ändert, dann heißt es, die Kante hat zur Klicke

02:46:38.080 --> 02:46:38.700
dazugehört.

02:46:39.300 --> 02:46:42.080
Wenn es sich nicht ändert, heißt es, sie hat nicht dazugehört.

02:46:42.180 --> 02:46:46.820
Also ich habe mir hier mal so einen Beispielgraphen aufgemalt.

02:46:48.520 --> 02:46:50.620
Keine Ahnung, irgendwie so ist es eigentlich egal, wie der aussieht.

02:46:51.460 --> 02:46:54.500
Wir haben herausgefunden, dass dieser Graph der maximale Klicke der

02:46:54.500 --> 02:46:55.200
Größe 4 hat.

02:46:55.820 --> 02:46:59.240
Und das ist in dem Fall diese Knoten hier.

02:47:00.460 --> 02:47:02.720
Wenn wir jetzt einfach anfangen, irgendwelche Kanten zu löschen, sagen

02:47:02.720 --> 02:47:07.540
wir mal, wir haben hier K gleich 4 und löschen diese Kante hier.

02:47:08.620 --> 02:47:12.200
Dann festen wir es wieder und stellen fest, K ist immer noch gleich 4.

02:47:12.960 --> 02:47:14.800
Das heißt, diese Kante kann nicht zur Klicke gehört haben.

02:47:16.000 --> 02:47:18.260
Dann löschen wir vielleicht noch eine andere Kante, diese hier, und

02:47:18.260 --> 02:47:20.120
stellen fest, oh, jetzt haben wir plötzlich nur noch 3.

02:47:21.320 --> 02:47:23.000
Jetzt sagt unser Algorithmus, wir haben nur noch K gleich 3.

02:47:23.600 --> 02:47:26.120
Dann fügen wir diese Kante schnell wieder ein, weil die gehört dann

02:47:26.120 --> 02:47:26.700
zur Klicke dazu.

02:47:27.820 --> 02:47:29.840
Dann löschen wir weiter, stellen fest, wenn wir das hier löschen,

02:47:29.840 --> 02:47:30.740
bleibt es 4.

02:47:31.540 --> 02:47:32.020
Und so weiter.

02:47:32.580 --> 02:47:34.600
Und irgendwann haben wir alle Kanten durchgetestet.

02:47:34.660 --> 02:47:36.600
Das heißt, wir müssen maximal n Kanten testen.

02:47:37.120 --> 02:47:38.940
Oder maximal die Anzahl der Kanten testen.

02:47:39.700 --> 02:47:42.060
Und haben dann diese Klicke gefunden.

02:47:42.500 --> 02:47:45.380
Am Ende haben wir rausgefunden, es sind genau diese 4 Knoten.

02:47:46.760 --> 02:47:47.300
Ist das soweit?

02:47:48.360 --> 02:47:51.200
Das heißt, wir haben hier maximal einen Aufwand von der Anzahl der

02:47:53.040 --> 02:47:56.120
Knoten, sondern der Kanten.

02:47:57.380 --> 02:47:57.960
Ist das klar?

02:47:59.880 --> 02:48:04.200
Warum wir das hier zeigen für Klicke, ist einfach, weil das für viele,

02:48:04.340 --> 02:48:07.280
für sehr viele Optimierungsprobleme gilt genau dieser Zusammenhang.

02:48:07.900 --> 02:48:11.200
Also meistens genügt es, dass wir uns die Entscheidungsvariante der

02:48:11.200 --> 02:48:14.440
Probleme anschauen und wenn wir zeigen, dass die Entscheidungsvariante

02:48:14.440 --> 02:48:17.140
leicht ist, dann können wir auch die anderen Probleme lösen.

02:48:17.240 --> 02:48:18.760
Das heißt, wir müssen uns die anderen gar nicht genau anschauen.

02:48:22.290 --> 02:48:23.710
Es reicht, wenn wir uns die Entscheidungsvariante anschauen.

02:48:25.470 --> 02:48:25.730
Okay.

02:48:27.010 --> 02:48:30.350
Ich würde mal behaupten, das war jetzt dieser knifflige Teil.

02:48:32.490 --> 02:48:35.510
Gibt es zu dem, was ich davor erzählt habe, noch irgendwelche Fragen?

02:48:36.990 --> 02:48:38.410
Zu diesen Reduktionsgeschichten an dem Ganzen?

02:48:40.290 --> 02:48:42.150
Ich hoffe, dass das einigermaßen verständlich war.

02:48:44.830 --> 02:48:47.010
So, und jetzt kommt hier ein kleiner Comic, den Herr Schmeck hier mal

02:48:47.010 --> 02:48:50.750
einfügt, damit man nochmal die praktische Relevanz des Ganzen sieht.

02:48:51.250 --> 02:48:52.270
Wofür wir das eigentlich machen.

02:48:52.650 --> 02:48:54.910
Und die Idee ist einfach, Sie sind natürlich nicht der Boss, sondern

02:48:54.910 --> 02:48:56.810
der hier am Anfang, wenn Sie in Ihre Karriere einsteigen.

02:48:57.870 --> 02:49:01.990
Und Sie kommen zu Ihrem Boss und der sagt Ihnen, ich hätte gerne, dass

02:49:01.990 --> 02:49:08.390
Sie für mich keine Ahnung, vielleicht arbeiten Sie bei Facebook und

02:49:08.390 --> 02:49:11.910
der Chef möchte, dass Sie die größten Klicken rauskriegen, die es im

02:49:11.910 --> 02:49:12.690
Facebook -Netzwerk gibt.

02:49:12.810 --> 02:49:15.150
Also die größten verbundenen Teilgraphen, zufälligerweise.

02:49:16.670 --> 02:49:20.150
Und dann sagen Sie, ich weiß nicht, ich habe mich jetzt drei Wochen

02:49:20.150 --> 02:49:22.030
hingesetzt und habe keinen Algorithmus gefunden.

02:49:22.810 --> 02:49:24.830
Kann natürlich sein, dass ich da irgendwie zu blöd dafür bin.

02:49:26.350 --> 02:49:30.810
Sagt der Chef, ja, zu blöd ist doof, dann muss ich Sie leider

02:49:30.810 --> 02:49:31.410
rausschmeißen.

02:49:32.150 --> 02:49:34.650
Oder von mir aus kriegen Sie eine Abmahnung oder sowas.

02:49:36.410 --> 02:49:39.990
Die nächste Variante ist, Sie sind ein bisschen selbstbewusster und

02:49:39.990 --> 02:49:43.310
sagen, ich habe jetzt viereinhalb Monate an dem Problem gearbeitet und

02:49:43.310 --> 02:49:44.850
ich kann immer noch keinen effizienten Algorithmus finden.

02:49:45.550 --> 02:49:47.530
Ich vermute, es gibt gar keinen effizienten Algorithmus.

02:49:48.250 --> 02:49:51.250
Dann sagt der Chef, ja, vermuten kann man vieles.

02:49:52.290 --> 02:49:53.570
Sechseinhalb Monate ist eine lange Zeit.

02:49:53.650 --> 02:49:54.610
Warum haben Sie so viel Zeit verschwendet?

02:49:54.670 --> 02:49:55.390
Und dann schmeißt Sie wieder raus.

02:49:57.270 --> 02:50:00.110
Und unsere ganzen Reduktionsgeschichten hindern Sie jetzt den Chef

02:50:00.110 --> 02:50:01.070
daran, Sie auszuschmeißen.

02:50:01.130 --> 02:50:03.610
Weil das ist jetzt nämlich die Argumentation, die Sie jetzt benutzen

02:50:03.610 --> 02:50:03.830
können.

02:50:04.270 --> 02:50:06.450
Sie sagen immer noch, ich kann keinen effizienten Algorithmus finden.

02:50:07.170 --> 02:50:08.330
Sie können nicht beweisen, dass es keinen gibt.

02:50:08.670 --> 02:50:09.330
Das klappt nicht.

02:50:10.010 --> 02:50:12.950
Aber Sie können beweisen, dass das Problem entweder vollständig ist.

02:50:14.230 --> 02:50:18.430
Und das heißt, es gibt ja Tausende inzwischen von vollständigen

02:50:18.430 --> 02:50:19.090
Problemen.

02:50:20.210 --> 02:50:26.870
Wir haben jetzt hier eine Clique, die zeigt, dass es drei Satz da ist.

02:50:27.830 --> 02:50:32.750
Es gibt hier Satz und alle möglichen anderen Probleme auch.

02:50:33.230 --> 02:50:36.430
Und wir müssten nur eins von diesen lösen, um alle gelöst zu haben.

02:50:36.650 --> 02:50:38.570
Also in polymerer Zeit, deterministisch.

02:50:38.670 --> 02:50:40.010
Das ist diese Idee immer.

02:50:40.570 --> 02:50:42.770
Das heißt, all diese Leute, die sich damit schon beschäftigt haben,

02:50:43.790 --> 02:50:45.490
die das Problem lösen wollten, aus welchen Gründen auch immer.

02:50:45.650 --> 02:50:48.350
Vielleicht wollten sie diese Millionen absahnen oder irgendwas.

02:50:48.870 --> 02:50:50.990
Aber all diese haben keinen effizienten Algorithmus finden können.

02:50:52.210 --> 02:50:55.450
Und dann haben sie schon irgendwie ein deutlich besseres Argument im

02:50:55.450 --> 02:50:59.110
Rücken bei ihrem Chef und können sagen, ja gut, ich habe es zwar nicht

02:50:59.110 --> 02:51:01.450
gefunden, aber es wäre schon interessant, wenn ich es finden würde,

02:51:01.530 --> 02:51:03.130
dann müsste ich sowieso nicht mehr arbeiten.

02:51:03.210 --> 02:51:05.770
Dann hätte ich ja die Millionen verdient.

02:51:07.150 --> 02:51:08.170
Die Idee ist klar.

02:51:16.610 --> 02:51:19.050
Und wie verhält man sich jetzt aber, wenn man...

02:51:19.050 --> 02:51:21.050
das habe ich hier noch...

02:51:21.870 --> 02:51:24.370
Wenn man jetzt tatsächlich ein vollständiges Problem lösen will.

02:51:25.830 --> 02:51:28.170
Man kann zum Beispiel überprüfen, ob das Problem in einer

02:51:28.170 --> 02:51:29.450
eingeschränkten Form vorliegt.

02:51:30.090 --> 02:51:32.970
Also ob man durch zusätzliche Randbedingungen vielleicht zu einer

02:51:33.430 --> 02:51:34.350
Lösung kommen kann.

02:51:35.190 --> 02:51:37.170
Also beispielsweise könnte man bei dem Drei-Satz-Problem schauen.

02:51:38.190 --> 02:51:39.950
Vielleicht brauche ich gar kein Drei-Satz, vielleicht reicht mir schon

02:51:39.950 --> 02:51:40.450
Zwei -Satz.

02:51:41.910 --> 02:51:45.170
Interessanterweise kann man nämlich rausfinden, zeigen, dass Zwei-Satz

02:51:45.170 --> 02:51:46.110
sehr leicht lösbar ist.

02:51:46.270 --> 02:51:47.930
Zwei-Satz kann man in Linearzeit lösen.

02:51:48.790 --> 02:51:50.590
Für Drei-Satz brauchen wir wahrscheinlich Exponentialzeit.

02:51:51.390 --> 02:51:52.370
Das ist ganz interessant.

02:51:53.270 --> 02:51:56.390
Zwei-Satz heißt, dass wir immer nur zwei literale Vorformel haben.

02:51:56.670 --> 02:52:02.950
Also nicht mehr drei, sondern einfach nur zwei, wieder zwei, und so

02:52:02.950 --> 02:52:03.190
weiter.

02:52:04.410 --> 02:52:07.150
Das heißt, wir reduzieren so eine Kleinigkeit in der

02:52:07.150 --> 02:52:09.190
Problembeschreibung und plötzlich wird das Problem sehr einfach.

02:52:10.670 --> 02:52:13.830
Das ist das, was man immer zuerst anstreben sollte, wenn man so ein

02:52:13.830 --> 02:52:14.830
bevollständiges Problem hat.

02:52:15.310 --> 02:52:18.010
Wenn man jetzt irgendwie in Facebook ist, dann könnte man überlegen,

02:52:18.070 --> 02:52:20.250
ob man wirklich alle vollständig verbundenen Teilgraphen braucht oder

02:52:20.250 --> 02:52:23.730
ob es einem vielleicht reicht, herauszufinden, wer mit wem befreundet

02:52:23.730 --> 02:52:24.310
ist oder sowas.

02:52:25.330 --> 02:52:30.370
Oder irgendwie diese Problematik so ein bisschen runterbrechen auf ein

02:52:30.370 --> 02:52:31.150
einfacheres Problem.

02:52:32.810 --> 02:52:35.490
Dann die zweite Variante, wenn Sie jetzt wirklich tatsächlich dieses

02:52:35.490 --> 02:52:36.710
große Problem lösen wollen.

02:52:37.890 --> 02:52:41.470
Die zweite Variante wäre, dass man sich das Problem, dass man sich mit

02:52:41.470 --> 02:52:42.910
einer superoptimalen Lösung zufrieden gibt.

02:52:44.250 --> 02:52:47.990
Und da ist die gute Variante immer noch, es gibt für manche Probleme

02:52:47.990 --> 02:52:51.410
eine Garantie, dass wir zum Beispiel auf den Faktor 1,5 rankommen an

02:52:51.410 --> 02:52:52.190
die optimale Lösung.

02:52:53.750 --> 02:52:57.150
Travelling Salesman Problem oder Salesperson Problem ist zum Beispiel

02:52:57.150 --> 02:52:58.350
in quadratischer Zeit lösbar.

02:52:58.530 --> 02:53:01.890
Sie kennen das, Sie wollen herausfinden, ob Sie...ist das eine Frage

02:53:01.890 --> 02:53:02.410
da oben oder?

02:53:03.010 --> 02:53:03.630
Nein, nur strecken.

02:53:06.310 --> 02:53:09.510
Sie wollen die kürzeste Rundreise von mir aus irgendwie der

02:53:09.510 --> 02:53:11.930
Hauptstädte in Europa oder sowas rauskriegen.

02:53:13.690 --> 02:53:16.310
Und das ist die Optimierungsvariante, wenn Sie die kürzeste Rundreise

02:53:16.310 --> 02:53:16.610
wollen.

02:53:17.430 --> 02:53:18.910
Und keine Stadt wird mehrfach besucht.

02:53:20.570 --> 02:53:23.790
Und das kriegen Sie bis auf einen Faktor von 1,5 hin mit quadratischer

02:53:23.790 --> 02:53:24.210
Laufzeit.

02:53:24.310 --> 02:53:25.110
Das ist ja schon mal ganz nett.

02:53:25.650 --> 02:53:26.630
Quadratische Laufzeit ist schön.

02:53:26.810 --> 02:53:28.010
Das ist was, was wir gerne haben.

02:53:30.010 --> 02:53:32.990
Und wenn man sich noch ein bisschen mehr Energie reinsteckt, also mehr

02:53:32.990 --> 02:53:35.110
Zeit reinsteckt, kriegt man das auch noch ein bisschen weiter

02:53:35.110 --> 02:53:35.650
runtergedrückt.

02:53:36.630 --> 02:53:39.870
Es gibt auch so Probleme, wo man so einen logarithmischen Faktor

02:53:39.870 --> 02:53:40.330
reinkriegt.

02:53:40.810 --> 02:53:43.630
Man sagt, ich kriege das bis auf einen logarithmischen Faktor genau

02:53:43.950 --> 02:53:44.270
approximiert.

02:53:44.450 --> 02:53:45.870
Das ist zum Beispiel das Mengenüberdeckungsproblem.

02:53:46.010 --> 02:53:49.610
Das ist auch so ein vollständiges Problem, bei dem man das auch

02:53:49.610 --> 02:53:52.330
relativ gutartig ist mit diesen Theoristiken.

02:53:53.030 --> 02:53:54.370
Aber genau kriegt man es halt nicht gelöst.

02:53:54.970 --> 02:53:57.370
Es gibt sogar Probleme, die man auf einen beliebigen Faktor Epsilon

02:53:57.370 --> 02:53:59.870
runterdrücken kann, der aber immer größer Null ist.

02:54:00.310 --> 02:54:01.590
Und dadurch braucht man halt immer mehr Zeit.

02:54:01.650 --> 02:54:06.110
Aber man kriegt es trotzdem in polemialer Zeit gelöst.

02:54:07.990 --> 02:54:10.190
Man kann eine systematische Entwurfsmethodik anwenden.

02:54:10.290 --> 02:54:13.270
Das ist das, was wir Informatiker gerne tun, dynamisch programmieren.

02:54:14.510 --> 02:54:17.830
Kennen Sie, dass man so eine Tabelle sich mit den Zwischenlösungen

02:54:17.830 --> 02:54:19.270
speichert und die nicht nochmal berechnet.

02:54:20.370 --> 02:54:22.610
Divide and conquer, dass man Probleme aufspaltet in kleinere

02:54:22.610 --> 02:54:23.870
Teilprobleme und diese löst.

02:54:25.130 --> 02:54:27.190
Und branch and cut heißt, dass man sich so einen Baum aufbaut.

02:54:28.090 --> 02:54:29.370
Oder branch and bound, branch and cut.

02:54:30.150 --> 02:54:31.950
Man baut sich so einen Baum auf und versucht immer auf eine

02:54:31.950 --> 02:54:35.810
intelligente Art diese Äste des Baums einfach wegzulassen und zu

02:54:35.810 --> 02:54:39.350
hoffen, dass man da, wo man die Äste weggelassen hat, da die Lösung

02:54:39.350 --> 02:54:40.010
sowieso nicht ist.

02:54:41.450 --> 02:54:45.070
Aber all diese Problemlösungsarten bringen nur was für kleine

02:54:45.070 --> 02:54:47.090
Instanzen, weil sonst wäre das Problem nicht NP-vollständig.

02:54:48.010 --> 02:54:52.610
Solange wir die exakte Lösung haben wollen, kommen wir um dieses NP

02:54:52.610 --> 02:54:53.410
-Vollständige nicht drum herum.

02:54:53.630 --> 02:54:56.630
Also auch mit diesen tollen Methoden bleibt das Problem NP

02:54:56.630 --> 02:54:57.150
-vollständig.

02:54:57.470 --> 02:55:01.510
Es sei denn, wir können auch diese ganzen Methoden approximiert

02:55:01.510 --> 02:55:01.830
anwenden.

02:55:02.450 --> 02:55:03.090
Das geht auch.

02:55:03.730 --> 02:55:05.650
Sobald wir eine Approximation einbauen, passt es dann wieder.

02:55:05.810 --> 02:55:06.650
Dann kriegen wir es vielleicht hin.

02:55:07.690 --> 02:55:10.350
Und dann können wir auch noch ein bisschen weiter das Ganze aufweichen

02:55:10.350 --> 02:55:13.450
und sagen, wir wollen gar keine Garantie mehr für die Lösungsgüte und

02:55:13.450 --> 02:55:15.670
verwenden eine schnelle Heuristik oder so eine...

02:55:16.830 --> 02:55:17.370
Ja, genau.

02:55:17.450 --> 02:55:18.310
Zum Beispiel das nearest neighbor.

02:55:19.230 --> 02:55:24.110
Man kann solche greedy Verfahren einsetzen, um solche Probleme

02:55:24.110 --> 02:55:24.670
anzugehen.

02:55:25.230 --> 02:55:27.350
Dann kriegt man keine Lösungsgarantie raus.

02:55:27.350 --> 02:55:31.130
Man weiß nicht, wie nah man an die richtige Lösung rankommt, aber in

02:55:31.130 --> 02:55:33.830
hinreichend vielen Fällen ist man hoffentlich einigermaßen nah dran.

02:55:34.530 --> 02:55:36.250
Und das gleiche gilt auch für diese randomisierten Verfahren.

02:55:36.730 --> 02:55:39.590
TabuSearch, Simulated Annealing, Evolutionäre Algorithmen und

02:55:39.590 --> 02:55:40.790
Ameisenalgorithmen.

02:55:43.010 --> 02:55:45.390
Die schreibt der Schmeck hier auch gerne hin, weil das genau die

02:55:45.390 --> 02:55:54.570
Sachen sind, mit denen wir uns an unserem Lehrstuhl also IFB, LS1 sind

02:55:54.570 --> 02:55:58.350
so die Sachen, mit denen wir uns viel beschäftigen und wo wir uns auch

02:55:58.350 --> 02:55:58.890
gut auskennen.

02:55:59.830 --> 02:56:02.950
Also wenn Sie da Interesse daran haben, das sind Meta-Heuristiken.

02:56:16.740 --> 02:56:20.760
Meta-Heuristiken deswegen, weil man eine ganze Klasse von Heuristiken

02:56:20.760 --> 02:56:20.940
hat.

02:56:21.040 --> 02:56:23.060
Das ist nicht eine Heuristik für ein bestimmtes Problem, sondern man

02:56:23.060 --> 02:56:25.120
kann da irgendein Problem reinpacken und einen Evolutionären

02:56:25.120 --> 02:56:27.800
Algorithmus drauf ansetzen und er kriegt es dann einigermaßen raus.

02:56:28.260 --> 02:56:32.180
Die funktionieren auch ganz gut bei bei diesen NP-Vollständigen

02:56:32.180 --> 02:56:32.640
Problemen.

02:56:32.740 --> 02:56:34.860
Allerdings kann man halt nie so sicher sein, wie gut man eigentlich

02:56:34.860 --> 02:56:36.720
wird, welche Lösungen man tatsächlich kriegt.

02:56:37.460 --> 02:56:39.400
Wenn man Pech hat, kann es sein, dass man relativ weit von der

02:56:39.400 --> 02:56:40.640
richtigen Lösung entfernt bleibt.

02:56:41.480 --> 02:56:43.840
Aber in vielen Fällen kommen wir halt auf eine ganz gute Lösung.

02:56:45.100 --> 02:56:47.080
Achso, was ich dazu noch sagen wollte, genau, wir sind da

02:56:47.080 --> 02:56:50.620
gewissermaßen Experten und wenn Sie irgendwie Bachelor- Masterarbeiten

02:56:50.620 --> 02:56:55.760
suchen oder Praktikum, also ich habe zum Beispiel ein Praktikum zur

02:56:55.760 --> 02:56:56.660
evolutionären Robotik.

02:56:57.140 --> 02:56:59.200
Wenn Sie das interessiert, können Sie sich da gerne mal melden.

02:57:00.520 --> 02:57:05.580
Hat nichts mit NP zu tun, aber gehört hier auch irgendwie zu diesen

02:57:06.420 --> 02:57:07.300
randomisierten Optimierungsverfahren.

02:57:08.420 --> 02:57:13.320
Es gibt übrigens auch randomisierte Algorithmen, die doch wieder so

02:57:13.320 --> 02:57:16.060
eine Art von Garantie, Lösungsgarantie haben.

02:57:16.520 --> 02:57:20.460
Die sagen einem nämlich, das sind Algorithmen, die entweder die

02:57:20.460 --> 02:57:22.780
richtige Lösung ausspucken oder gar keine.

02:57:23.320 --> 02:57:25.160
Und die sagen einem dann, man kriegt dann immer so einen Baum raus.

02:57:25.240 --> 02:57:28.020
Man lässt diesen Algorithmus laufen, man kriegt entweder raus die

02:57:28.020 --> 02:57:32.080
Lösung oder man kriegt raus, ich habe es nicht rausfinden können.

02:57:33.340 --> 02:57:34.180
Dann was soll das jetzt?

02:57:34.240 --> 02:57:35.940
Dann denkt man sich, ja gut, das bringt mir ja nicht viel, wenn ich da

02:57:35.940 --> 02:57:38.820
in diesem zweiten Baum gelandet, in diesem zweiten Zweig gelandet bin.

02:57:39.420 --> 02:57:42.800
Aber das Schöne ist, sagen wir mal, wir brauchen hier eine halbe, also

02:57:42.800 --> 02:57:44.860
die Hälfte der Wahrscheinlichkeit ist, dass man hier landet und die

02:57:44.860 --> 02:57:45.260
Hälfte hier.

02:57:46.200 --> 02:57:48.320
Dann können wir einfach, wenn wir hier gelandet sind, den Algorithmus

02:57:48.320 --> 02:57:49.060
nochmal laufen lassen.

02:57:49.780 --> 02:57:54.100
Und wieder hoffen, vielleicht eine halbe, wir hier landen, eine halbe,

02:57:54.240 --> 02:57:55.720
dass wir wieder dieses blöde Fragezeichen kriegen.

02:57:57.020 --> 02:57:58.600
Und daran sehen Sie, das ist wie Münzen werfen.

02:57:59.400 --> 02:58:01.940
Wir können da tausendmal werfen und immer das Pech haben, dass wir

02:58:01.940 --> 02:58:06.480
beim Fragezeichen landen, aber mit etwas Glück oder eigentlich mit

02:58:06.480 --> 02:58:10.900
nahezu 100%iger Sicherheit kommen wir irgendwann mal zu der Lösung

02:58:10.900 --> 02:58:11.340
tatsächlich.

02:58:12.200 --> 02:58:14.760
Also auch damit kann man mit diesen randomisierten Algorithmen, mit

02:58:14.760 --> 02:58:17.740
dieser Art von randomisierten Algorithmen kann man die NP

02:58:17.740 --> 02:58:19.600
-Vollständigen Probleme auch angehen zum Teil.

02:58:22.480 --> 02:58:22.860
Okay.

02:58:23.780 --> 02:58:25.520
Dann wissen Sie jetzt genau, was Sie mit Ihrem Chef zu besprechen

02:58:25.520 --> 02:58:27.620
haben, falls mal so ein Thema aufkommen sollte.

