KLASSISCHE PROGRAMMIERTECHNIK Eine Sammlung der hervorragendsten Algorithmen Ian Oliver. PRENTICE HALL NEW YORK LONDON TORONTO SYDNEY TOKIO SINGAPUR MÜNCHEN MEXICO
Vorwort Danksagung XI XV 1 Einführung 1 1.1 Das Ziel des Buchs 1 1.2 Format 1 1.3 Testprogramme 3 1.4 Effizienz 4 1.5 Code 5 1.6 Speicherzuweisung 25 2 Arithmetik 27 2.1 Dezimal-Arithmetik Das Rechnen mit Zahlen, die als Zeichenketten dargestellt werden 28 2.2 Bruchrechnen Das Rechnen mit Zahlen, die als Bruch zweier Ganzzahlen dargestellt werden 40 2.3 Zahlenähnlichkeit Überprüfung, ob Fließkommazahlen annähernd" gleich sind 46 3 Zahlenspiele 51 3.1 Überprüfen von Ziffern Das Schützen einer Zahl mit sich selbst überprüfbaren J>rüf'-Ziffern 52
VI 3.2 Datumsumwandlung und Ostern Das Konvertieren des Datums in Ganzzahlen und umgekehrt 66 3.3 Römische Ziffern Das Umwandeln von römischen Ziffern in arabische Zahlen und umgekehrt 76 4 Permutationen und Kombinationen 81 Anmerkungen - Das Backtracking Wie man das kombinatorische Suchen effizienter gestaltet y 83 4.1 Produkte Das Berechnen des Werts der Fakultät mit Hilfe der zugehörigen Formeln 84 Anmerkungen die Rekursion Wie man herausfindet, wann nicht mit einer Rekursion gearbeitet werden soll 88 4.2 Verschachtelte Schleifen Die Simulation einer variablen Anzahl von Durchläufen ineinander verschachtelter Schleifenkonstrukte 90 Anmerkungen - unsichere Paßwörter Warum Paßwörter weniger effektiv sind, als allgemein erwartet 95 Anmerkungen - mehrdimensionale Tabellen Das Erzeugen einfacher Tabellen aus mehrdimensionalen Matrizen 96 4.3 Verschachtelte Summenbildung Das Berechnen von Unter-Untersummen aus Untersummen aus Summensystemen beliebiger Tiefe 99 4.4 Permutationen Das Generieren jeder möglichen Permutation gegebener Elemente 104 Anmerkungen - der Geschäftsreisende Wie man den kürzesten Weg zu einer Reihe von Städten findet 110 4.5 Kombinationen Das Generieren aller möglichen Kombinationen von Elementen, die aus mehreren gewählt werden 112
VII Anmerkungen - organisatorische Kommunikationsmuster Wie man die Cliquen" aus einer Gruppe mit Leuten herausfindet 117 5 Datenstrukturen 121 5.1 Die Stackmatrix Die Verarbeitung von Elementen in der Reihenfolge Last-In-First-Out (LIFO) mit Hilfe einer Matrixstruktur. 125 5.2 Die Queue-Matrix Die Verarbeitung von Elementen in der Reihenfolge First-In-First-Out (FIFO) mit Hilfe einer Matrixstruktur 128 5.3 Der Heap' Das Verarbeiten von Elementen in einer,ßufällig-hinein größten-hinaus"-folge 132 5.4 Liste mit freien Speicherblöcken Der Aufbau einer Liste mit frei verfügbaren Speicherplätzen 137 5.5 Die Listenimplementation des Stack Das Anordnen von Elementen in Last-In-First-Out (LIFO) Reihenfolge mit Hilfe der Liste mit freiem Speicher 142 5.6 Die Listenversion der Queue Wie man mit Hilfe einer Liste mit freien Speicherplätzen Elemente in einer First- In-First-Out (FIFO) Reihenfolge anordnen kann 147 5.7 Zweifach verkettete Listen Wie Elemente innerhalb einer linearen Liste in beiden Richtungen miteinander verkettet werden können 151 5.8 Die ausgeglichene Baumstruktur Wie Elemente auf effiziente Art in sortierter Reihenfolge angeordnet werden 161 6 Sortieren und Zusammenfügen 183 6.1 Der Sequenzalgorithmus Das Einbinden einer festen Anzahl von Elementen in eine sortierte Sequenz 185 6.2 Das Matrixsortieren Das Sortieren der Elemente einer Matrix mit einer Reihe unterschiedlicher Verfahren 189
VIII 7 Textverarbeitung 213 7.1 Das Soundex-Verfahren Das Codieren von Namen entsprechend ihrer phonetischen Zusammensetzung 215 7.2 Ähnlicher Text Wie man bestimmt, ob zwei Zeichenketten gleich oder ähnlich sind 219 7.3 Suchmuster Wie man Worte in einem Text findet 224 7.4 Das Suchen in Matrizen Das Finden eines Worts in einer Matrix mit Worten 228 7.5 Hashing Der Aufbau einer Tabelle für das schnelle Auffinden bestimmter Wörter 236 7.6 Die Trie-Struktur Das Generieren eines effizienten Index für eine Tabelle mit Wörtern 242 Anmerkungen - Datenkompression Das Komprimieren von Text mit einem einfachen, neuen Verfahren 250 8 Zufallszahlen 255 Anmerkungen - Das Gesetz von den Durchschnitten Die Antwort auf die Frage, ob das Gesetz der Durchschnitte eine erfahrbare Realität oder ein Mythos ist 258 8.1 Die Zufallszahlengeneratoren Das Erzeugen von Zufallszahlen mit unterschiedlichen Verteilungen 264 8.2 Die zufällige Auswahl Mischverfahren und das zufällige Auswählen einer Anzahl von Elementen aus einer größeren Menge 283 9 Die Finanzwelt 291 9.1 Finanzerklärungen Das effiziente Generieren einer Bilanzaufstellung und einer Gewinn- und Verlustrechnung 292
EX Anmerkungen - Das Journal Wie die Bücher für ein Unternehmen geführt werden 298 9.2 Kapitalströme Das Berechnen der effektiven Verzinsung und des aktuellen Werts 302 9.3 Kredite Das Bestimmen von Zinssätzen, Konditionen und Rückzahlungen 307 9.4 Die Nullstellenfunktion Wie man den Punkt findet, an dem eine Kurve die X-Achse schneidet 313 10 Das Aktualisieren von Dateien 317 10.1 Die serielle Aktualisierung von Arbeitsdateien Das Aktualisieren einer seriellen Arbeitsdatei unter Zuhilfenahme einer Transaktionsdatei 319 10.2 Die indizierte Aktualisierung Das Aktualisieren einer indizierten Masterdatei unter Zuhilfenahme einer Transaktionsdatei 324 10.3 Das dynamische Hashing Der Aufbau eines Index für Dateien variabler Größe 331 11 Matrizen 351 11.1 Lineare Gleichungssysteme Das Lösen von simultanen linearen Gleichungssystemen. 353 11.2 Stützpunktschritte Das Ausführen eines Schritts einer Matrixinvertierung... 360 Anmerkungen - das Bestimmen eines Unternehmenswerts Das Bestimmen des tatsächlichen Unternehmenswerts für sich anteilig gegenseitig besitzende Firmen 366 11.3 Die lineare Programmierung Das Herausfinden des besten Wegs, eine Aufgabe unter Berücksichtigung verschiedener Konditionierungen zu erledigen 368 11.4 Matrix-Grundwerte Das Bestimmen des dominanten Eigenwerts und des Eigenvektors einer Matrix 380
X Anmerkungen - Das Bestimmen gewichteter Kriterien Das Zuordnen von Gewichtungen für Entscheidungskriterien mit Hilfe einer relativ objektiven Methode 386 12 Das Anpassen von Kurven 389 12.1 Polynome Das Anpassen des Lagrangeschen Polynoms an eine Punktwolke 392 12.2 Der kubische Spline Das Verlegen einer glatten Kurve durch eine Punktwolke. 398 12.3 Die glatte Kurve Das optimierte Annähern einer Polynomkurve an eine Punktwolke 405 12.4 Die mehrfache, lineare Regression Das optimierte Anpassen einer Formel an mehrdimensionale Punktwolken 413 Anmerkungen - Das Usambaraveilchen Das Bestimmten der besten Zuchtmethode 421 13 Netzwerke 425 13.1 Das topologische Sortieren Wie man die Elemente eines Netzwerks in eine Reihenfolge bringt 428 13.2 Der kritische Pfad Wie man den längsten Pfad durch ein Netzwerk findet... 432 13.3 Die umfassende Baumstruktur Das Suchen nach dem kürzesten Baum, der jeden Knoten in ein Netz einbindet 436 Referenzen 443 Stichwortverzeichnis 449