Читать книгу Algorithmen und Datenstrukturen - Gunter Saake - Страница 13
Inhaltsverzeichnis
Оглавление1.1Informatik, Algorithmen und Datenstrukturen
1.2Historischer Überblick: Algorithmen
1.3Historie von Programmiersprachen und Java
1.4Grundkonzepte der Programmierung in Java
2.1Intuitiver Algorithmusbegriff
2.1.1Beispiele für Algorithmen
2.1.2Bausteine für Algorithmen
2.1.3Pseudocode-Notation für Algorithmen
2.3.2Signaturen von Datentypen
2.4.2Algorithmus zur Termauswertung
3.1Überblick über Algorithmenparadigmen
3.2.3Auswertung von Funktionen
3.2.4Erweiterung der Funktionsdefinition
3.2.6Beispiele für applikative Algorithmen
3.3.1Grundlagen imperativer Algorithmen
3.3.3Beispiele für imperative Algorithmen
3.4.1Logik der Fakten und Regeln
3.6.1Ausdrücke und Anweisungen
3.6.3Applikative Algorithmen und Rekursion
5.1Suchen in sortierten Folgen
5.2.3Sortieren durch Selektion
5.2.4Sortieren durch Vertauschen: BubbleSort
5.2.5Sortieren durch Mischen: MergeSort
5.2.7Sortieren durch Verteilen: RadixSort
5.2.8Sortierverfahren im Vergleich
6.5Interpreter für formale Algorithmenmodelle in Java
7Eigenschaften von Algorithmen
7.1Berechenbarkeit und Entscheidbarkeit
7.1.1Existenz nichtberechenbarer Funktionen
7.1.2Konkrete nichtberechenbare Funktionen
7.1.4Nichtentscheidbare Probleme
7.1.5Post’sches Korrespondenzproblem
7.2Korrektheit von Algorithmen
7.2.2Korrektheit von imperativen Algorithmen
7.2.3Korrektheitsbeweise für Anweisungstypen
7.2.4Korrektheit imperativer Algorithmen an Beispielen
7.2.5Korrektheit applikativer Algorithmen
8.1.1Schrittweise Verfeinerung
8.1.2Einsatz von Algorithmenmustern
8.1.3Problemreduzierung durch Rekursion
8.2.1Greedy-Algorithmen am Beispiel
8.2.2Greedy: Optimales Kommunikationsnetz
8.2.3Verfeinerung der Suche nach billigster Kante
8.3Rekursion: Divide-and-conquer
8.3.1Das Prinzip »Teile und herrsche«
8.3.2Beispiel: Spielpläne für Turniere
8.4.2Beispiel: Das Acht-Damen-Problem
8.4.3Beispiel: Tic Tac Toe mit Backtracking
8.5.2Rekursive Lösung des Rucksackproblems
8.5.3Prinzip der dynamischen Programmierung
9Parallele und verteilte Berechnungen
9.2.1Definition von Petri-Netzen
9.2.2Formalisierung von Petri-Netzen
9.2.3Das Beispiel der fünf Philosophen
9.3Programmieren nebenläufiger Abläufe
9.3.2Programmieren mit Semaphoren
9.3.3Philosophenproblem mit Semaphoren
9.3.4Verklemmungsfreie Philosophen
9.4Nebenläufige Berechnungen in Java
9.4.1Threads und wechselseitiger Ausschluss
9.4.3Das Philosophenproblem in Java
10Literaturhinweise zum Teil II
11.2Algebraische Spezifikation
11.2.1Spezifikationen und Modelle
11.2.2Termalgebra und Quotiententermalgebra
11.2.3Probleme mit initialer Semantik
11.3Beispiele für abstrakte Datentypen
11.3.1Der Kellerspeicher (Stack)
11.3.2Beispiel für Kellernutzung
11.3.3Die Warteschlange (Queue)
12Klassen, Schnittstellen und Objekte in Java
12.1Grundzüge der Objektorientierung
12.2Klassen und Objekte in Java
12.4Abstrakte Klassen und Schnittstellen
12.6Umsetzung abstrakter Datentypen
13Grundlegende Datenstrukturen
13.1Stack und Queue als Datentypen
13.1.1Implementierung des Stacks
13.1.2Implementierung der Queue
13.1.3Bewertung der Implementierungen
14.1Bäume: Begriffe und Konzepte
14.2Binärer Baum: Datentyp und Basisalgorithmen
14.2.1Der Datentyp »Binärer Baum«
14.2.2Algorithmen zur Traversierung
14.3.3Komplexität der Operationen
14.6Praktische Nutzung von Bäumen
14.6.1Sortieren mit Bäumen: HeapSort
14.6.2Sets mit binären Suchbäumen
15.2.2Behandlung von Kollisionen
15.3.1Grundideen für dynamische Hashverfahren
15.3.3Umsetzung des erweiterbaren Hashens
16.1.4Weitere Eigenschaften von Graphen
16.2.1Knoten- und Kantenlisten
16.2.3Graphen als dynamische Datenstrukturen
16.2.4Transformationen zwischen Darstellungen
16.2.5Vergleich der Komplexität
16.2.6Eine Java-Klasse für Graphen
16.3Ausgewählte Graphenalgorithmen
16.3.3Zyklenfreiheit und topologisches Sortieren
16.4Algorithmen auf gewichteten Graphen
16.4.4Kürzeste Wege mit negativen Kantengewichten
16.4.6Der Ford-Fulkerson-Algorithmus
16.5Zentralitätsanalyse in Graphen
16.6Weitere Fragestellungen für Graphen
17.1Probleme der Worterkennung
17.4.3Java-Klassen für reguläre Ausdrücke
17.5Ähnlichkeit von Zeichenketten
17.5.3Anwendungen der Ähnlichkeitsvergleiche