Springer- Lehrbuch Fred Kroger Einfiihrung in die In formatik Algorithmenentwicklung Springer-Verlag Berlin Heidelberg New York London Paris Tokyo Hong Kong Barcelona Prof. Dr. Fred Kroger Institut fUr Informatik Universitiit Miinchen TheresienstraBe 39 W-8000 Miinchen 2 CR-Klassifikation (1987): A.1, 0.0, E.O ISBN-13: 978-3-540-53303-0 e-ISBN-13: 978-3-642-76177-5 DOl: 10.1 007/978-3-642-76177-5 CIP-Titelaufnahme der Deutschen Bibliothek Kroger, Fred: Einftihrung in die Informatik. Algorithmenentwickiung 1 Fred Kroger. -Berlin; Heidelberg; New York; London; Paris; Tokyo; Hong Kong; Barcelona: Springer, 1991 (Springer-Lehrbuch) Dieses Werk ist urheberrechtlich geschlitzt. Die dadurch begrlindeten Rechte, insbesondere die der Ubersetzung, des Nachdrucks, des Vortrags, der Entnahme von Abbildungen und Tabellen, der Funksendung, der Mikroverfilmung oder der Vervielf:iltigung auf anderen Wegen und der Speicherung in Datenverarbeitungsanlagen, bleiben, auch bei nur auszugs weiser Verwertung, vorbehalten. Eine Vervielf:iltigung dieses Werkes oder von Teilen dieses Werkes ist auch im Einzelfall nur in den Grenzen der gesetzlichen Bestimmungen des Urhe berrechtsgesetzes der Bundesrepublik Deutschland vom 9. September 1965 in der jeweils geltenden Fassung zulassig. Sie ist grundsatzlich verglitungsptlichtig. Zuwiderhandlungen unterliegen den Strafbestimmungen des Urheberrechtsgesetzes. © Springer-Verlag Berlin Heidelberg 1991 Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Werk berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme, daB solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten waren und daher von jedermann benutzt werden dlirften. 45/3140-543210 -Gedruckt auf saurefreiem Papier Vorwort Seit Ende der sechziger Jahre hat sich die Informatik als eigensUindiges, begehrtes Studienfach etabliert. Die Lehre des Faches an den Hochschu len - zumal die Grundausbildung fUr Studienanfanger - hat sich imLaufe dieser Zeit deutlich gewandelt. Die Wissenschaft Informatik hat inzwi schen einen groBen Schatz an lehrbaren strukturellen Erkenntnissen an gesammelt. Studienanfanger bringen immer haufiger bereits (geeignete oder weniger geeignete) Kenntnisse in der Programmierung von Rechen anlagen mit. Immer mehr ist daher die Grundausbildung gefordert, vor allem die fUr die Programmierung fundamentalen Konzepte und Metho den der Algorithmenentwicklung herauszuarbeiten und zu vermitteln. Die formalen Grundlagen dieser Konzepte und Methoden sind in den letzten Jahren genligend gefestigt worden und konnen nun ebenfalls - unter ge blihrender Vereinfachung und nicht immer in allen Details, jedoch ohne Preisgabe der Prazision - in den Anfangsunterricht einbezogen werden. Dieses Lehrbuch ist geschrieben fUr Lehrende und Studierende in den ersten Fachsemestern an wissenschaftlichen Hochschulen, gleichermaBen im Haupt- und im grundlagenorientierten Nebenfachstudium Informatik. Es ist aus einer Reihe von Einflihrungsvorlesungen entstanden, die der Autor seit 1985 zunachst an der Technischen Universitat Mlinchen und nachfolgend an der Ludwig-Maximilians-Universitat Mlinchen gehalten hat. Das Buch umfaBt den Kernbereich "Algorithmenentwicklung" einer (etwa zweisemestrigen) Grundausbildung in Informatik und versucht, den oben genannten Leitlinien zu folgen. In unserem Bestreben, die begrifflichen Grundlagen der Algorith menentwicklung in abstrahierender und strukturierender Weise darzule gen, haben wir die Behandlung der einzelnen algorithmischen Konzepte nicht an eine konkrete Programmiersprache geknlipft und uns statt des sen bemliht, sie sozusagen "in Reinkultur" in einer eigenen - syntaktisch und semantisch formal definierten - "Konzeptsprache" festzuhalten. Erst im abschlieBenden Kapitel 8 geben wir einen kursorischen Uberblick, wie Algorithmen und Datenstrukturen in einer Programmiersprache (hier MODULA-2) dargestellt werden konnen. Es ist selbstverstandlich sinn voll, Teile dieses Kapitels bereits frliher zu lehren oder zu lesen, wenn VI Vorwort die Besehaftigung mit dem vorangehenden Stoff mit praktisehen Program mieriibungen begleitet wird. Formale Grundlegungen und Prazisierungen von Informatik-Inhalten erfolgen in mathematisehen Begriffswelten; viele dieser Inhalte besehrei ben direkt mathematisehe Sachverhalte in anderer "Einkleidung". Naeh einer knapp en Zusammenstellung von Begriffen und Notationen der Ma thematik in Absehnitt 1.1 be spree hen wir daher in den weiteren Absehnit ten von Kapitel 1 eine Reihe mathematiseher Konzepte und Teehniken, die fiir die Informatik besonders wichtig sind und in der Mathematikaus bildung in Schule und Grundstudium nieht oder jedenfalls haufig (noch) nicht mit der hier verfolgten Zielriehtung gelehrt werden. Kapitel 2 ist eine Hinfiihrung auf den zentralen Begriff des Algorith mus. AuBerdem wird die Bedeutung von Syntax und Semantik von Daten und Algorithmendarstellungen herausgearbeitet. In den Kapiteln 3 bis 5 werden Begriffe und konzeptuelle Grundlagen algorithmiseher Datenverarbeitung formal entwickelt. Kapitel 3 und 4 behandeln Konzepte der "Ablaufsteuerung" von Algorithmen, sowohl in applikativer als auch in imperativer Siehtweise. Wir beteiligen uns dabei nicht an der maneherorts gefiihrten Diskussion, welcher dieser beiden Ansatze zur Algorithmenentwicklung der "bessere" sei, sondern stell en sie gleichrangig nebeneinander und beleuchten (insbesondere auch in den nachfolgenden Kapiteln) vielmehr die jeweils vorhandenen Starken und Schwachen. Kapitel 5 behandelt wichtige Datenstrukturen und ihre algorithmi sehe Handhabung. Datenstrukturen - auch die in Kapitel 3 eingefiihrten "elementaren" - werden in der Form abstrakter Datentypen beschrieben, wobei wir allerdings immer den Weg "vom Modell zur Abstraktion" gehen: Axiomatische Definitionen abstrahieren inhaltlieh vorgegebene Strukturen. Kapitel 6 und 7 vermitteln methodische Grundlagen der Algorith menentwicklung. Kapitel 6 diskutiert neben allgemeinen Verfahrenswei sen, wie schrittweise Verfeinerung, Modularisierung u.a., ausfiihrlich den Einsatz (und wechselseitige Beziehungen) von Rekursion und Iteration sowie die Verwendung nieht-deterministischer Konzepte. Kapitel 7 behandelt Aspekte der algorithmischen Komplexitat und Methoden und Techniken zur Entwieklung effizienter Algorithmen. Ein einftihrender Absehnitt iiber parallele Algorithmen - dureh Effizienzbe traehtungen motiviert - rundet das Kapitel abo Bei der Ausarbeitung dieses Textes haben mich zahlreiche Kollegen, Mitarbeiter und Studenten in vielfaltiger Form - dureh Anregungen, Kri tik, Korrekturen usw. - unterstiitzt. Spezielle Hilfe wurde mir zuteil durch Hans GaBner, Martin Leischner, Frank LeBke, Stephan Merz, Barbara Paeeh-Kaiser, Holger Schlingloff. Ihnen allen - auch den nicht namentlieh Genannten - bin ich zu groBem Dank verpflichtet. Vorwort VII In besonderer Weise war Stefan Eichholz von Beginn an mit der hier vorliegenden Arbeit verbunden. Bei meinen ersten Vorlesungen zu diesem Thema ist er mir als Ubungsleiter hilfreich zur Seite gestanden. 1m Stu dienjahr 1987/88 hat er selbst im Rahmen eines Lehrauftrages die zwei semestrige Einflihrungsvorlesung an der Ludwig-Maximilians-Universi Hit in Anlehnung an mein damaliges Manuskript gehalten und dieses in vielen Punkten verbessert. Die schrittweise Fertigstellung des endglilti gen Buchtextes hat Herr Eichholz schlieBlich mit vielen wichtigen An merkungen begleitet. Ihm gilt mein besonderer Dank. Danken mochte ich nicht zuletzt auch dem Springer-Verlag, insbe sondere Hans Wossner und Ingeborg Mayer, flir die Bereitschaft zur Herausgabe dieses Buches und die stete Unterstlitzung wahrend der Fer tigstellung. MUnchen, Oktober 1990 Fred Kroger Inhaltsverzei chnis Einleitung 1 1 Mathematische Grundlagen 3 1.1 Einige mathematische Grundbegriffe 3 1.2 Strikte und nicht-strikte Abbildungen . 11 1.3 Boolesche Algebra 14 1.4 Induktion und Rekursion 17 1.5 Tupel und endliche Folgen . 23 1.6 Induktive Definitionen von Folgen . 27 1.7 Binarbaume 31 2 Daten und Algorithmen . 3S 2.1 Zeichenreihen . 35 2.2 Datendarstellung durch Zeichenreihen 39 2.3 Syntaxdefinitionen 43 2.4 Algorithmen . 50 2.5 Darstellung von Algorithmen 59 3 Konzepte applikativer Algorithmen 63 3.1 Grundoperationen . 63 3.2 Funktionen . 69 3.3 Terme . 74 3.4 Rekursion 83 3.5 Terminierung und Korrektheit rekursiver Funktionen 87 3.6 Konstanten 92 4 Konzepte imperativer Algorithmen 9S 4.1 Prozeduren, Variablen, Zuweisungen 95 4.2 Prozeduraufrufe . 100 4.3 Kombinierbarkeit applikativer und imperativer Konzepte 106 4.4 Bedingte Anweisungen und Rekursion . 112 4.5 Iteration. 118 4.6 Terminierung und Korrektheit rekursiver Prozeduren und Schleifen 128 x Inhaltsverzeichnis 5 Datenstrukturen....... 135 5.1 Sequenzen....... 135 5.2 Stapel und Schlangen. 144 5.3 Reihungen. 149 SA Tupel ........ . 158 5.5 Binarbaume ..... . 164 6 Methoden und Techniken der Algorithmenentwicklung . 175 6.1 Schrittweise Verfeinerung . . . . . . . . . . . 175 6.2 Datenaustausch tiber globale GroBen ..... 186 6.3 Rekursion und Iteration als Entwurfskonzepte 194 6 A Entrekursivierung von Algorithmen 202 6.5 Entrekursivierung mit Kellern . 213 6.6 Nicht-Determinismus .. 220 7 Komplexitat von Algorithmen 227 7.1 Grundbegriffe...... 227 7.2 Entwicklung effizienter Algorithmen 233 7.3 Suchalgorithmen ..... . 243 7 A Backtracking-Algorithmen. . . . . . 249 7.5 Parallelitat.. ........... . 258 8 Darstellung von Algorithmen in MODULA-2 267 8.1 Funktionen und Prozeduren. 267 8.2 Programme und Moduln 273 8.3 Datenstrukturen. 279 8 A Verweise......... 288 8.5 Geflechte ....... . 294 8.6 Darstellung von Mengen und Multimengen . 304 Sachverzeichnis . . . . . . . . . . . . . . . . . . . 313 Einleitung Informatik (englisch: computer science) ist die Wissenschaft und Technik der Verarbeitung von Informationen mit Hilfe elektronischer Rechenanlagen. Informationsverarbeitung ist ein grund1egendes Element menschli chen (und nicht nur menschlichen) Lebens liberhaupt. Die spezielle Beto nung der Informatik liegt auf einer Informations- (oder auch: Daten-) Verarbeitung, die "von einer Maschine" (in Abgrenzung etwa von einem menschlichen Verarbeited durchfUhrbar ist. Immer mehr Datenverarbei tungsaufgaben lassen sich heute in der Tat mit Hilfe von Computern 10- sen, z.B.: • Verwaltung von Konten einer Bank, • Textverarbeitung, • Wettervorhersage, • Steuerungvon F1ugzeugen, • Verarbeitung von (chemischen, medizinischen, ... ) MeBdaten, • Hochrechnung von Wah1ergebnissen usw. Ermoglicht wird dies jeweils durch systematische Verarbeitungsvor schriften, die so prazise formuliert sind, daB sie von einer Rechenan1age ausgeflihrt werden konnen. Eine Verarbeitungsvorschrift in diesem Sinne heiBt Algorithmus. Der A1gorithmusbegriff ist ein zentra1er Begriff der Informatik. Um ihn herum gruppiert sich ein weites Spektrum von wissenschaftlichen Themenberei chen, z.B.: • Aufbau und Wirkungsweise der (e1ektronischen) Maschinen, die A1go rithmen ausftihren konnen, • praktischer Einsatz von Rechenan1agen bei der DurchfUhrung von A1- gorithmen, • maschinengerechte Darstellung von Daten und A1gorithmen, • Konstruktion von A1gorithmen, • Grenzen der maschinellen Losbarkeit von Datenverarbeitungsaufga ben. 2 Einleitung Die Beschaftigung mit der hardware, d.h. mit Aufbau und Wirkungs weise von elektronischen Rechenanlagen gehort zum Teilbereich der technischen Informatik. Diese hat zahlreiche Beriihrungspunkte mit der Elektrotechnik. Die praktische Informatik umfaBt alle Bereiche der Kon struktion, Darstellung und Ausfiihrung von Algorithmen (der software). Zur theoretischen Informatik zahlen Fragen aus dem in obiger Aufzahlung zuletzt genannten Bereich sowie ganz allgemein die theoretische Durch dringung und Grundlegung von Fragen und Konzepten der Informatik. Praktische und erst recht theoretische Informatik beziehen einen GroBteil ihrer wissenschaftlichen Methoden und Techniken aus der Mathematik. Dariiber hinaus gibt es eine ganze Reihe von Fragestellungen in der Informatik, die sich nicht direkt in die drei genannten Teilbereiche ein ordnen lassen. Dazu gehoren z.B. die Untersuchung der Anwendbarkeit von Erkenntnissen der Informatik in anderen Wissenschaften (angewandte Informatik) oder die Behandlung von Auswirkungen der Informatik in der Gesellschaft. Dieses Buch gibt eine Einfiihrung in die Grundlagen des skizzierten Kernbereichs der Informatik: jeglicher "algorithmischen Datenverarbei tung" zugrunde liegende Konzepte, Methoden und Techniken zur Darstel lung und Strukturierung von Daten und zur Entwicklung von Algorithmen, die Daten verarbeiten.