Table Of ContentSpringer-Lehrbuch
Springer
Berlin
Heidelberg
New York
Barcelona
Budapest
Hongkong
London
Mailand
Paris
Santa Clara
Singapur
Tokio
Manfred Broy
Informatik
Eine grundlegende Einführung
Teil IV. Theoretische Informatik,
Algorithmen und Datenstrukturen,
Logikprogrammierung,
Objektorientierung
Springer
Professor Dr. Manfred Broy
Institut für Informatik
Technische Universität München
Arcisstraße 21
D-80333 München
Die Deutsche Bibliothek -CIP-Einheitsaufnahme
Broy, Manfred: Informatik: eine grundlegende EinführunglManfred Broy. -Berlin;
Heidelberg; New York; Bercelona; Budapest; Hong Kong; London; Mailand; Paris;
Tokyo: Springer
(Springer-Lehrbuch)
Teil 4. Theoretische Informatik, Algorithmen und Datenstrukturen, Logik
programmierung, Objektorientierung. - 1995
ISBN 3-540-58602-4
eR-Klassifikation (1991): A.1, FA, F.1-2, E.1, D.1
ISBN-13 :978-3-540-58602-9 e-ISBN-13 :978-3-642-97613-1
DOI: 10.1007/978-3-642-97613-1
Dieses Werk ist urheberrechtlich geschützt. Die dadurch begründeten Rechte, insbe
sondere die der Übersetzung, des Nachdrucks, des Vortrags, der Entnahme von
Abbildungen und Tabellen, der Funksendung, der Mikroverfilmung oder der Verviel
fältigung auf anderen Wegen und der Speicherung in Datenverarbeitungsanlagen,
bleiben, auch bei nur auszugsweiser Verwertung, vorbehalten. Eine Vervielfältigung
dieses Werkes oder von Teilen dieses Werkes ist auch im Einzelfall nur in den Grenzen
der gesetzlichen Bestimmungen des Urheberrechtsgesetzes der Bundesrepublik
Deutschland vom 9. September 1965 in der jeweils geltenden Fassung zulässig. Sie ist
grundsätzlich vergütungspflichtig. Zuwiderhandlungen unterliegen den Straf
bestimmungen des Urheberrechtsgesetzes.
© Springer-Verlag Berlin Heidelberg 1995
Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in
diesem Werk berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme,
daß solche Namen im Sinne der Warenzeichen-und Markenschutz-Gesetzgebung als
frei zu betrachten wären und daher von jedertnann benutzt werden dürften.
Satz: Reproduktionsfertige Autorenvorlage
Umschlaggestaltung: Atelier Struve & Partner, Heidelberg
SPIN 10485862 45/3142 -543 2 1 0 - Gedruckt auf säurefreiem Papier
Vorwort
Dieser Teil IV der Einführung in die Informatik behandelt grundlegende Fragestellun
gen der Theoretischen Informatik, eine Reihe komplexer Algorithmen und effizienter
Datenstrukturen sowie einige verbreitete aktuelle Programmierstile. Damit greift Teil
IV Fragen systematisch wieder auf, die wir in den Teilen I-rn bereits angesprochen
haben.
Die behandelten Fragestellungen der Theoretischen Informatik umfassen die Dar
stellung und Klassifizierung formaler Sprachen in der Chomsky-Hierarchie und die
Begriffe Berechenbarkeit und Komplexität. Die Komplexität von Problemstellungen
und von Algorithmen ist ein Maß für den Aufwand, mit dem eine bestimmte Aufgabe
gelöst oder ein Algorithmus ausgeführt werden kann. An die ersten drei Kapitel zur
Theoretischen Informatik schließt ein Kapitel über die Komplexität von Sortier
algorithmen und ausgewählte effIziente Datenstrukturen an. Besonderes Gewicht wird
auf Datenstrukturen für die Speicherung großer Datenmengen gelegt. Dazu werden
geeignete Baumstrukturen behandelt, ergänzend zur allgemeinen Behandlung von
Bäumen in Teil I. Es wird die Streuspeichertechnik beschrieben (engl. hashing), die
ebenfalls die Speicherung großer Datenmengen und den effizienten Zugriff darauf er
laubt.
Im Anschluß daran werden einige in der Praxis verwendete Programmierstile dar
gestellt, die jeder Informatiker zumindest kennen sollte. Dies umfaßt die Beschreibung
von Rechenstrukturen, die Datenmodellierung, die logische und die objektorientierte
Programmierung. Außerdem werden die wichtigsten Begriffe aus dem Gebiet der Da
tenbanken eingeführt. Für die Datenmodellierung wird die EntitätslRelationen-Model
lierung besprochen (engl. Entity-Relationship Modeling), die nicht nur für den Ent
wurf von Datenbanken von großem Interesse ist, sondern auch als eine der wich
tigsten Modellierungstechniken im Software-Entwurf weite Verbreitung gefunden hat.
Dieser IV. Teil schließt die Einführung in die Informatik ab und ergänzt noch eine
Reihe von wichtigen Punkten. Wie in den vorangehenden drei Teilen wird auch hier
größter Wert auf saubere Begriffsbildung und genaue mathematische Behandlung der
besprochenen Konzepte gelegt.
Die vier Teile sind so angelegt, daß Studenten in ihrem Grundstudium einen
umfassenden Überblick über alle Hauptgebiete der Informatik bekommen und danach
die relevanten Begriffe nicht nur gehört, sondern auch verstanden haben.
Die "Einführung in die Informatik" hat, wie bereits im Vorwort zu Teil I erwähnt,
ihre Wurzeln in einer Vorlesung, die ich erstmals im Sommer 1983 an der Universität
Passau und danach mehrfach in jeweils modifIzierter und überarbeiteter Form an der
VI Vorwort
Universität Passau und an der Technischen Universität München gehalten habe, zum
letzten Mal von Wintersemester 1993/94 bis Sommersemester 1995. Die Stoffauswahl
wurde durch Diskussionen mit meinen Kollegen an der Technischen Universität
München stark beeinflußt. Zu Dank bin ich dafür Prof. Rudolf Bayer, Ph.D., Prof.
Dr. Jürgen Eickel und Prof. Dr.-Ing. H.-J. Siegert verpflichtet. Besonderen Dank
schulde ich meinem verehrten Lehrer und Vorgänger Prof. Dr. Dr. h.c. mult. F.L.
Bauer. Ohne sein richtungsweisendes Einführungsbuch (Bauer/Goos) aus dem Jahre
1970 wäre meine Einführung in dieser Form nicht möglich gewesen.
Danken möchte ich aber auch meinen Studenten und Studentinnen, die durch
zahlreiche kritische und konstruktive Diskussionen und Vorschläge die Vorlesung
mitgestaltet haben. Stellvertretend für viele möchte ich Herrn Ingolf Krüger erwähnen
und dessen große Sorgfalt beim Korrekturlesen anerkennend hervorheben. Dank gilt
auch meinen Mitarbeiterinnen und Mitarbeitern Michael Breu, Max Fuchs, Radu
Grosu, Rudi Hettler, Ursula Hinkel, Franz Huber, Heinrich Hußmann, Comel Klein,
Olaf Müller, Dieter Nazareth, Friederike Nickl, Barbara Paech, Peter Padawitz,
Thomas Pinegger, Christian Prehofer, Cornelia Pusch, Franz Regensburger,
Bernhard Rumpe, Birgit Schieder und Oskar Slotosch für hilfreiche Vorschläge.
Gerade durch diese Rückkopplung hat mir die Vorlesung immer großen Spaß bereitet.
Ich danke auch dem Springer-Verlag, vor allem Dr. Hans Wössner, für die hervor
ragende Unterstützung.
Beim Studium dieser Einführung in die Informatik sollte der Leser/die Leserin
beachten, daß das hier vermittelte Fundament trotz der teilweise explosiven Ent
wicklungen in einigen Gebieten der Informatik relativ stabil und dauerhaft gültig bleibt
und somit die Mühe, es sich zu erarbeiten, nicht umsonst ist.
München, Juli 1995 Manfred Broy
Inhaltsverzeichnis
1. Formale Sprachen ..................................... . 1
1.1 Relationen und Graphen ................................... . 2
1.1.1 Zweistellige Relationen .................................... . 2
1.1.2 Wege in Graphen und Hüllenbildung ......................... . 6
1.2 Grammatiken ............................................ . 13
1.2.1 Reduktive und generative Grammatiken ....................... . 18
1.2.2 Die Sprachhierarchie nach Chomsky .......................... . 22
1.2.3 Strukturgraphen und Strukturbäume .......................... . 23
1.2.4 Sackgassen und unendliche Ableitungspfade ................... . 29
1.3 Chomsky-3-Sprachen und endliche Automaten ................. . 34
1.3.1 Reguläre Ausdrücke ...................................... . 34
1.3.2 Endliche Automaten ...................................... . 36
1.3.3 Äquivalenz der Darstellungsformen .......................... . 39
1.3.4 Reguläre Ausdrücke, endliche Automaten und Chomsky-3-Sprachen . 42
1.3.5 Minimale Automaten ...................................... . 50
1.4 Kontextfreie Sprachen und Kellerautomaten .................... . 52
1.4.1 Die BNF-Notation ........................................ . 52
1.4.2 Kellerautomaten ......................................... . 53
1.4.3 Kellerautomaten und kontextfreie Sprachen .................... . 56
1.4.4 Greibach-Normalform ..................................... . 59
1.4.5 LR(k)-Sprachen ......................................... . 61
1.4.6 LL(k)-Grammatiken ...................................... . 66
1.4.7 Das Verfahren des rekursiven Abstiegs ........................ . 69
1.5 Kontextsensitive Grammatiken .............................. . 70
2. Berechenbarkeit ....................................... . 73
2.1 Hypothetische Maschinen .................................. . 75
2.1.1 Die Turing-Maschine ...................................... . 75
2.1.2 Registermaschinen ....................................... . 82
2.2 Rekursive Funktionen ..................................... . 84
2.2.1 Primitiv rekursive Funktionen ............................... . 85
2.2.2 f.1-rekursive Funktionen .................................... . 91
2.2.3 Allgemein rekursive Funktionen ........................ . 94
2.3 Äquivalenz der Berechenbarkeitsbegriffe ...................... . 98
VIII Inhaltsverzeichnis
2.3.1 Äquivalenz von Il-Berechenbarkeit und Turing-Berechenbarkeit 98
2.3.2 Äquivalenz von RM-und Turing-Berechenbarkeit ............... . 100
2.3.3 Die Churchsche These ..................................... . 102
2.4 Entscheidbarkeit ......................................... . 103
2.4.1 Nichtberechenbare Funktion ................................ . 103
2.4.2 Entscheidbare Prädikate .................................... . 104
2.4.3 Rekursive und rekursivaufzählbare Mengen .................... . 106
3. Komplexitätstheorie ................................... . 109
3.1 Komplexitätsmaße ........................................ . 109
3.1.1 Zeitkomplexität .......................................... . 109
3.1.2 Bandkomplexität ......................................... . 111
3.1.3 Zeit-und Bandkomplexität von Problemen ..................... . 113
3.1.4 Polynomiale und nichtdeterministisch polynomiale Zeitkomplexität .. . 117
3.1.5 Backtracking-Nichtdeterminismus in Programmiersprachen ........ . 118
3.2 NP-Vollständigkeit ....................................... . 122
3.2.1 Das Erfüllbarkeitsproblem für Boolesche Ausdrücke ............. . 123
3.2.2 Weitere NP-vollständige Probleme ........................... . 125
3.3 Effiziente Algorithmen für NP-vollständige Probleme ............ . 126
3.3.1 Geschicktes Durchsuchen großer Baumstrukturen ............... . 128
3.3.2 Alpha/Beta-Suche ........................................ . 130
3.3.3 Dynamisches Programmieren ............................... . 135
3.3.4 Greedy-Algorithmen ...................................... . 136
4. Effiziente Algorithmen und Datenstrukturen ............. . 139
4.1 Ausgewählte Algorithmen .................................. . 139
4.1.1 Komplexität von Sortieralgorithmen .......................... . 140
4.1.2 Wege in Graphen ......................................... . 142
4.2 Bäume ................................................. . 144
4.2.1 Geordnete, orientierte und sortierte Bäume ..................... . 145
4.2.2 Darstellung von Bäumen durch Felder ........................ . 146
4.2.3· AVL-Bäume ..... _. ...................................... . 147
4.2.4 B-Bäume ............................................... . 148
4.3 Effiziente Darstellung von Mengen ........................... . 148
4.3.1 Die Rechenstruktur der Mengen mit Zugriff über Schlüssel ........ . 149
4.3.2 Mengendarstellung durch A VL-Bäume ........................ . 150
4.3.3 Streuspeicherverfahren .................................... . 158
5. Beschreibungstechniken in der Programmierung ......... . 163
5.1 Formalismen für die Spezifikation ............................ . 163
5.1.1 Abstraktion in der Spezifikation ............................. . 163
5.1.2 Die Spezifikation von abstrakten Rechenstrukturen ............... . 165
5.1.3 Spezifikation von Funktionen ............................... . 168
Inhaltsverzeichnis IX
5.1.4 Speziftkation von Anweisungen ............................. . 169
5.2 Datenbanken und Infonnationssysteme ........................ . 172
5.2.1 Die Entitäts/Relationsbeziehungsmodellierung .................. . 172
5.2.2 Entitäts/Relations-Diagramme ............................... . 176
5.2.3 Charakterisierung von Relationen ............................ . 176
5.2.4 Zur Verwendung von Datenbanksystemen ..................... . 177
5.2.5 Das DB-Managementsystem ................................ . 177
5.2.6 Datenbankabfragen und Ändern der Datenbestände .............. . 177
5.3 Logikprogranunierung .................................... . 178
5.3.1 Eine Problemlösung mit Logikprogramm ...................... . 179
5.3.2 Die Auswertung von Logikprogrammen ....................... . 181
5.3.3 Uniftkation ............................................. . 184
5.4. Objektorientierte Progranunierung ........................... . 187
6. Abschließende Bemerkungen zur Informatik ............. . 197
6.1 Anwendungen der Infonnatik ............................... . 198
6.2 Infonnatik und Recht ..................................... . 200
6.3 Soziale Kompetenz der Infonnatiker .......................... . 201
6.4 Infonnatik und Ökonomie .................................. . 202
6.5 Informatik. Wissenschaftstheorie und Philosophie ............... . 202
6.6 Zur Verantwortung des Informatikers ......................... . 203
Literaturangaben .............................................. 205
Stichwortverzeichnis .......................................... 211
1. Formale Sprachen
Eine formale Sprache ist eine Menge von Wörtern über einem Zeichensatz. In vielen
Gebieten der Informatik treten formale Sprachen auf. Wir haben in Teil I bereits die
BNF-Schreibweise zur Beschreibung von formalen Sprachen kennengelernt. Die
BNF-Schreibweise verwenden wir insbesondere zur Beschreibung der Syntax von
Programmiersprachen. In diesem Kapitel behandeln wir die theoretischen Grundlagen
und die unterschiedlichen Techniken zur Beschreibung formaler Sprachen systema
tisch.
Die Syntax einer Programmiersprache ist durch eine formale Sprache festgelegt.
Eine Zeichenfolge heißt Programm, wenn sie Element der Sprache ist. Allerdings ist
bei der syntaktischen Behandlung von Programmiersprachen nicht nur die Frage von
Interesse, ob eine gegebene Zeichenfolge ein syntaktisch korrektes Programm dar
stellt, sondern auch, wie das Programm durch Vorgruppierer und Zerteiler in eine
Baumdarstellung übergeführt werden kann, die die innere Struktur des Programms
explizit macht.
Formale Sprachen lassen sich, wie die BNF-Notation zeigt, durch Ableitungsre
geln beschreiben, die festlegen, wie die Wörter der Sprache aufgebaut sind. Durch die
Regeln wird eine Struktur auf den Wörtern des Sprachschatzes induziert. Diese
Struktur wird beim Zerteilvorgang durch den Parser (vgl. Teil m, Kapitel 3) verwen
det, um die abstrakte Syntax eines Programms zu spezifizieren.
BNF-Regeln beschreiben die meist unendliche Menge von Wörtern, die eine for
male Sprache bilden. Eine Zeichenfolge gehört zum Sprachschatz der BNF-Beschrei
bung, wenn sie durch Anwendung der Regeln aus dem entsprechenden
Nichtterminalzeichen abgeleitet werden kann. Gleichzeitig kann die Regelanwendung
zur Erzeugung des Zerteilbaums des Programms verwendet werden. Die Zerteilung
ergibt sich aus der Struktur der Regelanwendung.
Die Kompliziertheit des Aufbaus der Wörter einer formalen Sprache läßt sich an
der Kompliziertheit beziehungsweise an der Einfachheit der Regeln ermessen, durch
die die Sprache beschrieben werden kann. Wie sich zeigt, lassen sich eine Reihe ein
facher Klassen von Sprachen über die äußere Form der sie beschreibenden Regeln
definieren.
Wir beginnen mit der Einführung einiger grundlegender Konzepte der Relationen
algebra, die bei der Behandlung formaler Sprachen nützlich sind. Dann führen wir
das Konzept der Grammatiken zur Beschreibung formaler Sprachen ein. Wir legen
Klassen von Regeln fest und untersuchen ihre Mächtigkeit bezogen auf die durch sie
beschreibbaren formalen Sprachen.