Table Of ContentUwe Schöning
Algorithmik
Spektrum Akademischer Verlag Heidelberg • Berlin
Autor:
Prof. Dr. Uwe Schöning
Abteilung Theoretische Informatik
Universität Ulm
[email protected]
Die Deutsche Bibliothek - CIP-Einheitsaufnahme
Schöning, Uwe:
Algorithmik / Uwe Schöning. - Heidelberg ; Berlin : Spektrum, Akad. Verl., 2001
ISBN 3-8274-1092-4
© 2001 Spektrum Akademischer Verlag GmbH Heidelberg • Berlin
Der Verlag und der Autor haben alle Sorgfalt walten lassen, um vollständige und akkurate Infor-
mationen in diesem Buch zu publizieren. Der Verlag übernimmt weder Garantie noch die juristi-
sche Verantwortung oder irgendeine Haftung für die Nutzung dieser Informationen, für deren
Wirtschaftlichkeit oder fehlerfreie Funktion für einen bestimmten Zweck. Der Verlag über-
nimmt keine Gewähr dafür, dass die beschriebenen Verfahren, Programme usw. frei von Schutz-
rechten Dritter sind.
Alle Rechte, insbesondere die der Übersetzung in fremde Sprachen, sind vorbehalten. Kein Teil
des Buches darf ohne schriftliche Genehmigung des Verlages fotokopiert oder in irgendeiner
anderen Form reproduziert oder in eine von Maschinen verwendbare Form übertragen oder
übersetzt werden.
Lektorat: Dr. Andreas Rüdinger / Bianca Alton
Umschlaggestaltung: Kurt Bitsch, Birkenau
Druck und Verarbeitung: Franz Spiegel Buch GmbH, Ulm
Vorwort
Dieses Buch führt in die Algorithmic die Lehre von den Algorithmen, ein. Das heißt,
dass sowohl von abstrakten Konzepten, wie dem Berechenbarkeitsbegriff und der NP-
Vollständigkeit (zumindest kurz) die Rede ist. Zum anderen (und in der Hauptsache)
macht dieses Buch mit einer Reihe von konkreten Algorithmen aus den verschieden-
sten Bereichen, sowie Prinzipien für das Design von Algorithmen, deren Komplexitäts-
analyse und den vorteilhaften Einsatz von Zufall in verschiedenen Ausprägungen der
Algorithmik vertraut.
Die Algorithmik ist ein attraktives und sehr aktives Gebiet, in dem es immer noch über-
raschende Ergebnisse und neue interessante Entwicklungen gibt. Ich habe versucht, et-
was von diesem Flair einzufangen. Dies äußert sich insbesondere in einigen ungewöhn-
lichen und neuartigen Algorithmen (etwa in den letzten beiden Kapiteln), sowie einigen
ungewöhnlichen Analysemethoden (z.B. bei HeapSort) und interessanten Querverbin-
dungen zwischen der Algorithmik, der Komplexitätstheorie und z.B. dem Entropiebe-
griff.
Die verschiedenen Themen und jeweiligen Algorithmen werden hierbei so behandelt,
dass auf das Wesentliche, auf die Grundprinzipien, fokussiert wird; die verschiedenen
Algorithmen werden daher knapp aber nichtsdestoweniger präzise - oft in Umgangs-
sprache oder einer Pascal-ähnlichen Notation - beschrieben. Begleitet wird die Darstel-
lung mit theoretischen Analysen zur Komplexität der betreffenden Verfahren. Didak-
tisch kommt es mir vor allem auf das Verstehen der Konzepte und der Ideen bei der Al-
gorithmenanalyse und deren Design an, so dass man anschließend in der Lage ist, diese
Prinzipien auch auf andere Fragestellungen, mit denen man es zu tun hat, individuell an-
zupassen. Nicht gedacht ist, dass die Algorithmen, wie in vielen Programmierbüchern
üblich, sozusagen „zum Abschreiben" bereitgestellt werden.
Ein durchgängiges Thema in diesem Buch sind Algorithmen für NP-vollständige Pro-
bleme. Dass die Theorie zwar besagt (bzw. vermuten lässt), dass diese Probleme nicht
effizient lösbar sind, heißt noch lange nicht, dass man nicht doch effiziente approxima-
tive, heuristische Lösungsalgorithmen, oder Algorithmen mit einem gemäßigt ausge-
prägten exponentiellen Laufzeitverhalten, finden kann. Hierbei sind das Traveling Sa-
lesman Problem (TSP), das Rucksackproblem und das Erfüllbarkeitsproblem der Aus-
sagenlogik (SAT) die bekanntesten Vertreter, die in diesem Buch mit den verschieden-
sten Algorithmen behandelt werden.
Vorausgesetzt werden gewisse Vorkenntnisse aus dem Bereich der Praktischen Informa-
tik: Programmieren in einer höheren Programmiersprache, Datenstrukturen mit Zeigern
(Listen, Suchbäume, balancierte Bäume), Erfahrung mit rekursiver Programmierung,
Kenntnis einiger elementarer Algorithmen. Einiges hierzu wird jedoch im ersten Ka-
pitel in aller Kürze dargestellt. Gelegentlich werden Themen aus der Theoretischen
Informatik angesprochen: endliche Automaten, der Algorithmen- und Berechenbar-
keitsbegriff, NP-Vollständigkeit. Elementare Kenntnisse über Graphen und algebrai-
sche Strukturen sind bei einigen Algorithmen gefragt. Das erste Kapitel dieses Buches
stellt einen Streifzug durch die wichtigsten der notwendigen Begriffe und Methoden
eines, Algorithmikers" dar.
Ich hoffe, dass mit diesem Buch auch deutlich wird, dass die Algorithmik ein Gebiet
ist, bei dem der Schulterschluss zwischen theoretisch orientierter Grundlagenforschung
und anwendungsnaher Entwicklung von Software verschiedenster Art besonders gut
geglückt ist.
Ulm, im Juni 2001 Uwe Schöning
Inhaltsverzeichnis
Überblick 11
1 Grundlegende Konzepte 17
1.1 Elementare Programm- und Datenstrukturen 17
1.2 Einiges zur Algorithmentheorie 22
1.3 Endliche Automaten 27
1.4 Ein Streifzug durch die Stochastik 30
1.5 Entropie 38
1.6 Worst-Case und Average-Case 42
1.7 Asymptotische Notationen 44
1.8 Einige nützliche Abschätzungen 47
1.9 Rekursionsgleichungen 51
1.10 Amortisationsanalyse 59
1.11 Uniformes Komplexitätsmaß und Bit-Komplexität 62
1.12 Probabilistische Algorithmen und Datenstrukturen 63
1.13 Pseudozufallszahlen und Derandomisierung 70
1.14 NP-Vollständigkeit 74
1.15 Optimierungsprobleme und Approximation 82
1.16 Algorithmen mit Ergebnis Verifikation 86
1.17 Probabilistische Komplexitätsklassen 91
2 Sortier- und Selektionsalgorithmen 95
2.1 BubbleSort 96
2.2 Eine untere Schranke für (fast) alle Sortierverfahren 97
2.3 MergeSort 99
2.4 Quicksort und binäre Suchbäume 101
2.5 HeapSort 109
2.6 BucketSort 119
2.7 Selektionsalgorithmen 121
2.8 Tabellarische Zusammenfassung 130
Hashing 131
3.1 Das Geburtstagsparadoxon 133
3.2 Hashing mit Verkettung 135
3.3 Open Hashing 138
3.4 Universal Hashing 143
Dynamisches Programmieren 151
4.1 Das Wortproblem bei kontextfreien Sprachen 152
4.2 Matrizen-Kettenmultiplikation 156
4.3 Optimale binäre Suchbäume 162
4.4 Längste gemeinsame Teilfolge, kürzeste gemeinsame Oberfolge und
Editierdistanz 165
4.5 RNA-Faltung 169
4.6 Traveling Salesman Problem 171
4.7 DasO/l-Rucksackproblem 174
4.8 Viterbi-Algorithmus 178
4.9 Effizienzverbesserung 181
Greedy-Algorithmen und Matroide 185
5.1 Bruchteil-Rucksackproblem 186
5.2 Matroide 187
5.3 Auftragsplanung mit Schlussterminen 189
5.4 Aufspannende Bäume: Kruskal-Algorithmus 191
5.5 Kürzeste Wege: Dijkstra-Algorithmus 193
5.6 Priority Queues und Union-Find 196
Algorithmen auf Graphen 203
6.1 Repräsentation von Graphen 203
6.2 Breiten-und Tiefensuche 205
6.3 Topologisches Sortieren 207
6.4 Transitive Hülle: Warshall-Algorithmus 209
6.5 Ein probabüistischer Algorithmus für den minimalen Schnitt 211
6.6 Flüsse in Netzwerken: Ford-Fulkerson 215
6.7 Maximales Matching 224
7 Optimiertes Suchen in Bäumen 229
7.1 Backtracking 229
7.2 Branch-and-Bound 231
7.3 Und-Oder-Bäume 238
7.4 Min-Max und Alpha-Beta 243
8 Datenkompression 249
8.1 Huffman-Codierung 249
8.2 Arithmetische Codierung 258
8.3 Lempel-Ziv-Welch-Algorithmus 260
9 Algebraische und zahlentheoretische Algorithmen 267
9.1 Multiplikation großer Zahlen 267
9.2 Schnelle Matrizenmultiplikation nach Strassen 269
9.3 Probabilistischer Multiplikationstest für Matrizen 271
9.4 Polynommultiplikation und die FFT 273
9.5 Euklidscher Algorithmus 285
9.6 Erweiterter Euklidscher (Berlekamp-) Algorithmus 286
9.7 Chinesischer Restsatz 289
9.8 Berechnen der modu^en Exponentiation 292
9.9 Primzahltesten 293
9.10 Faktorisierung: Poinds p-Algorithmus 298
9.11 Faktorisierung: Polterds (jp - 1)-Algorithmus 301
9.12 Faktorisierung: Quadratisches Sieb 302
10 String Matching 305
10.1 Rabin-Karp-Algorithmus 306
10.2 String Matching mit endlichen Automaten 307
10.3 Knuth-Morris-Pratt Algorithmus 309
10.4 Boyer-Moore Algorithmus 312
10.5 Suffix-Bäume 315
10.6 Approximatives String-Matching 317
11 Heuristische Algorithmen 319
11.1 Randomized Rounding 320
11.2 Greedy-Heuristiken 324
11.3 Lokale Verbesserungsstrategien 327
11.4 Simulated Annealing 329
11.5 Genetische Algorithmen 331
11.6 Neuronale Netze 335
12 Algorithmen für das Erfüllbarkeitsproblem 339
12.1 2-SAT, 2-QBF und die Beigel-Eppstein-Methode 341
12.2 Average-Case Analyse eines einfachen Algorithmus für 3-SAT 346
12.3 Ein divide-and-conquer Ansatz für 3-SAT 349
12.4 Monien-Speckenmeyer-Algorithmus 352
12.5 Paturi-Pudläk-Zane-Algorithmus 355
12.6 Der Hammingkugel-Algorithmus für A;-SAT 358
12.7 Ein random-walk-Algorithmus für fc-SAT 362
Literaturverzeichnis 368
Index 376
Überblick
Unter Algorithmik wird die Lehre und Wissenschaft von den Algorithmen, den Berech-
nungsverfahren, verstanden. Dies umfasst sowohl Methoden für das Design als auch
für die Analyse von konkreten Algorithmen für die unterschiedlichsten Typen von Pro-
blemstellungen. Die Analyse von Algorithmen kann sowohl von experimenteller als
auch von theoretischer Natur sein. Ferner gehört zur Algorithmik ein Grundverständnis
über das Konzept und die Grenzen der Berechenbarkeit an sich. Eng verknüpft mit der
Algorithmik und Berechenbarkeitstheorie ist femer die Komplexitätstheorie (speziell
die NP-Vollständigkeitstheorie), welche basierend auf unterschiedlichen Berechnungs-
modellen aufsetzt und die Komplexität verschiedener Algorithmen auf diesen Compu-
termodellen misst.
Im ersten Kapitel haben wir einiges zusammengestellt, was sozusagen zum Handwerks-
zeug eines „Algorithmikers" gehört. Man kann das erste Kapitel natürlich zunächst auch
überschlagen, um zu den eigentlichen Algorithmen vorzustoßen, und um dann zu einem
späteren Zeitpunkt zu den theoretischen Grundlagen zurückzukehren.
Wir beginnen in Abschnitt 1.1 mit einer kurzen Zusammenstellung von elementaren
Programm- und Datenstrukturen, wobei das Buch gewisse elemen^e Kenntnisse im
Programmieren in einer höheren Programmiersprache voraussetzt. Unser Konzept hier
sieht nicht vor, das Studium der Datenstrukturen (deren axiomatische Beschreibung und
Spezifikation) sozusagen zum Selbstzweck zu betreiben. Datenstrukturen haben ihre
Existenzberechtigung nur über die betreffenden Algorithmen, welche diese einsetzen.
Daher stehen in diesem Buch immer die Algorithmen im Vordergrund.
Die Konzepte der Algorithmen- (oder Berechenbarkeits-) Theorie ist Thema von Ab-
schnitt 1.2 und wird dort in aller Kürze rekapituliert.
Als Nächstes werden endliche (evtl. stochastische) Automaten betrachtet. Dies ist ein
universell und sehr variabel einsetzbares Modell, um algorithmische Abläufe zu be-
schreiben und Algorithmen zu konzipieren (Abschnitt 1.3).
Grundbegriffe aus der Stochastik (Abschnitt 1.4) werden bei stochastischen Komple-
xitätsabschätzungen und der Analyse von probabilistischen Algorithmen immer wieder
benötigt.
Ein weiterer aus der Stochastik abgeleiteter Begriff ist die Entropie, also der in einem
Description:Dieses Lehrbuch der Algorithmik stellt die grundlegenden Algorithmen dar und vermittelt die Prinzipien von Algorithmusanalyse und -entwurf. In einem einführenden Kapitel werden die benötigten Grundbegriffe aus der Theoretischen Informatik, der Stochastik und der Komplexitätsanalyse bereitgestellt