Praktische Grenzen der Berechenbarkeit - Informatik
Praktische Grenzen der Berechenbarkeit - Informatik Praktische Grenzen der Berechenbarkeit - Informatik
1 Der Komplexitätsbegriff Nachdem es den Pionieren der heutigen Informatik ein besonderes Anliegen war herauszufinden, welche Probleme prinzipiell unlösbar sind, interessierte man sich etwa ab 1960 dafür, welche Algorithmen auf real existierenden und zukünftigen Computern auch praktisch durchführbar sind. Das überraschende und erfreuliche Ergebnis dieser Überlegungen besteht in der Erkenntnis, dass auch die Klassifizierung nach durchführbar und nicht durchführbar von der Wahl einer konkreten Maschine unabhängig ist. Unter Komplexitäten versteht man messbare oder berechenbare Merkmale von Algorithmen, im Wesentlichen die Laufzeit und den Speicherbedarf. Intuitiv ist klar, dass ein Algorithmus, der sparsam mit diesen Betriebsmitteln umgeht, als besser einzustufen ist im Vergleich zu anderen Algorithmen, die dieselbe Aufgabe lösen. Als Beispiel betrachten wir (nach Mayr, ohne Datum) die folgende Aufgabe einer Aktienkursanalyse: Gegeben ist der Kursverlauf einer Aktie über 30 Tage (vgl. Tabelle 1). Gesucht ist der maximal mögliche Gewinn, der sich bei optimaler Wahl des Kauf– und Verkaufstages ergibt. Bezeichnet man den Gewinn am Tag t mit at, so ist also eine Teilfolge von a1, a2, . . .,an gesucht, deren Summe maximal ist. Da jedoch nicht nach dem optimalen Kauf– bzw. Verkaufstag gefragt ist, sondern nur nach der maximalen Teilsumme, lautet die Aufgabenstellung etwas allgemeiner ausgedrückt wie folgt: Gegeben ist eine Zahlenfolge a1, a2, . . .,an. Gesucht ist eine Zahl s mit s = j k=i ak (1 ≤ i ≤ j ≤ n), die unter allen möglichen Kombinationen von i und j maximal ist. Ein erster Algorithmus (Abbildung 1) berechnet alle möglichen Teilsummen und bestimmt daraus das Maximum. Als Maß für den zeitlichen Aufwand wählen wir vereinfachend die Anzahl ta1 der Additionen in der innersten Schleife. Algorithmus Kursanalyse 1 (Gegeben: Ein n-dimensionales Feld a) begin max←0 for i from 1 to n do for j from i to n do s←0 for k from i to j do s←s+a[k] if s>max then max←s end Abbildung 1: Algorithmus Kursanalyse, Version 1 2
Tag Kurs GuV Tag Kurs GuV 1 150 1 16 169 4 2 153 3 17 160 -9 3 157 4 18 158 -2 4 149 -8 19 159 1 5 151 2 20 152 -7 6 148 -3 21 147 -5 7 155 7 22 147 0 8 160 5 23 148 1 9 159 -1 24 150 2 10 165 6 25 153 3 11 156 -9 26 152 -1 12 157 1 27 156 4 13 159 2 28 161 5 14 162 3 29 162 1 15 165 3 30 164 2 Tabelle 1: Kursverlauf einer Aktie über 30 Tage (Schlusskurse und Gewinne bzw. Verluste). Angenommener Anfangskurs am ersten Tag: 149 ta1(n) = = n i · (n + 1 − i) i=1 n (i · (n + 1) − i 2 ) i=1 = (n + 1) · n i − i=1 n i 2 i=1 (n + 1) · n n · (n + 1) · (2n + 1 = (n + 1) · − 2 6 = n · (n + 1) · (n + 2) 6 = 1 6 n3 + 1 2 n2 + 1 3 n Der Berechnungsaufwand lässt sich bereits deutlich reduzieren, wenn man berücksichtigt, dass nicht alle Teilsummen einzeln bestimmt werden müssen, da ja j k=i ak = j−1 k=i ak + aj gilt. Daraus ergibt sich die zweite Version des Algorithmus (Abbildung 2). Hier gilt für die Anzahl der Additionen 3
- Seite 1: Praktische Grenzen der Berechenbark
- Seite 5 und 6: n 20 40 60 80 100 ta1(n) 1540 11480
- Seite 7 und 8: earbeitet, unabhängig davon, wie a
- Seite 9 und 10: darstellt. Aussagekräftige Abschä
- Seite 11 und 12: komplexität tbin(n) der binären S
- Seite 13 und 14: Um das oben gestellte Problem der T
- Seite 15 und 16: Definition 7. Ein Algorithmus heiß
- Seite 17 und 18: a c B A C Abbildung 8: Skizze zum K
- Seite 19 und 20: Abbildung 11: Graphen mit bzw. ohne
- Seite 21 und 22: Entscheidungsvariante: Gibt es eine
- Seite 23 und 24: 1 2 3 4 5 2 3 5 2 5 5 6 7 8 5 6 8 5
- Seite 25 und 26: Von zentraler Bedeutung — aber bi
- Seite 27 und 28: Um nun die NP-Vollständigkeit eine
- Seite 29 und 30: 7 8 6 5 1 2 Abbildung 15: Graph zum
- Seite 31 und 32: aw af bw bf cw cf dw df Abbildung 1
- Seite 33 und 34: die Klausel, die dem Teilgraphen en
- Seite 35 und 36: Beispiel 40. Das Problem des Handlu
- Seite 37 und 38: eispielsweise bei der Kreuzung der
- Seite 39: Literatur — Dewdney A. K.: The (n
Tag Kurs GuV Tag Kurs GuV<br />
1 150 1 16 169 4<br />
2 153 3 17 160 -9<br />
3 157 4 18 158 -2<br />
4 149 -8 19 159 1<br />
5 151 2 20 152 -7<br />
6 148 -3 21 147 -5<br />
7 155 7 22 147 0<br />
8 160 5 23 148 1<br />
9 159 -1 24 150 2<br />
10 165 6 25 153 3<br />
11 156 -9 26 152 -1<br />
12 157 1 27 156 4<br />
13 159 2 28 161 5<br />
14 162 3 29 162 1<br />
15 165 3 30 164 2<br />
Tabelle 1: Kursverlauf einer Aktie über 30 Tage (Schlusskurse und Gewinne bzw.<br />
Verluste). Angenommener Anfangskurs am ersten Tag: 149<br />
ta1(n) =<br />
=<br />
n<br />
i · (n + 1 − i)<br />
i=1<br />
n<br />
(i · (n + 1) − i 2 )<br />
i=1<br />
= (n + 1) ·<br />
n<br />
i −<br />
i=1<br />
n<br />
i 2<br />
i=1<br />
(n + 1) · n n · (n + 1) · (2n + 1<br />
= (n + 1) · −<br />
2<br />
6<br />
= n · (n + 1) · (n + 2)<br />
6<br />
= 1<br />
6 n3 + 1<br />
2 n2 + 1<br />
3 n<br />
Der Berechnungsaufwand lässt sich bereits deutlich reduzieren, wenn man<br />
berücksichtigt, dass nicht alle Teilsummen einzeln bestimmt werden müssen, da<br />
ja j k=i ak = j−1 k=i ak + aj gilt. Daraus ergibt sich die zweite Version des Algorithmus<br />
(Abbildung 2). Hier gilt für die Anzahl <strong>der</strong> Additionen<br />
3