Folien zur Informatik I Dipl.-Inform. Guido R¨oßling Berufsakademie

Werbung
Folien zur
Informatik I
Dipl.-Inform. Guido Rößling
Berufsakademie Mannheim
EMail: [email protected]
Inhaltsverzeichnis
Allgemeines zur Informatik I
0.1
Überblick über die Informatik
1.1
Was ist Informatik? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1
Duden Informatik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1
Begriff Informatik“ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2
”
Definition der ACM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3
Einordnung der Informatik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5
Einsatz von Informatik-Methoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.7
Teilgebiete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8
Themenbereiche der Informatik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.9
Geschichte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.13
Vom Problem zum Programm
2.1
Aufgabenbeispiele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4
Schritt 0: Aufgabenstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5
Schritt 1: Erfassung der Problemstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.6
Schritt 2: Analyse der Problemstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.7
Schritt 3: Entwicklung eines Lösungsmodells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.11
Grafische Komponenten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.12
Algorithmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.18
Beispiel- Algorithmus“ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.20
”
Erkenntnisse und Fragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.21
Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.22
Eigenschaften . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.23
Formale Sprachbeschreibung
3.1
Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1
Verarbeitung von Eingabedaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5
Definition von Sprachen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.7
BNF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.10
Regelform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.11
Ableitungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.13
Ableitungssequenz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.14
Ableitungsbaum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.16
Beispiele:
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.18
Beispiele: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.20
Ein- und Mehrdeutigkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.22
BNF für elementare Arithmetik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.24
Syntaxdiagramme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.26
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.29
Vergleich der Ableitungsarten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.30
Logik
4.1
Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1
Aussagenlogik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2
Geschichte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2
Beispiele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3
Grundbegriffe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5
Junktoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.6
Unterschiede zu Deutsch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.9
Backus-Naur-Form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.10
Konversionsregeln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.14
Prädikatenlogik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.16
Prädikate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.17
Aussagefähigkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.18
Quantoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.19
Existenzquantor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.20
Allquantor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.21
Auswertung der Quantoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.23
Berechenbarkeit
5.1
Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1
Begriffe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3
Maschinenmodelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5
Turingmaschine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.6
Schematischer Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.7
Programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.8
Beispielbefehl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.9
Programmausführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.10
Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.11
Church’sche These . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.13
Ergebnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.14
Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.15
Komplexität
6.1
Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1
Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.4
Nutzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.6
Elementare Kosten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.7
Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.8
O-Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.11
Rechenbeispiele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.12
Komplexitätsklassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.15
Beispiele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.16
Verhalten der Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.18
Ergebnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.21
Average, Best und Worst Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.22
Ergebnisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.23
Rekursion
7.1
Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.1
Beispiele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.4
BNF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.4
Mathematik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.5
Allgemeines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.8
Summenformel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.9
Bekannte Algorithmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.10
Arten von Rekursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.11
Türme von Hanoi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.12
Typische Fehler bei der Rekursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.24
Parallelverarbeitung
8.1
Einsatzgebiete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1
Architekturen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2
Beispiele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.4
Voraussetzungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.5
Bewertung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.7
Algorithmenklasse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.8
Problemstellungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.9
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.11
Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.12
Determinismus und Nichtdet.
9.1
Begriffe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.1
Deterministische Algorithmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.2
Probabilistische Algorithmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.3
Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.4
Heuristische Algorithmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.5
Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.7
Nichtdeterministische Algorithmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.10
Ergebnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.12
Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.13
Korrektheit
10.1
Motivation und Geschichte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.1
Fehlerarten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2
Testverfahren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.4
Statische Testverfahren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.5
Schreibtischtest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.6
Codeinspektion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.7
Dynamisches Testen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.8
Black Box-Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.8
White Box-Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.10
Klassentest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.12
Integrationstest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.13
Top-Down Integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.14
Bottom-Up Integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.15
Produkttest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.16
Bewertung der Testverfahren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.17
Korrektheitskriterien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.18
Spezifikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.19
Probleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.20
Motivation der Verifikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.21
Vorgehensweise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.22
Weakest Precondition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.23
Regeln für Wertzuweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.24
Beispiele zur Wertzuweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.25
Regeln für Blöcke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.27
Beispiele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.30
Regeln für IF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.31
Beispiele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.33
Regeln für Schleifen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.34
Invariante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.35
Beispiele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.37
Totale Korrektheit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.39
Schleifen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.40
Imperative Programmierung
11.1
Allgemeines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2
Modellierung von Daten und Objekten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.3
Objektorientierte Programmierung
12.1
Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.1
Schlüsselbegriffe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.2
Klassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.2
Objekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.3
Attribute und Methoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.4
Abstrakte Datentypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.5
Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.6
Vom ADT zur Klasse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.7
Von der Klasse zum Objekt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.8
Konstruktoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.9
Verwendung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.10
Mögliche Fälle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.11
Vererbung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.12
Problemstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.12
Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.13
Beispiele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.14
Folgen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.17
Abstrakte Klassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.18
Überladen von Methoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.20
Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.21
Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.21
Implementierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.22
Anwendung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.23
Casting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.24
Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.25
Logische Programmierung
13.1
Grundidee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.1
Anfragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.2
Resolution und Unifikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.3
Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.4
Funktionale Programmierung
14.1
Grundidee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.1
Beispiele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.3
Elisp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.4
Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.5
Abbildungsverzeichnis
15.1
Tabellenverzeichnis
16.1
Index
17.1
Literaturverzeichnis
18.1
Allgemeines zur Informatik I
Inhalte der Informatik I:
❑ Formale Sprachbeschreibung – wie lassen sich Sprachen beschreiben?
❑ Formale Logik – wie wird Logik mathematisch sauber angewendet?
❑ Algorithmentheorie – Grenzen der Machbarkeit sowie grundlegende Konzepte
❑ Grundkonzepte der Programmierparadigmen:
☞ Imperative Programmierung
☞ Objektorientierte Programmierung
☞ Logische Programmierung
☞ Funktionale Programmierung
Informatik I – c Guido Rößling
Allgemeines zur Informatik I
0.1
Allgemeines zur Informatik I
Ziel der Informatik I“ ist es,
”
❑ logische und systematische Grundlagen für die spätere Verwendung aufzubauen,
❑ grundlegende Konzepte der Theoretischen Informatik und deren Praxisbezug vorzustellen
❑ die verschiedenen Grundarten der Programmierung vorzustellen
❑ und dabei das Interesse an Informatik als Wissenschaft (im Gegensatz zu reiner Programmierung) zu wecken!
Die Informatik I bildet das Fundament für die sich anschließenden Veranstaltungen in der
Informatik.
Informatik I – c Guido Rößling
Allgemeines zur Informatik I
0.2
Was ist Informatik“?
”
Informatik (engl. Computer Science) ist die Wissenschaft von der systematischen Verarbei”
tung von Informationen, besonders der automatischen Verarbeitung mit Hilfe von Digitalrechnern“ (aus [Dud93])
Informatik selbst ist ein Kunstwort aus Information und Automatik:
❑ Information, da die Informatik als Basistechnik die Informationsverarbeitung hat;
insbesondere unter Benutzung von Computern und EDV aller Art, sowie zur Erleichterung
der geistigen Arbeit.
❑ Automatik, da ein zentraler Aspekt die Automatisierung von Tätigkeiten zur Erleichterung
der körperlichen Arbeiten ist.
Ansätze zur Automatisierung gibt es seit (spätestens) Archimedes (Wasserbeförderung).
Informatik I – c Guido Rößling
Überblick über die Informatik – Was ist Informatik? : Duden Informatik
1.1
Begriff Informatik“
”
Der Begriff Informatik stammt ursprünglich von der Definition der informatique“ der Aca”
demie Française: Behandlung von Information mit rationalen Mitteln“.
”
Die für diese Behandlung notwendigen rationalen Mittel“ sind (nach René Descartes (1596”
1650)):
❑ nur dasjenige gilt als wahr, was so klar ist, daß kein Zweifel bleibt;
❑ größere Probleme sind in kleinere aufzuspalten;
❑ es ist immer vom Einfachen zum Zusammengesetzten hin zu argumentieren
❑ und das Werk muß am Ende einer abschließenden Prüfung unterworfen werden.
Informatik I – c Guido Rößling
Überblick über die Informatik – Begriff Informatik“
”
1.2
Methoden der Informatik
Nach einem Bericht ([DCG 89]) der Kommission Task Force on the Core of Computer
”
Science“ zur Bestimmung der wesentlichen Inhalte“ der Informatik basiert die Informatik
”
vor allem auf drei Methoden, die allen Teilgebieten der Informatik zugrundeliegen.
❑ Theorie
☞ Isolation und Definition der zu untersuchenden Gegenstände (Definition);
☞ Postulation der möglichen Beziehungen zwischen den Gegenstände (Theorem);
☞ Bestimmung, ob die Beziehungen gelten (Beweis)
❑ Abstraktion
☞ Bildung einer Modellhypothese,
☞ Konstruktion eines Modells und Formulierung des zu erwartenden Verhaltens,
☞ Entwurf eines Experiments und Sammlung von Beobachtungen,
☞ Analyse der Ergebnisse
Informatik I – c Guido Rößling
Überblick über die Informatik – Begriff Informatik“ : Definition der ACM
”
1.3
Methoden der Informatik
❑ Design
☞ Formulierung der Anforderungen,
☞ Formulierung der Spezifikation,
☞ Entwurf und Implementierung des Systems
☞ Testen des Systems.
Informatik als Wissenschaft ist das systematische Studium von informationsbeschreibenden und -transformierenden Prozessen in Bezug auf deren
Theorie – Analyse – Entwurf – Effizienz – Implementierung – Anwendung
Informatik I – c Guido Rößling
Überblick über die Informatik – Begriff Informatik“ : Definition der ACM
”
1.4
Einordnung der Informatik
Wirtschaftswissenschaften
Mathematik
Ingenieursdisziplinen
Physik
Informatik
Naturwissenschaften
Elektrotechnik
Geisteswissenschaften
Abbildung 1: Einordnung der Informatik
Informatik I – c Guido Rößling
Überblick über die Informatik – Einordnung der Informatik
1.5
Einordnung der Informatik
Aufgabe der Informatik
❑ Erforschung grundsätzlicher Verfahrensweisen der Informationsverarbeitung
❑ Erforschung allgemeiner Methoden und deren Anwendung
Forschungsgegenstand
Struktur und Eigenschaft von künstlichen, maschinellen Informationsverarbeitungssystemen:
❑ Hardware ( Computer“, Rechenanlage) physikalisch verfügbare Bestandteile
”
❑ Software Programme zum Betrieb eines Rechners bzw. Lösung eines Problems
❑ Algorithmen (Verfahren)
Methodik
❑ Analyse (☞ Naturwissenschaften) – Formale Beschreibung (☞ Mathematik)
Konstruktion (☞ Technik, Ingenieurswissenschaften)
Informatik I – c Guido Rößling
Überblick über die Informatik – Einordnung der Informatik
1.6
Einsatz von Informatik-Methoden
❑ Verwaltung von Konten einer Bank (viele Daten)
❑ Textverarbeitung (interaktiv)
❑ Verarbeitung von Meßdaten (z.B. Wettervorhersage, schnell, Realzeit)
❑ Flugzeugsteuerung (Sicherheit)
❑ Kreditkarten (weltweite Kommunikation)
❑ CD-Spieler, DAT, DVD (preiswert)
❑ Bildverarbeitung (Multimedia)
❑ Buchungssysteme
❑ Prozeßsteuerungen
❑ etc.
Informatik I – c Guido Rößling
Überblick über die Informatik – Einsatz von Informatik-Methoden
1.7
Teilgebiete der Informatik
Es gibt vier wesentliche Teilgebiete der Informatik:
❑ Theoretische Informatik
☞ Formale Methoden, Automatentheorie, Grenzen der Machbarkeit (Berechenbarkeits- und Komplexitätstheorie, Analyse von Algorithmen)
❑ Praktische Informatik
☞ Betriebssysteme, Programmiersprachen und Compilerbau, Datenbanken, Rechnernetze, Grafik und Multimedia, Softwaretechnik, Künstliche Intelligenz
❑ Technische Informatik
☞ Hardwareentwicklung, Rechnerarchitektur, Schaltkreisentwurf, VLSI-Entwurfswerkzeuge, Mikroprozessoren und -programmierung
❑ Angewandte Informatik
☞ Verwendung der Methoden der Informatik in anderen Wissenschaften; weitergehende Fragen wie Ergonomie und Akzeptanz.
Informatik I – c Guido Rößling
Überblick über die Informatik – Teilgebiete
1.8
Themenbereiche der Informatik
❑ Algorithmentheorie
☞ Berechenbarkeit von Funktionen: kann das Ergebnis für alle oder wenigstens einige
Parameterwerte bestimmt werden?
☞ Komplexität: In welcher Größenordnung befindet sich Zeit- bzw. Platzbedarf der
Funktion?
☞ Deterministische Algorithmen, Probabilitische Algorithmen und Heuristiken
❑ Datenstrukturen
Wie können Daten in einer dem Problem angepaßten Weise gespeichert werden, so daß
Zugriff und typische“ Operationen möglichst schnell erfolgen können?
” ❑ Betriebssysteme
Grundlegende Bereitstellung der Funktionalität des Rechners, so daß der Benutzer Programme starten kann. Das Betriebssystem übernimmt u.a. die Speicher-, Datei- und Prozeßverwaltung der Programme.
Informatik I – c Guido Rößling
Überblick über die Informatik – Themenbereiche der Informatik
1.9
Themenbereiche der Informatik
❑ Programmiersprachen und Compilerbau
Entwicklung von Werkzeugen, die Programme einer Sprache in eine andere Sprache überführen, insbesondere eine vom Rechner ausführbare Sprache.
❑ Datenbanksysteme
Entwurf und Entwicklung von Datenbanken mit allen dabei anstehenden Fragen (Speicherung, Indizierung, Zugriff, Zugriffskontrolle, Aufsetzen nach Absturz etc.)
❑ Rechnernetze
Überlegungen zur Auswirkung der Vernetzung von mehreren Computern zum Zweck des
Datenaustauschs und der Kooperation.
❑ Computergrafik, Visualisierung, Multimedia
Angemessene“ visuelle Aufbereitung von Daten sowohl in Wissenschaft als auch in der
”
Freizeit (momentan wohl der sichtbarste“ Bereich der Informatik für Laien: Wettervor”
hersagen, Animationen, )
Informatik I – c Guido Rößling
Überblick über die Informatik – Themenbereiche der Informatik
1.10
Themenbereiche der Informatik
❑ Softwaretechnik
Ingenieurmäßiger Entwurf großer Programmsysteme
❑ Künstliche Intelligenz
Versuch, dem Computer das Denken“ beizubringen in Form logischer Schlußregeln. Der
”
Computer soll aus einer Menge von Fakten und Regeln selbständig neue Fakten erschließen können.
❑ Rechnerarchitektur
Aufbau neuer Prozessoren, Speicher und Peripheriegeräte
❑ Datenanalyse (Audio, Video, Bild, Meßreihen, )
z.B. Kamera-Überwachung und Bewegungsmelder, aber auch Aufspüren von Trends in
Meßreihen, Finden von Personen in Bildmaterial u.v.a.
Informatik I – c Guido Rößling
Überblick über die Informatik – Themenbereiche der Informatik
1.11
Themenbereiche der Informatik
❑ Systemüberprüfung und Automatisierung
Automatische Sicherheitsüberwachung, etwa in Flugzeugen (Autopilot) oder Kraftwerken
(Überhitzungsschutz) sowie automatische Steuerung einfacher Vorgänge (Thermostatregelung).
❑ Soft Computing
Diverse Techniken wie Neuronale Netze, Fuzzy Logik und Genetische Algorithmen
❑ Sicherheit und Kryptographie
Wie können Daten so verschlüsselt werden, daß nur der gewünschte Empfänger sie lesen
kann? Wie können Rechner so abgesichert werden, daß keine unzulässigen Zugriffe mehr
möglich sind?
Informatik I – c Guido Rößling
Überblick über die Informatik – Themenbereiche der Informatik
1.12
Geschichte der Informatik
❑ Ägyptische Multiplikation“ (oder Indische Multiplikation“), ca. 16. Jhd. v. Chr.
”
”
❑ Ab ca. 450 v. Chr.: Verwendung des Abakus als Hilfsmittel f ür die Grundrechenarten.
❑ Euklid (365-300 v.Chr.): euklidischer Algorithmus“ zur Berechnung des größten gemein”
samen Teilers.
❑ 230 v. Chr.: Eratosthenes entwickelt einen Algorithmus zur Berechnung von Primzahlen:
Das Sieb des Eratosthenes.
❑ Um Christi Geburt: Entwicklung von automatischen Tempelt üren
❑ 5. Jhd: In Indien wird das Dezimalsystem entwickelt.
❑ 9. Jhd: Ibn Musa Al-Chwarismi (persischer Mathematiker und Astronom) schreibt Lehrbuch Kitab al jabr w’almuqabala“ ( Regeln der Wiedereinsetzung und Reduktion“). Der
”
”
Begriff Algorithmus wird später nach ihm benannt.
❑ 1050: Chinesische Gelehrte entwickeln das Dualsystem, ein Zahlensystem mit Basis 2.
Informatik I – c Guido Rößling
Überblick über die Informatik – Geschichte
1.13
Geschichte der Informatik
❑ 1547: Adam Riese (1492-1559) veröffentlicht ein Rechenbuch zur Rechnung im Dezimalsystem. Das Dezimalsystem setzt sich in Europa durch und erm öglicht gegenüber dem
römischen System eine Automatisierung.
❑ John Napier verwendet zum ersten Mal im Druck den Dezimalpunkt. Er entwickelt Logarithmen und Multiplikationsmaschinen.
❑ 1623: Wilhelm Schickard (1592-1635) konstruiert mit Kepler (1571-1630) eine Maschine
für die vier Grundrechenarten. Aufgrund des 30jährigen Krieges (1618-1648) in Deutschland bleibt sie unbeachtet.
❑ 1641: Blaise Pascal (1623-1662) konstruiert eine Maschine zur Addition zweier sechsstelliger Zahlen.
❑ 1673: Gottfried Wilhelm Leibniz (1646-1716) konstruiert eine Rechenmaschine mit Staffelwalzen für die vier Grundrechenarten.
❑ 1679: (Wieder-)Entdeckung der Dualzahlen durch Leibniz. Dualzahlen werden fast 3 Jahrhunderte später zur Grundlage der Zahlendarstellung in den Computern.
Informatik I – c Guido Rößling
Überblick über die Informatik – Geschichte
1.14
Geschichte der Informatik
❑ 1774: Philipp Matthäus Hahn (1739-1790) entwickelt eine zuverlässige mechanische Rechenmaschine.
❑ 1801: Jacquards mechanischer Webstuhl kann komplexe Muster weben. Die Steuerung
erfolgt durch gestanzte Platten.
❑ ab 1818: Rechenmaschinen nach Vorbild von Leibniz werden serienmäßig produziert und
ständig weiterentwickelt.
❑ 1838: Charles Babbage (1792-1871) plant mit Gräfin Ada Augusta von Lovelace die
Analytical Engine“, die durch Lochkarten gesteuert werden soll. Die Maschine soll einen
”
Zahlenspeicher, Rechenwerk, Steuereinheit und Programmspeicher haben.
Die Analytical Engine“ wird nie voll funktionsfähig und von den Zeitgenossen als Un”
sinn betrachtet.
❑ 1854: George Boole entwickelt eine Algebra auf den logischen Werten wahr und falsch.
Informatik I – c Guido Rößling
Überblick über die Informatik – Geschichte
1.15
Geschichte der Informatik
❑ 1886: Hermann Hollerith (1860-1929) entwickelt elektrische Zählmaschinen für Lochkarten zur Auswertung der Volkszählung in den USA. Es gibt spezielle Druck- und Stanzeinheiten sowie Stecktafeln zur Auswahl spezieller Arbeitsprogramme.
Holleriths Firma Hollerith Tabulating Company wird 1924 zur IBM.
❑ 1934: Konrad Zuse (1910-1995) beginnt mit der Planung einer programmgesteuerten Rechenmaschine auf Basis des Dualsystems.
❑ 1937: Die mechanische Anlage Z1 von Konrad Zuse ist fertig.
❑ 1937: Alan Turing schlägt ein Modell für einen Universalrechner vor: die Turingmaschine.
❑ 1939: Atanasoff-Berry-Computer arbeitet binär zur Lösung von Gleichungssystemen mit
29 Unbekannten.
❑ 1941: Die elektro-mechanische Anlage Z3 von Zuse ist fertig und der erste funktionsf ähige programmgesteuerte Rechenautomat. Die Programmierung erfolgt via Lochstreifen.
Z3 besteht aus 2000 Relais und kann 64 Worte von je 22 Bit speichern. Zur Multiplikation
werden ca. 3 Sekunden benötigt.
Informatik I – c Guido Rößling
Überblick über die Informatik – Geschichte
1.16
Geschichte der Informatik
❑ 1943: Der britische Röhrenrechner Colossus knackt den Enigma-Code der deutschen
Wehrmacht.
❑ 1944: Howard H. Aiken (1900-1973) baut mit der Uni Harvard und IBM
die teilweise
programmgesteuerte Rechenanlage MARK I. Additionen ben ötigen ca. , Multiplikation
ca. 6 Sekunden.
❑ 1946: J. P. Eckert und J. W. Mauchly stellen die ENIAC fertig (Electronic Numerical Integrator and Automatic Calculator), den ersten voll elektronischen Rechner mit ca. 18000
Elektronenröhren. Multiplikationen dauern ca. 3 ms.
❑ 1946-1952: Basierend auf den Ideen von John von Neumann (1903-1957) und anderen
werden in Princeton weitere Rechner entwickelt.
❑ 1947: William Shockley erfindet den Transistor (Nobelpreis f ür Physik 1956).
❑ 1949: M. V. Wilkes (Uni Manchester) stellt den ersten universellen Digitalrechner vor, den
EDSAC.
❑ 1957: Die Programmiersprache Fortran wird von John Backus vorgestellt.
Informatik I – c Guido Rößling
Überblick über die Informatik – Geschichte
1.17
Geschichte der Informatik
❑ 1958/59: Texas Instruments entwickelt den ersten integrierten Schaltkreis.
❑ 1960: ALGOL-60, die erste Programmiersprache mit Blockstruktur und Rekursion, wird
vorgestellt.
❑ 1965: Die erste Rechner-Maus wird von Doug Engelbart entwickelt.
❑ 1967: Dahl u. Nygaard entwickeln Simula-67, die erste objektorientierte“ Program”
miersprache.
❑ 1969: Das ArpaNet verbindet 4 Rechner an UCLA, UCSB, SRI und der University of
Utah. Es ist der Vorläufer des Internet.
❑ 1971: Der Intel 4004 ist der erste kommerzielle Mikroprozessor (2100 Transistoren, 4Bit-Daten).
❑ 1972: Kernighan und Ritchie entwickeln die Programmiersprache C.
Der erste 8-Bit Mikroprozessor, der Intel 8008, wird vorgestellt.
Informatik I – c Guido Rößling
Überblick über die Informatik – Geschichte
1.18
Geschichte der Informatik
❑ 1973: Goldberg, Kay u.a. entwickeln Smalltalk, die erste vollständig objektorientierte
Programmiersprache.
❑ 1974: Der erste Arbeitsplatzrechner mit Rasterbildschirm und grafischer Benutzerschnittstelle, der Xerox Alto, erscheint.
Kahn und Cerf entwickeln TCP, ein Protokoll für Paketvermittlung über Rechnernetze
❑ 1975: Der erste PC Altair ist als Bausatz für $397 erhältlich. Die Programmierung erfolgt
durch Schalter an der Vorderseite; die Ergebnisse werden durch Dioden angezeigt.
❑ 1977: Beginn der PC-Ära mit dem Apple II und dem Radio Shack RTS-80 in den USA.
❑ 1980: Motorola entwickelt den ersten 32-Bit Mikroprozessor, den MC 68000.
❑ 1981: IBM stellt den ersten PC her.
❑ 1984: Apple stellt den Apple Macintosh vor.
Informatik I – c Guido Rößling
Überblick über die Informatik – Geschichte
1.19
Geschichte der Informatik
❑ 1985: Intel präsentiert den 32-Bit Mikroprozessor i80386.
❑ 1986: Commodore stellt den Commodore Amiga vor.
❑ 1990: Der WWW-Browser Mosaic erleichtert das Navigieren im Internet; der Boom des
Internet beginnt.
❑ 1991: Sun entwickelt die Programmiersprache Oak, die später als Java bekannt wird.
Weitere Links zum Thema Geschichte der Informatik“ befinden sich unter
”
http://ourworld.compuserve.com/homepages/computer_museum
Informatik I – c Guido Rößling
Überblick über die Informatik – Geschichte
1.20
Geschichte der Informatik
automatische Tempeltüren
Der Abakus
Die Pascal’sche Maschine Der Jacquard’sche Webstuhl
Informatik I – c Guido Rößling
Überblick über die Informatik – Geschichte
Ibn Musa Al-Chwarismi
Teil des Webstuhls
1.21
Geschichte der Informatik
Ada Augusta Gräfin Lovelace
Hollerith
Konrad Zuses Z1
Atanassof-Berry-Computer
Detailansicht
Erster integrierter Schaltkreis
Informatik I – c Guido Rößling
Überblick über die Informatik – Geschichte
1.22
Geschichte der Informatik
Die erste Rechner-Maus
Detailansicht
Der Intel 8008
Der Alto
Der Altair
Altair von hinten
Informatik I – c Guido Rößling
Überblick über die Informatik – Geschichte
1.23
Geschichte der Informatik
Informatik I – c Guido Rößling
Der Apple II
Der Motorola MC 68000
Der IBM PC
Apple Macintosh
Intel 80386
Commodore Amiga
Überblick über die Informatik – Geschichte
1.24
Geschichte der Informatik: Rechnerentwicklung
1. 50er Jahre: Elektronenröhren (ca. 1000 Additionen pro Sekunde)
2. 60er Jahre: Halbleiterschaltkreise, insb. Transistoren und Dioden (etwa 10000 Additionen
pro Sekunde)
3. Ab Mitte 60er Jahre: Teilweise integrierte Schaltkreise mit ca. 500000 Additionen/s
4. Ab Anfang 70er Jahre: Hochintegrierte Schaltkreise mit ca. 10 Mio. Additionen/s
5. Ab Anfang der 80er Jahre: Höchstintegrierte Schaltkreise, mehrere Prozessoren auf einem
Chip; über Hundert Millionen Additionen/s
Informatik I – c Guido Rößling
Überblick über die Informatik – Geschichte
1.25
Vom Problem zum Programm
Problem
Kreativität
Intuition
Programmierung
Algorithmus
Lösungsidee
Programm
automatisch
Denkschweiß
maschinelle
Ausführung
Abbildung 2: Vom Problem zum Programm
Informatik I – c Guido Rößling
Vom Problem zum Programm
2.1
Vom Problem zum Programm
Eine idealisierte Vorgehensweise sieht wie folgt aus:
1. Saubere, formale Erfassung der Problemstellung
☞ Nebenbedingungen, Sonderfälle, Ein- und Ausgabeformat sind zu beachten!
2. Analyse der Problemstellung
☞ Gibt es ähnliche, gelöste Probleme? Aufteilung in Teilprobleme möglich?
3. Entwicklung eines Lösungsmodells
4. Entwurf eines Lösungsverfahrens (Algorithmus)
5. Nachweis der Korrektheit
6. Analyse der Effizienz und Komplexität
7. Implementierung (Programmierung)
8. Test und Fehlerbeseitigung
9. Dokumentation
Informatik I – c Guido Rößling
Vom Problem zum Programm
2.2
Vom Problem zum Programm
In der Praxis sieht es aber oft anders aus:
❑ Bei Problemen wird oft zu vorherigen Phasen zurückgegangen
❑ Das System wird durch eine schnell erstellte Vorabversion“ (Prototyp) implementiert,
”
die schrittweise verbessert wird
❑ Die einzelnen Phasen werden oft nicht sauber getrennt, sondern laufen nebeneinander
❑ Organisatorische Maßnahmen (Projektmanagement, Qualitätssicherung, aber auch Ressourcen-Probleme)
❑ Nicht alle Probleme sind überhaupt lösbar
❑ Es gibt nicht immer eine ideale“ oder auch nur gute“ Lösung
”
”
❑ Der Nachweis der Korrektheit erfolgt oft durch Plausibilität“
”
Informatik I – c Guido Rößling
Vom Problem zum Programm
2.3
Beispiele für Aufgaben
Um die bei den typischen“ Aufgaben der Informatik auftretenden Probleme zu skizzieren,
”
betrachten wir ein Beispiel: Die Konzeption eines Systems zum Online-Banking f ür die Sparkasse Siegen.
Anhand dieses Beispiels werden bereits einige Inhalte und Begriffe eingef ührt, auf die später
näher eingegangen wird.
Als Voraussetzung nehmen wir an, daß der Auftrag an ein Software-Unternehmen erteilt wurde, dessen Mitarbeiter in Gruppen zusammenarbeiten. Zwei dieser Gruppen sollen nun daf ür
abgestellt werden, das Projekt in Kooperation mit dem Auftraggeber durchzuf ühren.
Informatik I – c Guido Rößling
Vom Problem zum Programm – Aufgabenbeispiele
2.4
Aufgabenstellung
Die vom Kunden gewünschte Funktionalität des fertigen Produkts sieht wie folgt aus:
❑ Anzeigen des Kontoauszugs
❑ Tätigen von Überweisungen
❑ Einsehen, Erteilen, Ändern und Stornieren von Daueraufträgen
❑ Aufnahme von Krediten oder Hypotheken
❑ Terminvereinbarung mit einem Betreuer
❑ Aufladen der Geldkarte, falls ein entsprechendes Ladegerät zur Verfügung steht.
☞ Welche Anforderungen fallen Ihnen noch ein? Was haben die Auftraggeber vergessen?
Informatik I – c Guido Rößling
Vom Problem zum Programm – Aufgabenbeispiele : Schritt 0: Aufgabenstellung
2.5
Schritt 1: Erfassung der Problemstellung
Zunächst ist zu schauen, welche Anforderungen nicht eindeutig definiert wurden:
❑ Wo soll das System wem zur Verfügung gestellt werden?
❑ Wie soll der Zugang zum System erfolgen?
❑ Wie sollen die Aktionen des Kunden protokolliert werden?
❑ Wie sieht das bisherige System aus? Soll es eine Anbindung daran geben?
Nach einigen klärenden Diskussionen legt sich die Sparkasse wie folgt fest:
❑ Das System soll prinzipiell jedem Kunden offenstehen, unabhängig davon, wo er sich
befindet – also etwa auch beim Urlaub auf den Äußeren Hebriden.
❑ Der Zugang soll über Paßwort geschützt werden. Die erforderlichen Unterlagen können
interessierte Kunden bei Vorlage eines Ausweises anfordern.
❑ Die Aktionen des Kunden müssen in entsprechende Transaktionen des bisherigen, weiterhin gültigen Bankcomputers umgesetzt werden, da es kein separates dediziertes OnlineSystem geben soll.
Informatik I – c Guido Rößling
Vom Problem zum Programm – Aufgabenbeispiele : Schritt 1: Erfassung der Problemstellung
2.6
Schritt 2: Analyse der Problemstellung
Um die Anforderungen der Bank möglichst gut realisieren zu können, bietet sich folgendes
an:
❑ Verwendung eines Java Applets für die Interaktion mit dem Kunden – dadurch Unabhängigkeit von bestimmen Rechnerarchitekturen oder besonderer Software.
❑ Zugangskontrolle als Teil des Java Applets; zur Sicherheit werden die Daten verschl üsselt
übertragen
❑ Entwurf eines Java-Servers bei der Bank, der Anfragen von weltweit laufenden Klienten
entgegennimmt und in entsprechende Aktionen auf dem eigentlichen Rechner der Bank
auslöst.
❑ Implementierung einer ansprechenden grafischen Schnittstelle f ür die Kunden; die interne
Kommunikation erfolgt rein binär vom Java-Server zum eigentlichen Server.
Informatik I – c Guido Rößling
Vom Problem zum Programm – Aufgabenbeispiele : Schritt 2: Analyse der Problemstellung
2.7
Schritt 2: Analyse der Problemstellung
WWW
internes Netz
Kunde 1
WWW
Java-Server der Bank
Server der Bank
Kunde 2
Abbildung 3: Schematischer Aufbau des Systems
Informatik I – c Guido Rößling
Vom Problem zum Programm – Aufgabenbeispiele : Schritt 2: Analyse der Problemstellung
2.8
Schritt 2: Analyse der Problemstellung
Folgende Probleme sind u.a. zu klären:
❑ Wie kann man die Kunden, Konten und die Beziehung dazwischen modellieren?
☞ Welche Informationen liegen vor, welche werden benötigt?
❑ Wie können die Daten vor Abhören durch Dritte geschützt werden?
☞ Einige Browser bieten bereits eine Verschlüsselung der Daten an.
❑ Wie erfolgt die Abstimmung mit dem vorhandenen System? Was f ür Eingaben oder Befehle versteht es?
Dazu ist eine Abstimmung mit den Informatikern der Sparkasse sowie Studium der Dokumentation des Banksystems notwendig.
❑ Wie kann die Autorisierung und der Datenschutz der Kunden gewährleistet werden?
❑ Wie kann eine ansprechend gestaltete Oberfläche aussehen? Welche Komponenten werden dafür benötigt?
Informatik I – c Guido Rößling
Vom Problem zum Programm – Aufgabenbeispiele : Schritt 2: Analyse der Problemstellung
2.9
Schritt 2: Analyse der Problemstellung
Elegant wäre eine Aufteilung der zu lösenden Probleme etwa wie folgt:
❑ Modellierung von Kunden, Konten und Transaktionen mit Verwaltung der Daten in einer
geeigneten“ Datenstruktur
”
❑ Datenschutz für die Kundendaten: jeder Kunde darf nur seine eigenen Konten einsehen
❑ Entwurf einer grafischen Schnittstelle: welche Komponenten gibt es, und wie h ängen sie
zusammen?
❑ Überprüfung des Systemzugangs (Autorisierung)
❑ Sichere Übertragung der Daten
❑ Kommunikation mit dem Banksystem
Die letzten drei Punkte werden im folgenden nicht weiter betrachtet.
Informatik I – c Guido Rößling
Vom Problem zum Programm – Aufgabenbeispiele : Schritt 2: Analyse der Problemstellung
2.10
Schritt 3: Entwicklung eines Lösungsmodells
Nach einigen Besprechungen einigen sich die Arbeitsgruppen auf folgendes Vorgehen:
❑ Da Kunden, Konten und Transaktionen drei völlig unterschiedliche Sachen sind, sollen
sie separat modelliert werden.
❑ Um den Datenschutz zu gewährleisten, sollte es eine Unterscheidung in drei Arten von
Daten geben:
☞ Daten, auf die alle zugreifen dürfen, etwa den Bildschirm zum Anmelden ( public“ –
”
öffentlich“),
”
☞ Daten, die nur für den jeweiligen Besitzer sichtbar sein dürfen, etwa die PIN ( private“
”
– privat“), sowie
”
☞ Daten, die nur innerhalb des Programmsystems sichtbar sein sollen, etwa die Kundenliste ( protected“ – geschützt“)
”
”
❑ Auf die grafischen Komponenten gehen wir ab der nächsten Folie ein.
Informatik I – c Guido Rößling
Vom Problem zum Programm – Aufgabenbeispiele : Schritt 3: Entwicklung eines Lösungsmodells
2.11
Grafische Komponenten
Verfolgen wir kurz die Arbeit der Gruppe Grafische Komponenten“ ”
Als erstes wurde eine Liste der Aufgaben bzw. Anforderungen erstellt:
❑ Welche Bausteine“ oder Komponenten gehören zu einer grafischen Oberfläche?
”
❑ Wie können diese sinnvoll modelliert werden?
☞ Die Modellierung sollte möglichst flexibel in der Zuordnung der Komponenten sein!
❑ Die Modellierung sollte so allgemein wie möglich sein – am besten sogar plattformunabhängig (d.h. unabhängig davon, ob Windows 95/98, NT, Unix, Macintosh, zugrundeliegt).
❑ Die Komponenten sollten beliebig anordnenbar sein
❑ Das Aussehen der Komponenten sollte sowohl rechnerunabh ängig einstellbar als auch
vom jeweiligen Rechner abhängig sein können.
Informatik I – c Guido Rößling
Vom Problem zum Programm – Aufgabenbeispiele : Grafische Komponenten
2.12
Grafische Komponenten
Zur besseren Anschaulichkeit stellt die Arbeitsgruppe ein Fenster mit vielen gängigen“
”
Komponenten zusammen:
Fenstertitel
Zeichnung
Schaltknöpfe
("CheckBoxes")
Druckknöpfe
Texte
Schieberegler
Abbildung 4: Ein typisches“ Fenster
”
Informatik I – c Guido Rößling
Vom Problem zum Programm – Aufgabenbeispiele : Grafische Komponenten
2.13
Grafische Komponenten
Folgende Komponenten fallen im Fenster auf bzw. sind anderweitig bekannt:
❑ Fenster
❑ Druckknöpfe und Auswahlknöpfe: 1 aus n“ oder m aus n“
”
”
❑ Texte
❑ Linien, Kreise u.ä.
❑ Grafiken
❑ Zeichen-/Anzeigeflächen
❑ Texteingaben
❑ Aktionsverwaltung, z.B. Mausklick
❑ Menüs: Pulldown, Popup-Menüs, Tool Tips“
”
❑ Listen
❑ Tabellen
❑ Zeichenfunktionalität (etwa Rubber Band“)
”
Informatik I – c Guido Rößling
Vom Problem zum Programm – Aufgabenbeispiele : Grafische Komponenten
2.14
Grafische Komponenten
Nach einem Brainstorming entstehen zur Modellierung der Inhalte folgende Kategorien oder
Klassen“ (von Klassifizierung):
”
❑ Anzeigeflächen
❑ Druckknöpfe und Regler
❑ Listen
❑ Tabellen
❑ Menüs
❑ Bilder
❑ Zeichnungen (Erstellung, Anzeige, Änderung)
❑ Texte (Eingabe, Anzeige, Änderung)
❑ Aktionsverwaltung: Menü anzeigen, Eintrag auswählen, Knopf drücken, Listenelement
wählen, Text eingeben / ändern, zeichnen, Grafik laden oder verschieben, Scrolling
Informatik I – c Guido Rößling
Vom Problem zum Programm – Aufgabenbeispiele : Grafische Komponenten
2.15
Grafische Komponenten
Man kann aber noch weiter gehen, indem man noch allgemeiner klassifiziert. In diesem Fall
erhält man die folgenden allgemeinen Klassen:
❑ Behälter (Container) – Fenster, Anzeige- und Zeichenflächen
❑ Komponenten (Components) – alle grafischen Elemente außer den Behältern
❑ Aktionsverarbeitung – Mausbewegung, Mausklicks und Tastaturdruck
Man erhält dann das Bild der nächsten Folie. Auf der Abbildung geben die Pfeile jeweils die
Beziehung ist Spezialfall oder Erweiterung von“ an: ein Fenster ist ein spezieller Beh älter.
”
Die Einteilung in verschiedene Klassen ist ein wichtiger Schritt bei der objektorientierten
Programmierung, mit der wir uns später noch genauer beschäftigen werden.
Auf die Angabe der noch fehlende Schritte (Entwurf eines L ösungsverfahrens, Nachweis der
Korrektheit, Analyse der Effizienz und Komplexität, Implementierung (Programmierung),
Test und Fehlerbeseitigung sowie Dokumentation) wird hier nicht weiter eingegangen.
Informatik I – c Guido Rößling
Vom Problem zum Programm – Aufgabenbeispiele : Grafische Komponenten
2.16
Grafische Komponenten
Aktionsverwaltung
Behälter
(Container)
Fenster
Zeichenfläche
Anzeigefläche
MenüAktion
ListenAktion
KnopfAktion
Komponente
Grafik
z.B.:
GIF
JPG
BMP
Knopf
Liste
Druckknopf
1 aus n
m aus n
Menü
Auswahl
ein
mehrere
Element(e)
Tabelle
Pulldown
Popup
ToolTips
Text
Zeichensatz
Fett, kursiv,...
Zeichengröße
Zeichenelement
z.B.
Punkt
Linie
Polygonzug
Kreisbogen
Abbildung 5: Klassenhierarchie für grafische Benutzerschnittstellen
Informatik I – c Guido Rößling
Vom Problem zum Programm – Aufgabenbeispiele : Grafische Komponenten
2.17
Algorithmen
Neben der Modellierung ist die Entwicklung von geeigneten Algorithmen entscheidend. Doch
was ist ein Algorithmus eigentlich?
Ein Algorithmus ist ein Verfahren mit einer präzisen, in einer genau festgelegten Sprache
abgefaßten Beschreibung unter Verwendung von effektiven (d.h. tats ächlich ausführbaren) Verarbeitungsschritten.
Informal heißt das: Jedes schematische Lösungsverfahren, das zur Lösung eines Problems
dient, ist ein Algorithmus.
Informatik I – c Guido Rößling
Vom Problem zum Programm – Algorithmen
2.18
Algorithmen
❑ Ein Rechner kann nur dann eine alphabetisch sortierte Kundenliste ausdrucken (vgl. auch
Telefonbuch), wenn ein Mensch das Verfahren zum Sortieren vorher haarklein“ beschrie”
ben hat.
❑ Beim Problem Verzinsung eines Kapitals nach Zins und Zinseszins“ nutzt weder ein
”
Taschenrechner noch ein Supercomputer, wenn man die Zinseszinsformel (=Algorithmus)
nicht kennt.
❑ Ohne Rezept kann man mit einem Ofen alleine keinen Kuchen backen.
Algorithmus genaue und eindeutige Handlungsanweisung
Beispiele: Bastelanleitung, Kochrezepte, Binden einer Krawatte, Musikpartitur, Millionär
”
werden in 30 Tagen“
Informatik I – c Guido Rößling
Vom Problem zum Programm – Algorithmen
2.19
Beispiel- Algorithmus“
”
Zwetschgenkuchen (Auszug)
1. Zutaten: 2. zunächst das Mehl in eine Schüssel sieben 3. Danach den restlichen Zucker, die restliche Milch, das Fett, die Eier und das Salz zugeben.
Alles gut verkneten und solange schlagen, bis sich der Teig vom Sch üsselrand löst und
Blasen wirft.
4. Den Teig zudecken und solange gehen lassen, bis er sich verdoppelt hat.
5. Währenddessen die Zwetschgen waschen, auf Küchenkrepp trocknen, der Länge nach
aufschneiden, entsteinen 6. 7. Falls ein Heißluftofen verwendet wird, bei
vorheizen Informatik I – c Guido Rößling
20 Minuten backen. Ansonsten Ofen auf
Vom Problem zum Programm – Algorithmen : Beispiel- Algorithmus“
”
2.20
Erkenntnisse und Fragen
❑ Handlungsanweisungen sind als schriftliche Texte nichts anderes als eine Folge von Buchstaben (Wörter, Sätze, ) mit einem gewissen“ Sinn.
”
❑ Wie genau und detailliert muß die Beschreibung sein?
☞ Was bedeutet eigentlich, z.B. in Kochrezepten, genau und“ – Reihenfolge
”
(kausal, zeitlich) oder parallele Ausführung?
❑ Was sind die elementaren Schritte, die ohne weitere Verfeinerung und Anweisung ausgeführt werden können?
☞ Kochrezepte haben mächtige Grundoperationen“ und erfordern ein umfang”
reiches Kontextwissen (anbräunen, dünsten, schmoren, )
❑ Offenbar gibt es für alle“ Algorithmen ähnliche Steueranweisungen:
”
☞ tue zuerst dies, dann das
☞ tue dies und das in beliebiger Reihenfolge oder sogar gleichzeitig
☞ wenn dann ansonsten
☞ tue etwas wiederholt solange bis ☞ tue obiges nochmals für das nächste Objekt
Informatik I – c Guido Rößling
Vom Problem zum Programm – Algorithmen : Erkenntnisse und Fragen
2.21
Definition
Schematisch ausführbare Vorschrift endlich beschrieben
☞ Text, Diagramm endlicher Länge
terminierend
☞ kommt bei jeder Ausführung nach endlich vielen Verarbeitungsvorschriften
zum Ende
finite Ressourcen
☞ zu jedem Zeitpunkt der Abarbeitung belegt der Algorithmus nur endlich viel Platz
präzise elementare Einzelschritte
☞ Alle Einzelaktionen müssen im Prinzip ausführbar sein und in ihrer Wirkung
und Aufeinanderfolge präzise festgelegt sein.
Informatik I – c Guido Rößling
Vom Problem zum Programm – Algorithmen : Definition
2.22
Eigenschaften
❑ Algorithmen sind auf eine Klasse von Problemen anwendbar, also i.a. auf eine unbegrenzte Anzahl von Einzelfällen.
❑ Für die Anzahl der Einzelschritte gibt es i.a. keine feste obere Schranke, die f ür alle Einzelfälle gilt.
❑ Oft gibt es für ein und das selbe Problem mehrere ganz unterschiedliche Algorithmen, die
das Problem auf eine jeweils andere Art und mit unterschiedlichem Aufwand l ösen.
❑ Algorithmen sind unabhängig von der Programmiersprache und dem Computertyp.
Informatik I – c Guido Rößling
Vom Problem zum Programm – Algorithmen : Eigenschaften
2.23
Formale Sprachbeschreibung
Folgende Fragen müssen für eine effektive Kommunikation geklärt werden:
❑ Welche Kommunikationsform ist zu wählen?
☞ mündlich,
☞ schriftlich,
☞ mimisch (z.B. Pantomime),
☞ gestisch (z.B. Gebärdensprache der Stummen),
☞ symbolisch (z.B. Mathematik, Comics und Icons)
❑ Welche Sprache soll verwendet werden?
☞ Natürliche“ Sprache (Deutsch, aber auch Esperanto),
”
☞ Künstliche Sprache (z.B. Mathematik),
☞ Programmiersprache (z.B. Java),
☞ Abfragesprachen (z.B. SQL für Datenbankanfragen)
Informatik I – c Guido Rößling
Formale Sprachbeschreibung – Motivation
3.1
Formale Sprachbeschreibung
Unmittelbare Folgefragen:
❑ In welcher Sprachform wird kommuniziert?
☞ Telegrammstil,
☞ Umgangssprache,
☞ Schriftsprache (etwa Oxford English),
☞ Amts- und Behördensprache,
☞ Lyrik, evtl. gereimt,
☞ Dialekt
❑ Wie werden – bei Schriftform – die Sätze notiert?
☞ Lateinische, kyrillische, chinesische, koreanische, arabische, Schriftzeichen?
☞ Welche Größe hat die Trägermenge, z.B. das lateinische Alphabet?
Von den Buchstaben des lateinischen Alphabets verwendet Englisch alle 26, Deutsch
zusätzlich noch vier Umlaute. Gälisch hingegen verwendet nur 18 Buchstaben Informatik I – c Guido Rößling
Formale Sprachbeschreibung – Motivation
3.2
Formale Sprachbeschreibung
Es muß daher eine (meist informelle) Einigung über die folgenden Punkte erzielt werden:
❑ Kommunikationsform, z.B. schriftlich,
❑ Verwendete Sprache, z.B. Deutsch,
❑ Sprachform, z.B. Umgangssprache
❑ Schriftzeichen, z.B. lateinische Buchstaben mit deutschen Umlauten,
❑ Notation, z.B. Fließtext, alte Rechtschreibung.
Bei der Kommunikation mit dem Computer muß dieser über Regeln verfügen, mit denen
er korrekte Sätze erzeugen sowie überprüfen kann. Menschen lernen diese Regeln meist an
Beispielen, haben also eine informelle Grammatik“ im Kopf.
”
☞ Ist der Satz Der 3. Oktober ein Feiertag ist“ korrekt?
”
Warum, bzw. warum nicht?
Informatik I – c Guido Rößling
Formale Sprachbeschreibung – Motivation
3.3
Formale Sprachbeschreibung
Diese Punkte führen direkt zur Frage, wie die Mensch-Rechner- bzw. Rechner-RechnerKommunikation formalisiert werden kann.
Um angeben zu können, wie die Kommunikation zwischen dem Geldautomat und dem Zentralserver des Bankkonsortiums erfolgen soll, muß definiert werden, welche Daten in welcher Reihenfolge auszutauschen sind.
☞ Festlegen eines Formats für den Austausch von Nachrichten, das angibt, wie
Nachrichten zusammenzusetzen bzw. zu interpretieren sind.
So muß jede Nachricht etwa die folgenden Informationen enthalten:
❑ Wer ist der Adressat der Nachricht (Geldautomat, Zentralrechner, Bankrechner, )?
❑ Wer ist der Urheber der Nachricht (Geldautomat, Zentralrechner oder Bankrechner)?
❑ Welche Art von Aktion ist betroffen (Auszahlung, Kontoauszug, )?
❑ Was ist der Inhalt der Nachricht (ggf. mit weiterer Unterteilung)?
Um diese Inhalte zu charakterisieren, wird eine formale Notation ben ötigt.
Informatik I – c Guido Rößling
Formale Sprachbeschreibung – Motivation
3.4
Verarbeitung von Eingabedaten durch den Computer
Damit der Computer Eingaben verarbeiten kann, führt er üblicherweise folgende Schritte aus:
Lexikalische Analyse
Zerlegen der (für den Computer) unstrukturierten Eingabe in Einzelkomponenten, sogenannte
Tokens.
Ein typisches Token ist Zahl und steht für Eingaben wie 0, 4711, -123.3231.
Syntaktische Analyse
Anwenden von Regeln, welche Bedeutung bestimmte Anordnungen von Tokens haben.
Eine solche Regel könnte etwa lauten (in informeller Schreibweise)
Addition: Zahl + Zahl
und besagt dann, daß die Abfolge Zahl, +, Zahl“ als Addition zu verstehen ist.
”
Informatik I – c Guido Rößling
Formale Sprachbeschreibung – Verarbeitung von Eingabedaten
3.5
Verarbeitung von Eingabedaten durch den Computer
Semantische Analyse
Nach der syntaktischen Analyse ist die Syntax der Eingabe erfaßt, und eventuelle Syntaxfehler
wurden gemeldet.
Nun wird der syntaktisch korrekten Eingabe ein Inhalt zugeordnet und überprüft, ob der Satz
Sinn ergibt.
So ist der Satz
Der 3. Oktober ißt ein Feiertag“
”
syntaktisch korrekt, semantisch aber nicht.
Auswertung / Ausführung
Gab es auch in der semantischen Analyse keine Fehler, ist die Eingabe korrekt und kann nun
ausgewertet bzw. ausgeführt werden.
Im folgenden soll betrachtet werden, wie die Regeln f ür die syntaktische Analyse aufgestellt
werden können.
Informatik I – c Guido Rößling
Formale Sprachbeschreibung – Verarbeitung von Eingabedaten
3.6
Definition von Sprachen
Jede Sprache besteht mindestens aus den folgenden Teilen:
❑ dem Alphabet der verwendeten Zeichen - evtl. inklusive von ganzen Worten,
❑ der Syntax, die die Struktur von Sätzen der Sprache beschreibt;
❑ der Semantik, die den Sätzen eine Bedeutung zuordnet, sowie
❑ einem Regelsystem, das angibt, wie man aus syntaktisch korrekten Sätzen neue syntaktisch
korrekte Sätze erzeugen kann.
Ein einfaches Beispiel aus den natürlichen Sprachen ist etwa die Syntaxregel SPO“ für die
”
Wortreihenfolge in englischen Sätzen (Subjekt, Prädikat, Objekt).
Erst die Semantik gibt an, ob ein syntaktisch wohlgeformter Satz auch semantisch (inhaltlich)
wohlgeformt ist:
"0# ein Feiertag
Der 3. !"Oktober# !ißt
!"
# 0!"#
$%'&)(+*-,/.
1325684 7/9 , 6 .
:;&)(+*-,/.
1 %=<,/.
Syntaktisch ist dieser Satz korrekt; semantisch hingegen nicht.
Informatik I – c Guido Rößling
Formale Sprachbeschreibung – Definition von Sprachen
3.7
Definition von Sprachen
Prinzipiell läßt sich eine (Programmier-)Sprache in die folgenden Bestandteile zerlegen:
❑ Feste, reservierte Wörter (auch: Schlüsselwörter), etwa while, boolean;
❑ Konstante oder Literale, wie etwa Zahlen oder Zeichenkettenkonstante;
❑ Sonderzeichen, wie etwa >@?AB?CD?FE .
Aus den Sonderzeichen werden oft Operatoren oder Satzzeichen gebildet.
Teilweise werden auch zwei Zeichen zusammen als ein einziges, neues Zeichen interpretiert: ’ G ’ und ’ H ’ ergibt das Zeichen ’ GIH ’ bzw. ’ J ’.
❑ Namen für Variablen, Objekte, ❑ Kommentare, die durch besondere Zeichen oder Zeichenfolgen eingeleitet werden und bis
zum Ende der Zeile reichen bzw. zu einem entsprechenden Kommentarende“-Zeichen.
”
Informatik I – c Guido Rößling
Formale Sprachbeschreibung – Definition von Sprachen
3.8
Definition von Sprachen
Eine der gebräuchlichsten Formen zur Notation der Syntax von Programmiersprachen ist die
Backus-Naur Form, benannt nach ihren Entwicklern John Backus und Peter Naur, die sie
1959 im Kontext einer der ersten Programmiersprachen (erstmals) vorstellten.
Aus mehreren Gründen ist die Formalisierung von Sachverhalten oft nicht einfach:
❑ In der Umgangssprache wird oft relativ unpräzise gesprochen
❑ Es sind viele implizite Annahmen vorhanden
❑ Es wird massiv auf (unterstelltes) Wissen zurückgegriffen, etwa was natürliche Zahlen
sind, oder was die elementare Arithmetik umfaßt.
❑ Die Bedeutung einiger Wörter ist vom Kontext abhängig: etwa Bank“.
”
Zur Formalisierung müssen alle diese Aspekte sauber ausgearbeitet werden.
Die formale Notation kann jeder Leser auf die gleiche Weise interpretieren – unabh ängig
von sprachlichen oder kulturellen Barrieren.
Zusätzlich kann die Notation von Computern verarbeitet werden und damit erkannt werden,
ob eine gegebene Eingabe syntaktisch korrekt ist.
Informatik I – c Guido Rößling
Formale Sprachbeschreibung – Definition von Sprachen
3.9
Backus-Naur-Form (BNF)
❑ 1959 von John Backus und Peter Naur entwickelt für die Spezifikation von ALGOL-60
❑ Eine BNF definiert eine Grammatik zu einer gegebenen Sprache
❑ Es gibt mehrere verschiedene Notationsformen der Backus-Naur-Form
Aufbau:
Eine BNF besteht aus
❑ einer Menge von Zeichen oder Terminalen“, die Bestandteil des Alphabets sind.
”
Terminale können sowohl Einzelzeichen wie 1 als auch reservierte W örter wie etwa while
sein und werden i.a. nicht gesammelt angegeben.
❑ einer Menge von Hilfszeichen ( Nonterminale“), die zur Erzeugung von Worten
”
dienen, umgeben von K@G ,
❑ einem ausgezeichneten Hilfszeichen, dem Startsymbol
❑ sowie einer Menge von Regeln.
Informatik I – c Guido Rößling
Formale Sprachbeschreibung – BNF
3.10
Form der BNF-Regeln
Die Regeln der BNF haben die folgende Form:
K Nonterminal G
::= beliebige Folge von Terminalen und K Nonterminalen G
❑ Die rechte Regelseite kann auch aus einem einzelnen Nonterminal oder Terminal
bestehen:
K Null G
K Faktor G
::= 0
::= K Zahl G
❑ K A G ::= B“ ist zu lesen als A kann durch B ersetzt werden“, A steht für B“.
”
”
”
❑ B wird auch als Alternative für A bezeichnet.
❑ Die Ersetzung eines Nonterminals durch eine Alternative heißt Ableitungsschritt.
❑ Zusätzlich sind für eine komplette Grammatik anzugeben:
☞ Startsymbol,
☞ Grundmengen, d.h. Startsymbole anderer verwendeter Grammatiken ( Zahl“).
”
Informatik I – c Guido Rößling
Formale Sprachbeschreibung – BNF : Regelform
3.11
Form der BNF-Regeln
Unterschiedliche Regeln für das gleiche Nonterminal werden durch
L
“ getrennt.
”
Falls Ziffer, Zahl Nonterminale, 0, 1 Terminale sind, kann man daher f ür
K Zahl G
K Zahl G
K Ziffer G
K Ziffer G
::=
::=
::=
::=
K Ziffer G
K Ziffer G@K Zahl G
0
1
auch schreiben
K Zahl G
K Ziffer G
oder verkürzt
K Zahl G
K Ziffer G
::=
K Ziffer G
L
K Ziffer GMK Zahl G
::=
0
L
1
::= K Ziffer
G
L
::= 0 1
L
K Ziffer G@K Zahl G
Denkaufgabe: Was kann mit diesen Regeln erzeugt werden?
Informatik I – c Guido Rößling
Formale Sprachbeschreibung – BNF : Regelform
3.12
Darstellung von Ableitungen
Jede aus dem Startsymbol ableitbare Folge von Terminalen ohne Nonterminal wird als Wort
der Sprache bezeichnet. Jedes Wort ist automatisch ein syntaktisch korrektes Element der
Sprache!
Die Angabe der Ableitung eines Wortes
❑ zeigt die durchgeführte Reihenfolge der Ableitungsschritte.
Hieraus läßt sich auch die (implizite) Klammerung“ (etwa Punkt vor Strich“) ablesen.
”
”
❑ beweist, daß das Wort Teil der Sprache ist.
Zusätzlich kann mit Angabe von Ableitungen nachgewiesen werden, daß eine Sprache mehrdeutig ist, es also für ein Wort mehr als eine Ableitung (und damit Interpretation) gibt: im
Deutschen etwa Bank“.
”
Verwendungszweck von Ableitungen
❑ Erzeugen eines konkreten, gegebenen Wortes
In diesem Fall muß die richtige Regelwahl ggf. durch Probieren gefunden werden.
❑ Erzeugen eines beliebigen, gültigen Elements
Informatik I – c Guido Rößling
Formale Sprachbeschreibung – BNF : Ableitungen
3.13
Ableitungssequenz
Aufbau einer Ableitungssequenz
❑ Der erste Eintrag hat die Form K Startsymbol GON V oder K Startsymbol GONPK V G
Für V bzw. K V G ist dabei eine der Alternativen des Startsymbols einzusetzen.
❑ In jedem weiteren Ableitungsschritt wird nun ein Nonterminal des bisher erzeugen Wortes
durch eine seiner Alternativen ersetzt.
Hierzu wird einfach der Pfeil ( N ) angegeben, gefolgt von dem Wort, das durch Ersetzen
des Nonterminals durch seine Alternative entsteht.
Zur Verdeutlichung der Ersetzung kann das ersetzte Nonterminal unterstrichen werden.
❑ Die Ableitungssequenz ist beendet, wenn das Wort rechts des Pfeils keine Nonterminale
mehr enthält oder für die auftretenden Nonterminale keine Ersetzung mehr m öglich ist.
Im ersten Fall hat man ein Wort der Sprache erzeugt, im zweiten Fall handelt es sich um
kein Wort der Sprache.
Informatik I – c Guido Rößling
Formale Sprachbeschreibung – BNF : Ableitungssequenz
3.14
Ableitungssequenz
Beispiel
Erzeugen des Wortes 10“ der Grammatik für Binärzahlen (auf Seite 3.12):
”
L
K Zahl G
::= K Ziffer
G
K Ziffer G@K Zahl G
L
K Ziffer G ::= 0 1
K Zahl G
N
N
N
10
N
K Ziffer G@K Zahl G
1 K Zahl G
1 K Ziffer G
Ersetzen Startsymbol
Weitere Ableitung
Weitere Ableitung
letzter Schritt
❑ Das Wort 10“ enthält keine Nonterminale mehr. Da die Ableitung mit dem Startsymbol
”
K Zahl G begann, ist 10 also ein Wort der Sprache.
❑ 1 K Ziffer G ist kein Wort der Sprache, da es noch ein Nonterminal beinhaltet (analog
für 1 K Zahl G ).
❑ 2 ist ebenfalls kein Wort der Sprache, da das Terminal 2 nicht ableitbar ist.
Informatik I – c Guido Rößling
Formale Sprachbeschreibung – BNF : Ableitungssequenz
3.15
Ableitungsbaum
❑ Angabe der Ersetzung eines Nonterminals durch freie Wahl einer seiner Alternativen.
❑ Aufführung des Nonterminals in einer Zeile, die einzelnen Zeichen der Alternative
eine Zeile darunter.
❑ Zur besseren Übersicht werden Nonterminal und Alternative durch eine Linie verbunden.
❑ Diese Regeln gelten auch für das Startsymbol. Es steht immer in der ersten Zeile.
Im Extremfall entartet der Ableitungsbaum zu einer Liste.
Informatik I – c Guido Rößling
Formale Sprachbeschreibung – BNF : Ableitungsbaum
3.16
Ableitungsbaum
<Zahl>
<Ziffer>
<Zahl>
1
<Ziffer>
0
Abbildung 6: Ableitungsbaum für eine einfache Grammatik
Informatik I – c Guido Rößling
Formale Sprachbeschreibung – BNF : Ableitungsbaum
3.17
Natürliche Zahlen
Natürliche Zahlen sind wie folgt definiert:
❑ Jede Ziffer von 0 bis 9 ist eine natürliche Zahl
❑ Wenn Q eine natürliche Zahl ungleich 0 ist, sind auch Q
?RQ
??=QTS natürliche Zahlen
Diese Definition kann einfach in eine BNF umgesetzt werden:
Startsymbol:
natürlicheZahl
Grundmengen: (keine)
Regeln:
K natürlicheZahl G ::= K Ziffer G
L
K Ziffer ohne 0 G@K Restzahl G
K Ziffer G
K Restzahl G
::=
L
K Ziffer G
K Restzahl G
L
K Ziffer G
::= 0 L K Ziffer
ohne 0 G
L L L L L L L
::= 1 2 3 4 5 6 7 8 9
K Ziffer ohne 0 G
Tabelle 1: BNF für natürliche Zahlen
☞ Wozu dient das Nonterminal Restzahl“?
”
U
Informatik I – c Guido Rößling
Formale Sprachbeschreibung – BNF : Beispiele:
3.18
Ableitungen von natürlichen Zahlen
Hier die Ableitungsbäume für die natürlichen Zahlen 0, 9 und 42:
K natürlicheZahl G
K natürlicheZahl G
K Ziffer G
K Ziffer G
0
K natürlicheZahl G
K Ziffer ohne 0 G
K Ziffer ohne 0 G
4
K Restzahl G
K Ziffer G
K Ziffer ohne 0 G
9
2
Abbildung 7: Ableitungsbäume für natürliche Zahlen
Informatik I – c Guido Rößling
Formale Sprachbeschreibung – BNF : Beispiele:
U
3.19
Ganze Zahlen
Wir erweitern die BNF mit Startsymbol natürlicheZahl nun auf ganze Zahlen.
Ganze Zahlen sind alle natürlichen Zahlen sowie alle natürlichen Zahlen ohne die 0 mit
vorangestelltem -“.
”
Startsymbol:
ganzeZahl
Grundmengen: natürlicheZahl
Regeln:
K ganzeZahl G ::= K natürlicheZahl G
L
- K Ziffer ohne 0 G
L
- K Ziffer ohne 0 G@K Restzahl G
Tabelle 2: BNF für ganze Zahlen
☞ Was bewirkt die Ersetzung der obigen Regel durch
K ganzeZahl G
L
::= K natürlicheZahl G
Informatik I – c Guido Rößling
- K natürlicheZahl G
?
V
Formale Sprachbeschreibung – BNF : Beispiele:
3.20
Ganze Zahlen
Hier die Ableitungsbäume für die ganzen Zahlen 0, 42 und -42:
W
W
W
ganzeZahl X
W
natürlicheZahl X
W
Ziffer X
0
W
W
ganzeZahl X
W
Restzahl X
W
4
W
W
– W Ziffer ohne 0 X
natürlicheZahl X
Ziffer ohne 0 X
ganzeZahl X
4
W
W
Ziffer X
Ziffer ohne 0 X
Restzahl X
Ziffer X
Ziffer ohne 0 X
2
2
Abbildung 8: Ableitungsbäume für ganze Zahlen
Informatik I – c Guido Rößling
Formale Sprachbeschreibung – BNF : Beispiele:
V
3.21
Ein- und Mehrdeutigkeit
Eine wesentliche Frage ist, ob ein gegebenes Wort sich stets auf genau eine Weise ableiten
läßt, also eindeutig ist. Andernfalls läßt sich nicht ohne weiteres entscheiden, welche der
Bedeutungen die tatsächlich intendierte ist.
❑ Ein Wort heißt eindeutig, wenn es nur genau einen Ableitungsbaum zum Erzeugen des
Wortes gibt.
❑ Worte, zu denen es mehr als einen Ableitungsbaum gibt, heißen mehrdeutig.
❑ Grammatiken ohne mehrdeutige Worte heißen eindeutig.
❑ Grammatiken mit mindestens einem mehrdeutigen Wort heißen mehrdeutig.
Wichtig: Abstützung auf Ableitungsbaum, nicht Ableitungssequenz!
Bei der Ersetzung von mehr als einem Nonterminal ist die Reihenfolge hinsichtlich Eindeutigkeit unwesentlich.
Informatik I – c Guido Rößling
Formale Sprachbeschreibung – BNF : Ein- und Mehrdeutigkeit
3.22
Ein- und Mehrdeutigkeit
Betrachten Sie folgende Grammatiken:
Startsymbol:
Formel Y
Grundmengen: Bezeichner
Regeln:
Startsymbol:
Formel Z
Grundmengen: Bezeichner
Regeln:
W
W
W
W
::
\
Term X
::=
\ W
Faktor X
::=
W
Formel Y[X
W
W
W
Term X
W
Formel Y X + Term X
Faktor X
W
Term X^] Faktor X
Bezeichner X
Formel Z_X
W
W
::= Formel Z`X + Formel Z_X
\ W
W
\ W Formel Z`Xa] Formel Z`X
Bezeichner X
Tabelle 3: Ein- und mehrdeutige BNF für Teile der elementaren Arithmetik
☞ Wie kann die Formel
K Bezeichner G + K Bezeichner GbCMK Bezeichner G “
”
in den beiden Grammatiken erzeugt werden? Welcher Unterschied fällt auf?
Informatik I – c Guido Rößling
Formale Sprachbeschreibung – BNF : Ein- und Mehrdeutigkeit
3.23
Elementare Arithmetik
Gegeben sei folgende BNF mit Terminalzeichen + - C / ( ):
Startsymbol:
Formel
Grundmengen: ganzeZahl, Bezeichner
Regeln:
K Formel G ::= K Term G
L
K Formel G + K Term G
L
K Formel G – K Term G
K Term G
K Faktor G
::=
L
K Term GcCdK Faktor G
L
K Term G / K Faktor G
K Faktor G ::= K ganzeZahl G
L
K Bezeichner G
L
( K Formel G )
Tabelle 4: BNF für elementare Arithmetik
Beachten Sie die Ähnlichkeit zur BNF mit Startsymbol Formel der vorigen Folie.
Informatik I – c Guido Rößling
Formale Sprachbeschreibung – BNF für elementare Arithmetik
3.24
Erzeugte Sprache der Grammatik
Welche Eigenschaften hat die BNF der letzten Seite?
❑ Alle mathematischen Ausdrücke mit ganzen Zahlen über den vier Grundoperationen sind
erzeugbar
❑ Es lassen sich nur syntaktisch korrekte Ausdrücke erzeugen
❑ Die BNF beschreibt nur eine Untermenge der mathematischen Ausdr ücke, da zahlreiche
andere Operationen fehlen
❑ Durch die Verwendung mehrerer Nonterminale wird die Einhaltung der Operatorprioritäten gesichert:
a + b C c wird interpretiert als a + (b C c).
❑ Die verwendete Grammatik ist eindeutig.
Informatik I – c Guido Rößling
Formale Sprachbeschreibung – BNF für elementare Arithmetik
3.25
Syntaxdiagramme
Eine alternative gebräuchliche Form der Darstellung von Regeln sind die Syntaxdiagramme.
Sie haben folgenden Aufbau:
❑ Das Nonterminal auf der linken Regelseite wird über die Darstellung gesetzt.
❑ Nonterminale werden in ein rechteckiges Kästchen gesetzt.
❑ Terminale werden in ein rundes Kästchen gesetzt.
❑ Die einzelnen Kästchen werden durch Pfeile verbunden, die die Leserichtung“ angeben.
”
❑ Pfeile können sich aufspalten (Alternativen) oder zusammenlaufen (Ende einer Alternative).
❑ Es führt stets genau ein Pfeil in eine Regel hinein und ein Pfeil aus ihr heraus.
Informatik I – c Guido Rößling
Formale Sprachbeschreibung – Syntaxdiagramme
3.26
Syntaxdiagramme
Eine Ableitung in einem Syntaxdiagramm wird wie folgt erzeugt:
❑ Starte mit dem Diagramm für das Startsymbol.
❑ Folge den Pfeilen; wähle bei Abzweigungen eine beliebige Richtung.
❑ Jedes Terminal kann direkt aufgeschrieben werden.
❑ Jedes Nonterminal muß durch eine mögliche Ableitung ersetzt werden (weiter beim
ersten Schritt, wobei das Nonterminal das Startsymbol“ ist).
”
Formel:
Term:
Faktor:
ganzeZahl
Faktor
Term
Formel
+
Term
Term
*
Faktor
Bezeichner
Formel
-
Term
Term
/
Faktor
(
Formel
)
Abbildung 9: Syntaxdiagramm zur BNF auf Seite 3.24
Informatik I – c Guido Rößling
Formale Sprachbeschreibung – Syntaxdiagramme
3.27
Syntaxdiagramme
Ziffer_ohne_0:
ganzeZahl:
natürlicheZahl
-
1
Ziffer_ohne_0
Restzahl
2
3
natürlicheZahl:
4
Ziffer
5
Ziffer_ohne_0
Restzahl
6
7
Restzahl:
Ziffer:
8
Ziffer
Restzahl
0
9
Ziffer_ohne_0
Abbildung 10: Syntaxdiagramm für ganze Zahlen
Informatik I – c Guido Rößling
Formale Sprachbeschreibung – Syntaxdiagramme
3.28
Zusammenfassung
❑ Für reibungslose Kommunikation müssen einige Punkte geklärt sein (s. auf Seite 3.1).
❑ Mit Hilfe der BNF können die Grammatiken von Sprachen notiert werden.
❑ Die BNF unterstützt die Abbildung von Prioritäten und Präzedenzen.
❑ Ableitungsbäume und -sequenzen dienen
☞ zum Nachweis, daß ein Wort Bestandteil der Sprache ist
☞ sowie zur Angabe der genauen Ableitung des Wortes.
❑ Die meisten BNF-Grammatiken sind rekursiv.
❑ Anstatt der BNF werden teilweise Syntaxdiagramme verwendet.
Informatik I – c Guido Rößling
Formale Sprachbeschreibung – Zusammenfassung
3.29
Vergleich der Darstellungen
Merkmal
Reihenfolge Ableitungsschritte erkennbar
Transparenz der Ersetzungen
Bindungsregeln offenkundig
Geeignet für formale Beweise
Übersichtlichkeit
Fehleranfälligkeit der Ersetzungen
Platzbedarf
Ablesen des erzeugten Worts
Ableitungssequenz
ja
Ableitungsbaum
nein
gering
nein
ja
wenig
hoch
gering
letztes Sequenzelement
groß
ja
eingeschränkt
hoch
gering
hoch
Alle Terminalzeichen im
Ableitungsbaum, gelesen
von links nach rechts
Nachweis, daß ein Wort Bestandteil der Sprache ist: wahlweise durch
❑ Angabe der Ableitungssequenz des Worts
❑ Angabe des Ableitungsbaums des Worts
Informatik I – c Guido Rößling
Formale Sprachbeschreibung – Zusammenfassung : Vergleich der Ableitungsarten
3.30
Motivation der Logik
Logik wird u. a. benötigt für ❑ Mathematische Beweise
❑ Formulieren von Aussagen oder Behauptungen
❑ Schlußfolgerungen
❑ allgemeine, eindeutige Interpretation von Aussagen
Logik wird von Menschen ständig eingesetzt, oftmals ohne sich dessen bewußt zu sein.
Die Logik wird unterteilt in
❑ Aussagenlogik: Lehre von dem Aufbau und der Interpretation von Aussagen
❑ Prädikatenlogik: Einbettung von logischen Funktionen sowie Variablen mit Wertebereich
Informatik I – c Guido Rößling
Logik – Motivation
4.1
Geschichte der Aussagenlogik
❑ Ursprung im Organon (ca. 330 v. Chr.) von Aristoteles (384-322 v. Chr.)
Beinhaltet
☞ Kategorien (Lehre von Klassen von Dingen),
☞ Urteilslehre,
☞ Analytische Untersuchungen (Regeln für gültige Schlußfolgerungen) und
☞ Topische Untersuchungen (Leitsätze für Beweisen oder Widerlegen von Aussagen).
❑ Weiterführung durch Schule der Stoiker (ca. 300 v. Chr.) mit Einf ührung von Variablen
für Aussagen und Aufbau von Wahrheitstabellen.
❑ Mittelalter: Weiterführung u.a. durch Wilhelm von Occam (ca. 1330) und Melanchthon
(ca. 1547).
Insbesondere Einschränkungen von Widerspruchsaussagen aus theologischen Gr ünden.
❑ Neuzeit: Leibniz (um 1700), de Morgan (ca. 1850), Russell/Whitehead (1910)
Informatik I – c Guido Rößling
Logik – Aussagenlogik : Geschichte
4.2
Beispiele für Logik
Oi
❑ Mathematik: Äquivalenzumformungen, etwa eIfghH
gjHlk
Äquivalenzumformungen stellen die Behauptung auf beide Formeln sind äquivalent“.
”
i
darf nur dann gesetzt werden, wenn diese Aussage zutrifft.
Das Äquivalenzzeichen“
”
❑ Aussagen: Heute ist Sonntag.
Heute ist Donnerstag und morgen ist Montag.
❑ Schlußfolgerungen: Wenn es regnet, (dann) wird die Straße naß.
❑ Interpretation von Aussagen:
☞ Sind diese Aussagen wahr oder falsch?
☞ Wovon hängt die Interpretation der Aussage ab?
Informatik I – c Guido Rößling
Logik – Aussagenlogik : Beispiele
4.3
Wozu ist die Logik notwendig?
In den meisten Sprachen sind folgende Problemfelder enthalten:
❑ Mehrdeutige Worte: etwa Bank
❑ Konstruktion widersprüchlicher Aussagen:
Dieser Satz ist falsch.
❑ implizite Verwendung (vermeintlich) feststehender Begriffe und Konventionen.
(Nur) durch logische, sprachunabhängige Regeln läßt sich der Wahrheitsgehalt einer Aussage
bewerten.
☞ Insbesondere in der Mathematik ist es zwingend erforderlich, daß eine gegebene
Aussage von jedem Leser auf die gleiche, eindeutige Art interpretiert wird.
In der Informatik sollten die Aussagen zusätzlich auch vom Computer interpretierbar sein –
dazu wird eine eindeutige Notation und Interpretation ben ötigt, ähnlich wie bei der formalen
Sprachbeschreibung im letzten Abschnitt.
Informatik I – c Guido Rößling
Logik – Aussagenlogik : Beispiele
4.4
Grundbegriffe der Aussagenlogik
❑ Aussagen sind Sätze – mathematisch-logisch oder in natürlicher Sprache –, die wahr oder
falsch sein können.
❑ Aussagen können Variablen beinhalten.
x G 5 ist eine Aussage, deren Wahrheitswert vom Wert von x abhängt.
❑ Eine Aussage ist erfüllt, wenn sie bei einer konkreten Einsetzung aller auftretenden Variablen wahr ist.
Folglich ist die obige Aussage x G 5 beispielsweise für x = 6 erfüllt.
❑ Eine Aussage heißt erfüllbar, wenn es (mindestens) eine Einsetzung aller auftretenden
Variablen gibt, bei der sie erfüllt ist.
Die Aussage x G 5 ist erfüllbar, da sie z.B. für x = 6 erfüllt ist.
❑ Eine Aussage heißt allgemeingültig, wenn sie immer wahr ist, d.h. bei jeder Ersetzung der
Variablen.
Die Aussage x K x+1 ist allgemeingültig.
Informatik I – c Guido Rößling
Logik – Aussagenlogik : Grundbegriffe
4.5
Junktoren und Atomare Aussagen
Im folgenden stehen A und B jeweils für eine Aussage.
Junktoren“ (lat.: Zusammenfügende“) verknüpfen Aussagen miteinander. Es gibt folgende
”
”
Grundjunktoren:
Symbol
m A
An B
Ao B
AN B
Ap B
Name
Negation
Konjunktion
Disjunktion
Implikation
Äquivalenz
Leseweise
nicht A
A und B
A oder B
A impliziert B
A äquivalent B
Tabelle 5: Leseweise der Junktoren
Eine atomare Aussage beinhaltet keinen einzigen Junktor.
☞
Heute ist Freitag“ ist daher eine atomare Aussage, Gestern war
”
”
nicht Freitag“ hingegen nicht (warum?).
Informatik I – c Guido Rößling
Logik – Aussagenlogik : Junktoren
4.6
Wahrheitstabelle der Junktoren
Im folgenden wird wahr“ stets mit T“ (für englisch true“), falsch“ mit F“ für false“
”
”
”
”
”
”
abgekürzt.
Die Wahrheitstabellen sind wie folgt zu lesen:
1. Wahl der Zeile, die die gewünschte Belegung der Variablen bzw. Teilaussagen enthält
2. Nachsehen des Wahrheitswerts des Ergebnisses in der entsprechenden Spalte der Wahrheitstabelle
A
F
F
T
T
B m A An B Ao B AN B Ap B
F T
F
F
T
T
T T
F
T
T
F
F F
F
T
F
F
T F
T
T
T
T
Tabelle 6: Wahrheitstabelle der Junktoren
Informatik I – c Guido Rößling
Logik – Aussagenlogik : Junktoren
4.7
Faustregeln zur Interpretation
❑ Negation: m A ist nur dann erfüllt, wenn A nicht erfüllt ist.
Wie der Name schon sagt, wird bei der Negation der Wahrheitswert umgedreht (negiert).
❑ Konjunktion: A n
❑ Disjunktion: A o
B ist nur dann erfüllt, wenn sowohl A als auch B erfüllt sind.
B ist erfüllt, wenn wenigstens eine der beiden Teilaussagen erf üllt ist.
B ist erfüllt, wenn (A nicht erfüllt ist) oder (sowohl A als auch B
❑ Implikation: A N
erfüllt sind).
Gedankenstütze: Aus etwas Falschem darf man alles schließen; aus
”
etwas Wahrem muß etwas Wahres folgen.“
❑ Äquivalenz: A p
B ist erfüllt, wenn A und B den gleichen Wahrheitswert besitzen, d.h.
beide erfüllt oder beide nicht erfüllt sind.
Informatik I – c Guido Rößling
Logik – Aussagenlogik : Junktoren
4.8
Unterschiede zur Umgangssprache
An folgenden Beispielen weicht z.B. Deutsch stark von der Logik ab:
❑ Negation: verneinte Fragen sowie , nicht wahr?“
”
❑ Konjunktion: Aufzählung oder Zusammenfügung von Sätzen.
Vielfach mit temporaler oder kausaler Bedeutung: und (dann erst, daraufhin, deshalb)“
”
– Sie wurde krank und ging (anschließend) zum Arzt“.
”
❑ Disjunktion: dient oft als (entweder) oder“: Ja oder Nein?“
”
”
❑ Implikation: Die Interpretation ex falsum quodlibet“ ( aus etwas falschem darf alles
”
”
gefolgert werden“) wird selten verwendet.
Vielfach dient die Implikation in der Umgangssprache eher als Äquivalenz.
❑ Äquivalenz: Fast ausschließlich für gleichbedeutende Aussagen verwendet, die sich ineinander überführen lassen (vgl. Äquivalenzumformungen in der Mathematik!), nicht als
Gleichheit der Wahrheitswerte von (möglicherweise) unzusammenhängenden Aussagen.
Logisch ist 10 G 5 p qrJ 3“ wahr, sprachlich aber seltsam bis unverständlich.
”
Informatik I – c Guido Rößling
Logik – Aussagenlogik : Unterschiede zu Deutsch
4.9
Backus-Naur-Form für die Aussagenlogik
Startsymbol: Aussage
Grundmengen: Bezeichner
Regeln:
K Aussage G
K Impl Ausdruck G
K Ausdruck G
K Term G
K Faktor G
::=
K Impl Ausdruck G
L
K Aussage Gsp K Impl Ausdruck G
K Ausdruck G
::=
L
K Impl Ausdruck GcN K Ausdruck G
K Term G
::=
L
K Ausdruck GsotK Term G
K Faktor G
::=
L
K Term GunvK Faktor G
m
K Faktor G
::=
L
( K Aussage
G )
L
L
L
K Bezeichner G
T
F
Tabelle 7: Backus-Naur-Form für die Aussagenlogik
Informatik I – c Guido Rößling
Logik – Aussagenlogik : Backus-Naur-Form
4.10
Syntaxdiagramm für die Aussagenlogik
Impl_Aussage:
Aussage:
Impl_Ausdruck
Aussage
Ausdruck:
Ausdruck
Impl_Ausdruck
Term:
Term
Ausdruck
Term
Faktor
Faktor:
Faktor
(
Aussage
)
T
F
Bezeichner
Abbildung 11: Syntaxdiagramm für Aussagenlogik
Informatik I – c Guido Rößling
Logik – Aussagenlogik : Backus-Naur-Form
4.11
Syntaxdiagramm für die Aussagenlogik
❑ Die Prioritäten der Operatoren können aus der Grammatik abgelesen werden:
je höher die Priorität, desto tiefer im Ableitungsbaum
❑ Alle Operatoren sind linksassoziativ:
a op b op c (( a op b ) op c )
für jeden Operator op außer m “.
”
bedeutet dabei inhaltlich gleichbedeutend“ und ist von p
”
ren.
verschieden zu interpretie-
❑ Die Grammatik ist eindeutig durch die Schachtelung der Ableitungsm öglichkeiten.
❑ Denkaufgabe: Wie ist die folgende Aussage zu klammern?
mxw nzy{oz|}N
Informatik I – c Guido Rößling
~p
€
Logik – Aussagenlogik : Backus-Naur-Form
4.12
Ableitungsbaum für mw nzy‚or|}N
~ƒp
€
<Aussage>
<Aussage>
<Impl_Ausdruck>
<Impl_Ausdruck>
<Ausdruck>
<Impl_Ausdruck>
<Ausdruck>
<Term>
<Ausdruck>
<Term>
<Faktor>
<Ausdruck>
<Term>
<Faktor>
<Bezeichner>
<Term>
<Faktor>
<Bezeichner>
e
<Term>
<Faktor>
<Faktor><Bezeichner>
<Bezeichner>
<Faktor>
d
c
b
<Bezeichner>
a
Abbildung 12: Interpretation von „†…ˆ‡O‰†ŠŒ‹Ž
Informatik I – c Guido Rößling
‚
Logik – Aussagenlogik : Backus-Naur-Form
‘“’•”–”–”_”–”—„˜…™š‡O‰/™šŠO‹/™›
™›
‘R™
4.13
Konversionsregeln
Konversionsregeln geben semantisch äquivalente Umformungen von Aussagen an.
œ œI œ ?
?
stehen im folgenden für beliebige Aussagen, ž
Nummer
œ œI
1
n
2
3
4
5
6
œ œ
o
œ p
œ n• œ o• œ o• œ n• m œ m œ m m œ
m œ o
o

œ 
I
œI
n
œ 
o
œI
n
œI
o
œŒ
n
œŒ
Konversion
œI
œ 
œI
œ
œ
œ
œ
m œ
m œ
œ ¢¡
œ ¡
œ ¢¡
œ ¢¡
¡
¡
¤¡
œ œ œ n
œ œ œI ¡
œ
n
œ  ¡
œ
o
œI ¡
n£ œI ¡
o£ œI
m
o
m œI
o
p
n
o
o
n
n
œ o
œ n
für wahr“ und Ÿ für falsch“.
”
”
Regelname
Kommutativ-Gesetz
Assoziativ-G.
œ R¡
œ R¡
Distributiv-G.
G. von De Morgan
G. der doppelten Negation
G. vom ausgeschlossenen Dritten
ž
Tabelle 8: Konversionsregeln 1-6
Informatik I – c Guido Rößling
Logik – Aussagenlogik : Konversionsregeln
4.14
Konversionsregeln
Nummer
„ ¥ Y Œ
¦
‡ ¥ Y
7
8
¥ Y  ¥ Z
¨
 ¥TZ
9
10
11
12
Konversion
’ §
’ „¦¥ Y ŠŒ¥ Z
’ ¥©Z
¥ Y  ¥ Z
’
¥ Y ŠO¥ Y
’
¨
¥«YªŠ
’
¥«YªŠO§
’
¥ Y ŠB”¬¥ Y ‡Œ¥ Z ™­’
¥ Y ‡O¥ Y
’
¨
¥«Yª‡
’
¥«Yª‡O§
’
¥«Yª‡B”¬¥“YªŠŒ¥©Z®™­’
¥«Y
’
¨
”—¥ Y 
¥ Y
¥ Z ™ª‡M”—¥ Z 
Regelname
G. vom Widerspruch
G. von der Implikation
¥ Y ™ G. v. d. Äquivalenz
G. der Oder-Vereinfachung
¥“Y
¥ Y
¥ Y
¥ Y
“
G. der Und-Vereinfachung
§
¥“Y
¥ Y
“
G. der Identität
Tabelle 9: Konversionsregeln 7-12
Die Gültigkeit der Konversionsregeln kann über Wertetabellen nachgewiesen werden.
Achtung: Konversionsregeln sind in beiden Richtungen anwendbar!
Informatik I – c Guido Rößling
Logik – Aussagenlogik : Konversionsregeln
4.15
Prädikatenlogik
Bisher sind nur Aussagen mit booleschen Variablen möglich (etwa a o b“).
”
Ziel:
❑ Erweiterung (ohne Angabe der BNF) auf mathematische logische Aussagen, insbesondere
(Un-)Gleichungen.
Damit werden u.a. Aussagen der Form ((a J b) n (a ¯H b)) N (a G b)“ möglich.
”
❑ Verwendung von Variablen mit eingeschränktem Wertebereich
❑ Einbettung von natürlichsprachlichen Aussagen durch ein die Aussage repräsentierendes
Symbol
❑ Aussagen der Form für alle Werte in einem Bereich gilt“ (Verallgemeinerung) bzw. für
”
”
mindestens einen Wert in einem Bereich gilt“ (Existenzaussage).
☞ Vereinfachte Notation komplexer Aussagen (mathematisch, logisch oder
natürlichsprachlich) mit einer oder mehreren Variablen; zusätzlich Ermöglichen von Aussagen mit Variablen über Bereiche.
Informatik I – c Guido Rößling
Logik – Prädikatenlogik
4.16
Prädikatenlogik
Funktion
<
Eine Funktion °²±0³
N
³
ordnet Q Variablen einen Funktionswert zu.
Bekannt sein sollten viele Funktionen auf natürlichen Zahlen, etwa
❑ ´¶µ w ~ · w ¸ : ³ N
❑ y'¹ºQ©»¶¼ : ³ N
³
³
mit ´µ w ª~ · w¸ [g ¡ Hlg
H g
mit y'¹ºQ©»¶¼£ –g“?R½ ¡ ¾


>

fg¿f½À>Á½
Prädikat
Prädikate sind
❑ Funktionen
❑ mit einer beliebigen (aber festen) Anzahl Variablen,
❑ deren Ergebnis immer ein Wahrheitswert aus der Menge ÂÄÃ
= Å F, T Æ ist.
❑ Ein Prädikat P wird beispielsweise
notiert als

Ç
Ç
: ³ N È mit –g“?R½ ¡ H¾gÉGʽ
Informatik I – c Guido Rößling
Logik – Prädikatenlogik : Prädikate
4.17
Aussagefähigkeit
Bisher darstellbar sind damit:
❑ beliebige Aussagen über Konstanten und booleschen Variablen (Tabelle 7 auf Seite 4.10)
❑ Aussagen mit mathematischen Aussagen (Gleichheit, Ungleichheit) (s. auf Seite 4.16)
❑ natürlichsprachliche Aussagen (s. auf Seite 4.16), sofern ihnen einen Wahrheitswert zugeordnet werden kann.
Natürlichsprachlichen Aussagen wird dabei stets ein Prädikat zugeordnet, etwa der Aussage x ist eine Primzahl“ ein Prädikat Prim(x) mit Prim(x): IN N IB mit
”
Ë
T falls x Primzahl ist
Prim(x) =
F sonst
❑ beliebige Aussagen mit Prädikaten (analog zu Bezeichnern zu betrachten).
Noch gewünscht: Aussagen über bestimmte Wertebereiche; Verallgemeinerungen und
Existenzaussagen.
Informatik I – c Guido Rößling
Logik – Prädikatenlogik : Aussagefähigkeit
4.18
Prädikatenlogische Quantoren
Startsymbol: Aussage (s. Aussagenlogik, BNF auf Seite 4.10)
Grundmengen: Bezeichner, Prädikat (nicht angegeben)
Regeln:
W
Aussage X
8Í Í¢Í
Faktor X
W
W
Quantor X
W
::= Impl Ausdruck X
\ W
W
Aussage X̐
Impl Ausdruck X
Í¢Í8Í (s. BNF auf Seite 4.10)
W
::= „
Quantor X
\ W
Quantor X
W
W
::= Î
Bezeichner X . ( Aussage X )
\ Ï W
W
Bezeichner X . ( Aussage X )
\
W
\ ( Aussage X )
T
\
F
\ W
\ W Bezeichner X
Prädikat X
Tabelle 10: BNF für die Prädikatenlogik
Informatik I – c Guido Rößling
Logik – Prädikatenlogik : Quantoren
4.19
Existenzquantor Ð
Interessant sind vielfach Existenzaussagen der Form Es gibt (mindestens) ein g , das das
Ç
”
Prädikat (bzw. eine Aussage Ñ ) erfüllt“.
Definition des Existenzquantors Ð :
ÐDg . (P(x)) bzw. Ð;g . (A)
ist zu lesen als
Ð
g
Ç
[g ¡+¡
Es gibt (mindestens) ein x für das gilt (P(x))
_yҚÓÔÕ `Ñ ¡+¡
(bzw. (A))
Wie sind daher die folgenden Aussagen zu lesen?

❑ ÐDgˆÕ –g
H
e ¡
❑ ÐDgˆÕ –gÖGce ¡
Informatik I – c Guido Rößling
Logik – Prädikatenlogik : Existenzquantor
×
4.20
Allquantor Ø
Zusätzlich sind Verallgemeinerungen wichtig: Alle g erfüllen das Prädikat
”
sage Ñ )“.
Ç
(bzw. die Aus-
Definition des Allquantors Ø :
ØÙg . (P(x)) bzw. ؎g . (A)
ist zu lesen als
Ø
g
Ç
–g ¡+¡
Für alle x gilt (P(x))
`yÒÓÚÛ `Ñ ¡+¡
(bzw. (A))
Wie sind daher die folgenden Aussagen zu lesen?

❑ ØÙgˆÕ –g
J
¡
❑ ØÙgˆÕ –gÖGce ¡
Informatik I – c Guido Rößling
Logik – Prädikatenlogik : Allquantor
Ü
4.21
Allquantor Ø
Bei beiden Quantoren kann zusätzlich der Bereich der Variablen eingeschränkt werden.
Die Bereichsangabe erfolgt durch einen Doppelpunkt und anschließend den Bereich in der
Form untere Grenze obere Grenze“ bzw. durch Angabe der Menge (etwa ³ ):
”

❑ ÐDgÖ±š³ÝÛ [g HßÞà  ¡
¡
¡
❑ ØÙgÖ±
Û fgÉG
❑ ØÙgÖ±
Û –g
K
(Bitte beachten Sie, daß Aussagen natürlich auch falsch sein können!)
In der BNF sind dazu folgende Regeln einzufügen:
K Quantor G
K Bereich G
Ð^K Bezeichner G : K Bereich G . ( K Aussage G )
::=
L
ØÖK Bezeichner G : K Bereich G . ( K Aussage G ) 
L
::=
notiert ³ “ etc.
³
³ÖášK natürlicheZahl G
L
”
K natürlicheZahl G âK natürlicheZahl G
Tabelle 11: BNF Prädikatenlogik mit beschränkten Quantoren
Informatik I – c Guido Rößling
Logik – Prädikatenlogik : Allquantor
Ü
4.22
Auswertung der Quantoren
Der Wahrheitswert einer Aussage mit Existenzquantor wird wie folgt bestimmt:
1. Anlegen Zwischenergebnis“ mit dem Anfangswert falsch“
”
”
2. Falls der Bereich der Variablen leer ist, bei Schritt 7 fortfahren.
3. Wähle und entferne einen beliebigen Wert aus dem Bereich.
4. Bestimmen des Wahrheitswerts der Aussage für den gewählten Wert.
5. Verknüpfen dieses Werts mit dem Zwischenergebnis durch o (=oder); Erhalten eines
neuen Zwischenergebnisses.
6. Fortfahren mit Schritt 3 (beachten: der Bereich schrumpft mit jedem Durchlauf um
ein Element!), falls Zwischenergebnis falsch“, sonst Schritt 7.
”
7. Das Zwischenergebnis“ ist das Endergebnis.
”
Der Existenzquantor ist damit ein oder“ auf allen Elementen eines Bereichs. Bei leeren Be”
reichen ist das Ergebnis falsch“.
”
Informatik I – c Guido Rößling
Logik – Prädikatenlogik : Auswertung der Quantoren
4.23
Auswertung der Quantoren
Der Wahrheitswert einer Aussage mit Allquantor wird wie folgt bestimmt:
1. Anlegen Zwischenergebnis“ mit dem Anfangswert wahr“
”
”
2. Falls der Bereich der Variablen leer ist, bei Schritt 7 fortfahren.
3. Wähle und entferne einen beliebigen Wert aus dem Bereich.
4. Bestimmen des Wahrheitswerts der Aussage für den gewählten Wert.
5. Verknüpfen dieses Werts mit dem Zwischenergebnis durch n (=und); Erhalten eines
neuen Zwischenergebnisses.
6. Fortfahren mit Schritt 3 (beachten: der Bereich schrumpft mit jedem Durchlauf um
ein Element!), falls Zwischenergebnis wahr“, sonst Schritt 7.
”
7. Das Zwischenergebnis“ ist das Endergebnis.
”
Der Allquantor ist damit ein und“ auf allen Elementen eines Bereichs. Bei leeren Bereichen
”
ist das Ergebnis wahr“.
”
Informatik I – c Guido Rößling
Logik – Prädikatenlogik : Auswertung der Quantoren
4.24
Auswertung der Quantoren
Bei unendlichen Mengen, etwa ³ , tritt ein Problem auf: Die Auswertung kann nicht f ür alle
Elemente erfolgen, da es unendlich viele gibt.
❑ Vereinfachung: Die Auswertung von Ð (bzw. Ø ) kann abgebrochen werden, sobald ein
Element gefunden wurde, das die Aussage wahr (bzw. falsch) werden läßt.
❑ Dennoch sind viele Aussagen nicht auswertbar: Ð;g
bestimmbar ohne Zusatzwissen aus der Arithmetik.
±ˆ³Àäãåg
H
æ¶ç
ist maschinell nicht
❑ In der Praxis werden Aussagen auf endliche Bereiche, etwa Intervalle der nat ürlichen
Zahlen, beschränkt.
Sonderform des Existenzquantors: der Einsquantor ÐÙè es gibt genau ein“ (Syntax wie Exi”
stenzquantor).
Interpretation:
ÐÙèég“ Informatik I – c Guido Rößling
Ç
–g ¡/¡ Ð;g“ Ç
Ç
–g ¡ n• Û؎½ê [½ ¡ p
Logik – Prädikatenlogik : Auswertung der Quantoren
gjH¾½ ¡+¡/¡
4.25
Motivation der Algorithmentheorie
Die Algorithmentheorie beschäftigt sich u.a. mit folgenden Gebieten:
❑ Berechenbarkeit von Funktionen: gibt es ein Programm, das f ür alle Eingaben die gegebene Funktion berechnet?
❑ Komplexität: In welcher Größenordnung befinden sich Zeit- bzw. Platzbedarf der Funktion?
❑ Rekursion: in vielen Fällen einfachere Darstellung von Funktionen
❑ Parallelität: Wie können Programme parallel ausgeführt werden? Welche Vorteile bietet
es? Wann ist es sinnvoll?
❑ Deterministische Algorithmen, Probabilitische Algorithmen und Heuristiken
❑ Korrektheit von Algorithmen
Je besser man die einzelnen theoretischen Grundlagen kennt, desto besser kann das Ergebnis
der Programmierung sein!
Es gibt nichts praktischeres als eine gute Theorie“ (Goethe) – außer dem Verst ändnis der
”
Theorie.
Informatik I – c Guido Rößling
Berechenbarkeit – Motivation
5.1
Motivation der Berechenbarkeitstheorie
Die Berechenbarkeitstheorie untersucht, ob ein Funktionsergebnis f ür alle, einige oder gar
keinen Parameter bestimmt werden kann.
Generelles Ziel der Berechenbarkeitstheorie ist es dabei,
❑ allgemeine Aussagen zu machen,
❑ unabhängig von der verwendeten Hardware,
❑ dem verwendeten Betriebssystem,
❑ sowie der Programmiersprache.
Aus diesem Grund kann nicht einfach in (beispielsweise) PASCAL argumentiert werden; es
wird eine allgemeine Grundlage für die Berechnung von Funktionen benötigt.
Informatik I – c Guido Rößling
Berechenbarkeit – Motivation
5.2
Berechenbarkeit
❑ Berechenbarkeit von Funktionen auf Zahlen oder Worten
Gibt es ein Programm, daß für alle (oder wenigstens eine eingeschränkte Menge) Eingaben die gegebene Funktion berechnet?
❑ Berechenbarkeit von Mengen von Worten
Ist eine gegebene Eingabe Element der Menge? Die Menge liegt dabei nicht als Aufz ählung
in Form einer Liste vor, sondern durch eine Beschreibung der Eigenschaften, die alle Elemente besitzen.
Es gibt dabei folgende Kategorien von Berechenbarkeit:
☞ Für jede Eingabe stoppt die Berechnung irgendwann und liefert als Ergebnis ja“ bzw.
”
nein“ ë
entscheidbar“
”
”
☞ Für jedes Element der Menge stoppt die Berechnung mit Ergebnis ja“. Bei allen ande”
ren Eingaben darf die Berechnung ggf. unendlich lange laufen
rekursiv aufzählbar“ oder semi-entscheidbar“
ë
”
”
☞ Die Berechnung erfüllt keine der beiden Bedingungen, kann also auf jeder Eingabe
nicht rekursiv aufzählbar“
unendlich lange laufen ë
”
Informatik I – c Guido Rößling
Berechenbarkeit – Begriffe
5.3
Berechenbarkeit
❑ Das Komplement einer Menge ì besteht aus allen Elementen der Grundmenge, die nicht
in der Menge ì enthalten sind.
Es wird als ì notiert: gÖí ì p gîí•
¯ ì
❑ Jede entscheidbare Menge ist automatisch auch rekursiv aufz ählbar.
☞ Stoppt die Berechnung für jede Eingabe, so stoppt sie insbesondere auch
für alle Elemente der Menge.
❑ Sind sowohl eine Menge ì als auch ihr Komplement ì rekursiv aufz ählbar, so ist M
(und damit auch ì ) entscheidbar.
☞ Idee: Programm A berechnet x í M“, Programm B x í ¯ M“. Da eine der beiden
”
”
Bedingungen erfüllt sein muß, wird eines der beiden Programme stoppen.
Daher wird für jede Eingabe entschieden, ob sie zur Menge gehört (Programm
A stoppt und akzeptiert) oder nicht (Programm B stoppt und akzeptiert).
❑ Das Komplement einer rekursiv aufzählbaren Menge, die aber nicht entscheidbar ist,
ist nicht einmal rekursiv aufzählbar.
Andernfalls wäre nämlich die Menge auch entscheidbar (s.o.).
Informatik I – c Guido Rößling
Berechenbarkeit – Begriffe
5.4
Maschinenmodelle
Es gibt mehrere verschiedene Maschinenmodelle; die wichtigsten sind:
❑ Turingmaschine, benannt nach Alan Turing (1912–1954), entwickelt 1936.
Eine genauere Beschreibung folgt.
❑ RAM (Register-Address Maschine)
Register zum Lesen und Schreiben; elementare Arithmetik sowie Test von Registerinhalten und goto“ (Sprunganweisung).
”
Die Anzahl der Register sowie die Größe der Zahlen ist unbegrenzt.
❑ sowie ï -rekursive Funktionen.
Ein mathematischer Funktionenkalkül mit wenigen Grundfunktionen und der Möglichkeit, aus bereits beschriebenen Funktionen neue zusammenzusetzen.
Informatik I – c Guido Rößling
Berechenbarkeit – Maschinenmodelle
5.5
Turingmaschinen
Prinzipiell besteht eine Turingmaschine aus folgenden Komponenten:
❑ Ein unendlich langes Band von Einzelzellen.
Jede Zelle enthält stets genau ein Zeichen aus dem Alphabet.
Der Anfangswert unbenutzter Felder ist ein Leerzeichen“ (oft B für Blank“).
”
”
❑ einer Menge von Zuständen (grob vergleichbar zu Programmzeilen),
❑ einem Startzustand,
❑ beliebig vielen akzeptierenden Endzuständen,
Endzustände dürfen dabei keine Befehle enthalten.
❑ einem Schreib-/Lesekopf auf dem Band,
❑ sowie einem Programm.
Informatik I – c Guido Rößling
Berechenbarkeit – Turingmaschine
5.6
Schematischer Aufbau
δ
q
0
q1
q
0
1
B
(q0,1,R)(q0,0,R)(q1,B,L)
(q1,0,L)(q1,1,L) (q2,B,R)
2
òó
Programm
δ
der
Turingmaschine
òó
òó
òó
òó
òó
ñ8ñ
Schreib-/Lesekopf
... B B B B 0 1 1 0 1 0 1 1 0 0 1 0 1 1 0 0 0 1 1 0 B B ...
ð
unendlich langes ð8
Band
Abbildung 13: Schematischer Aufbau einer Turingmaschine
Informatik I – c Guido Rößling
Berechenbarkeit – Turingmaschine : Schematischer Aufbau
5.7
Turingmaschinen-Programme
Generell haben Befehle des Turingmaschinen-Programms die folgende Form:
ô
`´ 9 ? w ¡ H
_´ ( ?5y , D)
õ ö–?÷õâø sind Zustände der Turingmaschine. ´ 9 ist dabei der Zustand beim Lesen des Zei❑Ž
chens, ´ der Zustand nach Ausführung des Befehls ( Folgezustand“)
”
❑ a, b sind Zeichen aus dem Alphabet. a ist dabei das Zeichen, das auf dem Band gelesen
wurde, b das zu schreibende Zeichen, das a ersetzt.
❑ D ist die Richtung, in die der Schreib-/Lesekopf nach Bearbeiten des Befehls zu bewegen
ist. Mögliche Werte sind L (=nach Links), R (=nach Rechts) und N (=nicht bewegen).
Die Turingmaschine kann also in einem Rechenschritt
❑ den Zustand wechseln zum Folgezustand,
❑ das gelesene Zeichen auf dem Band durch ein anderes ersetzen,
❑ und ggf. den Kopf um eine Zelle nach links oder rechts bewegen.
Informatik I – c Guido Rößling
Berechenbarkeit – Turingmaschine : Programme
5.8
Turingmaschinen-Programme
ô
_´ù , 0) = ( ´ù , 1, R)“
”
Dieser Befehl bewirkt folgendes, falls sich die Turingmaschine in Zustand ´ ù befindet und auf
der aktuellen Bandposition eine 0 steht:
Beispiel:
❑ Ersetzen der 0 durch eine 1
❑ Bewegen des Kopfes um ein Feld nach rechts auf dem Band
❑ Verbleiben in Zustand ´ ù
Der Befehl wird also solange ausgeführt, wie sich die Turingmaschine in Zustand ´¶ù befindet
und auf der aktuellen Bandposition eine 0 steht.
Ist eine der beiden Bedingungen verletzt, wird der Befehl nicht ausgeführt.
Informatik I – c Guido Rößling
Berechenbarkeit – Turingmaschine : Beispielbefehl
5.9
Programmausführung
Anfangs ist der aktuelle Zustand der Startzustand; der Schreib-/Lesekopf steht auf dem ersten Zeichen der Eingabe.
Nun werden der Reihe nach folgende Schritte ausgeführt:
1. Lese das Zeichen an der aktuellen Kopfposition
2. Falls im Programm für den aktuellen Zustand und das gelesene Zeichen kein Befehl vorliegt, gehe zu Schritt 6.
3. Ersetze das gelesene Zeichen durch das im Befehl vermerkte Zeichen
4. Wechsele den Zustand auf den im Befehl angegebenen Folgezustand
5. Bewege den Kopf ggf. nach links oder rechts und fahre mit Schritt 1 fort.
6. Stoppe die Auswertung.
Falls der aktuelle Zustand ein akzeptierender Endzustand ist, gilt die Berechnung als er”
folgreich“.
Alle Einträge auf dem Band von der Kopfposition bis zum ersten Leerzeichen werden als
Ergebnis interpretiert.
Informatik I – c Guido Rößling
Berechenbarkeit – Turingmaschine : Programmausführung
5.10
Beispiel zur Turingmaschine
Gesucht ist ein Turingmaschinenprogramm zum Invertieren einer Binärzahl, d.h. dem Vertauschen der Nullen und Einsen.
Zu beachten ist dabei, daß es für akzeptierende Endzustände keine Befehle und damit auch
keine weiteren Übergänge gibt.
Außerdem muß der Kopf am Ende auf dem ersten Zeichen des Ergebnisses stehen.
Idee:
1. Es werden zunächst alle Zeichen ersetzt, bis das erste Leerzeichen (als Signal Ende der
”
Eingabe“) erreicht wird.
Damit ist die Zahl invertiert; der Kopf steht hinter dem letzten Zeichen.
2. Es wird über alle Zeichen nach vorne gelaufen, bis das Leerzeichen vor dem ersten Zeichen erreicht wird und nach rechts gegangen.
Der Kopf steht nun auf dem ersten Zeichen der invertierten Zahl.
3. Wechsel in den akzeptierenden Endzustand.
Da keine Befehle vorliegen, stoppt die Turingmaschine.
Informatik I – c Guido Rößling
Berechenbarkeit – Turingmaschine : Beispiel
5.11
Beispiel zur Turingmaschine

❑ Zustände: Å0´ù?5´ ?÷´ Æ
❑ Startzustand: ´ù

❑ akzeptierende Endzustände: Å0´ Æ
Programm:
ô
0
1
B
Kommentar
´ù ( ´ù , 1, R) ( ´ù , 0, R) ( ´ , B, L) Invertieren der Zahlen; Zustandswechsel bei Eingabeende

( ´ , 0, L) ( ´ , 1, L) ( ´ , B, R) Zurücklaufen über die Eingabe bis zum Leerzeichen
´

(steht links vom ersten Zeichen) und Wechsel in ´

´
—
—
—
Stoppen der Bearbeitung; Kopf auf erstem Zeichen
des Ergebnisses
Tabelle 12: Turingmaschinen-Programm zum Invertieren von Binärzahlen
Denkaufgabe: Was passiert, wenn die Eingabe leer war, der Kopf also anfangs auf B steht?
Informatik I – c Guido Rößling
Berechenbarkeit – Turingmaschine : Beispiel
5.12
Church’sche These
Warum die aufwendige Programmierung einer Turingmaschine?
❑ Die Church’sche These sagt aus, daß alle (intuitiv) berechenbaren Funktionen ebenfalls
per Turingmaschine berechenbar sind.
❑ Um die Berechenbarkeit eines Problems nachzuweisen, muß also lediglich ein entsprechendes Turingmaschinenprogramm angegeben werden.
❑ Turingmaschinen sind äquivalent zu RAM, ï -rekursiven Funktionen und z.B. PASCAL.
❑ Um die Nicht-Berechenbarkeit eines Problems zu zeigen, muß ein formaler Beweis gef ührt
werden (wird hier nicht vertieft).
Turingmaschinen werden in allen Gebieten der Algorithmentheorie eingesetzt.
Eine wichtige Menge, die nicht entscheidbar, aber rekursiv aufz ählbar ist, ist das Halteproblem: gegeben ein Programm einer Turingmaschine und eine Eingabe. Stoppt die Maschine bei der Berechnung, oder läuft sie unendlich lange?
Damit kann ebenfalls nicht allgemein entschieden werden, ob ein gegebenes Programm einer beliebigen Programmiersprache sich in einer Endlosschleife befindet oder aber die
Berechnung noch abschließen wird.
Informatik I – c Guido Rößling
Berechenbarkeit – Church’sche These
5.13
Ergebnis
❑ Nicht alle mathematisch definierbaren Funktionen lassen sich maschinell berechnen(!)
❑ Es gibt Mengen, für die nicht allgemein entscheiden werden kann, ob ein gegebenes Element Teil der Menge ist oder nicht
❑ Für viele Mengen lassen sich aber wenigstens die Elemente der Menge aufz ählen.
❑ Typische Probleme bei nicht oder nur partiell berechenbaren Funktionen oder Mengen
sind
☞ unbeschränkte Suche über unendlichen Bereichen (insb. IN)
☞ Benutzung oder Voraussetzung von ebenfalls nicht berechenbaren Funktionen oder
Mengen
☞ Exponentielles Wachstum der Lösungen – ab einem gewissen Q wird (fast) unendlich
viel Platz für das Schreiben der Ausgaben benötigt.
Informatik I – c Guido Rößling
Berechenbarkeit – Ergebnis
5.14
Literatur zur Berechenbarkeit
❑ [Kre93a]
❑ [Hop88]
❑ [Dud93]
❑ [GZZZ95]
Informatik I – c Guido Rößling
Berechenbarkeit – Literatur
5.15
Aufwand von Algorithmen
Jede Operation eines Programms verursacht einen gewissen Aufwand:
❑ Algorithmen verbrauchen Rechenzeit,
❑ Datenstrukturen verbrauchen Speicher.
Der Verbrauch dieser Ressourcen soll möglichst minimal sein, d.h. es stellen sich folgende
Fragen:
❑ Wieviel Ressourcen verbraucht ein gegebener Lösungsansatz?
❑ Was ist der minimale Aufwand zur Lösung des Problems?
Dazu ist die Frage zu präzisieren: Ist die Rede vom besten, dem durchschnittlichen oder
dem aufwendigsten Fall?
Informatik I – c Guido Rößling
Komplexität – Motivation
6.1
Entwurfsüberlegungen
Folgende Fragen sollte man sich stellen, bevor man Datenstrukturen und Algorithmen entwickelt bzw. verwendet:
❑ Für welchen Zweck soll der Einsatz erfolgen?
❑ Welche Operationen werden unbedingt benötigt, welche hingegen nicht?
❑ Welche Operationen werden am häufigsten verwendet? Welche sind typisch?
❑ Mit welchem Aufwand ist bei den einzelnen Operationen zu rechnen?
Wir wollen nun die letzte Frage näher betrachten, da sie für die Entscheidung für oder gegen
bestimmte Datenstrukturen oder Algorithmen eine große Rolle spielen kann.
Informatik I – c Guido Rößling
Komplexität – Motivation
6.2
Begriffe
Folgende Begriffe werden bei der Aufwandsuntersuchung benutzt:
❑ Problemumfang Q : meist der Wert oder die Stellenanzahl der Eingabe
❑ Zeitaufwand: Abstraktion von konkreten Zeiten zu Größenordnungen
❑ Platzbedarf : konkrete Berechnung des Speicherbedarfs des Algorithmus
❑ günstigster, durchschnittlicher und ungünstigster Fall, z.B. bei Sortierung.
❑ Komplexität eines Algorithmus: asymptotischer Aufwand (für Q²N ú ) der Implementierung.
❑ Komplexität eines Problems: minimale Komplexität eines Algorithmus zur
Lösung des Problems
Informatik I – c Guido Rößling
Komplexität – Motivation
6.3
Motivation der Komplexitätsbetrachtung
Die Komplexität untersucht also folgende Fragen:
❑ Wieviel Rechenzeit wird für die Ausführung bei gegebener Eingabe in etwa benötigt?
❑ Wie ändert sich die Rechenzeit (größenordnungsmäßig) bei Vergrößerung der Eingabe?
❑ Wieviel Speicher wird für die Ausführung (in Abhängigkeit von der Eingabe) benötigt?
❑ Ist die Rechenzeit des Algorithmus noch zumutbar für große“ Eingaben?
”
Generell wird in der Komplexitätsabschätzung unterschieden nach
❑ (Turingmaschinen)-Zeitkomplexität
Hier wird nur eine sehr grobe, aber wichtige Unterscheidung gemacht.
❑ (Implementierungs-)Zeitkomplexität
Für eine konkrete Implementierung wird das asymptotische Verhalten bestimmt.
❑ Platzbedarf: Wieviel Speicher wird, abhängig von der Eingabe, benötigt?
Informatik I – c Guido Rößling
Komplexität – Motivation
6.4
Motivation
Die Komplexität mißt nicht konkrete Zeiten ( 1456 ms“), da diese u.a. abhängen von
”
❑ Prozessortyp und Taktrate,
❑ Betriebssystem, Arbeits- und ggf. virtuellem Speicher (Gr öße und Zugriffszeit),
❑ Entwicklungs- und Laufzeitumgebung,
❑ Compiler- oder Interpreterversion, Übersetzungsparameter und Optimierung,
❑ Buslast zum Zeitpunkt der Ausführung
❑ sowie Speicherfragmentierung.
Meßergebnisse in Sekunden etc. sind daher
❑ nur in Einzelfällen exakt reproduzierbar,
❑ sehr schwer auf andere Situation (gemäß der obigen Liste) übertragbar
❑ und daher von sehr geringer Aussagefähigkeit.
Informatik I – c Guido Rößling
Komplexität – Motivation
6.5
Nutzen
Wozu wird die Komplexität benötigt?
❑ Vergleichbarkeit von Algorithmen anhand ihres Aufwands
❑ Beurteilung, ob ein gegebener Algorithmus für ein Problem praktisch verwendbar ist
❑ Prognose, wie sich die Laufzeit im Verhältnis zur Problemgröße ändert
Ist der Algorithmus nur bis zu einer bestimmten Problemgr öße akzeptabel?
Im folgenden werden nur Funktionen auf natürlichen Zahlen betrachtet. Die Problemgröße
ist in der Regel der Wert des Parameters.
Auf die Betrachtung des Platz- bzw. Speicherbedarfs wird dabei im folgenden verzichtet.
Informatik I – c Guido Rößling
Komplexität – Motivation : Nutzen
6.6
Elementare Kosten
Zur Bestimmung der Komplexität wird zunächst die Anzahl der Rechenschritte bestimmt.
Dabei werden folgende Faktoren verwendet (etwas vereinfacht):
Operation
Anzahl Rechenschritte
elementare Arithmetik, Vergleich, 1
Wertzuweisung
Ein- und Ausgabe
1
Funktionsaufrufe
Komplexität der Funktion
logische Ausdrücke
gemäß den obigen Faktoren
Fallunterscheidung
Komplexität des logischen Ausdrucks
+ Maximum der Rechenschritte beider Zweige
zusammengesetzte Anweisung
Summe der Kosten der einzelnen Befehle
Schleifen
Falls ¼ Durchläufe:
Initialisierung
+ ¼¾û Komplexität des Schleifenkörpers
+ ¼¾û Komplexität des Weiterzählens
Tabelle 13: Faktoren für die Komplexität
Informatik I – c Guido Rößling
Komplexität – Elementare Kosten
6.7
Ein Beispiel
Wieviele Rechenschritte führt das auf Seite 6.9 angegebene Programmstück aus?
❑ Verwenden Sie die Faktoren von Folie auf Seite 6.7
❑ Faktoren hintereinander ausgeführter Befehle werden addiert
❑ Bei Schleifen wird die (maximale) Anzahl der Durchläufe mit den Kosten des Schleifenkörpers multipliziert
Informatik I – c Guido Rößling
Komplexität – Elementare Kosten : Beispiel
6.8
Ein Beispiel
ü
/ ]3]
] i s t P r i m t e s t e t , ob n prim i s t und l i e f e r t
] /
p u b l i c boolean i s t P r i m ( i n t n )
ü
boolean i s t P r i m = t r u e ;
i n t i =2 ;
W
if ( n 2)
return f a l s e ;
W
w h i l e ( i s t P r i m && i n )
if (( n % i ) == 0)
istPrim = false ;
i ++;
ý
ý
return i s t P r i m ;
Informatik I – c Guido Rößling
t r u e bzw . f a l s e .
/ / Default : Primzahl
/ / Zaehler fuer die S c h l e i f e
/ / Die k l e i n s t e P r i m z a h l i s t 2
/ / Bei e r s t e m T e i l e r a b b r e c h e n !
/ / F a l l s n%i ==0 , i s t n n i c h t prim .
/ / weitergehen
/ / Ergebnis z u r u e c k l i e f e r n
Komplexität – Elementare Kosten : Beispiel
6.9
Ein Beispiel
ü p u b l i c boolean i s t P r i m ( i n t n )
ü
boolean i s t P r i m = t r u e ;
i n t i =2 ;
W
if ( n 2 )
return f a l s e ;
W
w h i l e ( i s t P r i m && i n )
if (( n % i ) == 0 )
istPrim = false ;
i ++;
ý
ý
//
//
//
//
//
Wertzuweisung :
1
Wertzuweisung :
1
Vergleich :
1
Befehl :
( e n t f a e l l t , da Fkt . ende )
2 V e r g l e i c h e : ( nþ 2 ) ] ( 2
/ / Arithm . , Vergl . :
/ / Wertzuweisung :
/ / Wertzuweisung :
return i s t P r i m ;
/ / Befehl :
Insgesamt werden daher >
Rechenschritte ausgeführt.
>
>ÿ –QrA
¡
fš >
>
+ 2
+ 1
+ 1)
>
1
¡
>
= k >•à f –QrA
¡
= à fFQ A
Die Anzahl der auszuführenden Rechenschritte hängt hier also linear von Q ab.
Informatik I – c Guido Rößling
Komplexität – Elementare Kosten : Beispiel
6.10
O-Notation
Wie bereits erwähnt, interessiert nur das grundsätzliche Verhalten des Algorithmus für größer
werdende Eingaben.
Hierzu gibt es die O-Notation“, die eine Einteilung der Algorithmen in Gr ößenordnungen
”
erlaubt. Dabei wird von unwesentlichen Konstanten abstrahiert.
❑ Sei °“ –Q ¡ die Anzahl auszuführender Rechenschritte für den Algorithmus in Abhängigkeit
von der Problemgröße Q
❑ –Q ¡ sei eine von Q abhängige Funktion
❑ Man schreibt °ˆ [Q ¡ –Q ¡ Л| ÛØÙQ -°ˆ –Q ¡ | f –Q ¡/¡/¡
H àQÌA
In unserem Beispiel mit °ˆ –Q ¡ ß
kann man also beispielsweise |­Hßà und [Q ¡ H¾Q
wählen, denn ؎QxÛ `àQhA
àQ ¡
❑ Definition der O-Notation:
°ˆ –Q ¡ í^ – Q ¡+¡ p
Л|ù -Ðdù Û؎Qx –Q£Gdù N
°ˆ –Q ¡
|ù f
–Q ¡+¡+¡+¡
Gesprochen ab einem Wert Úù liegt die Komplexität von f unter der |ù -fachen Komple”
xität von g“ oder verkürzt: f liegt in der gleichen Größenordnung wie g“.
”
Informatik I – c Guido Rößling
Komplexität – O-Notation
6.11
Rechenbeispiele
í^ –Q ¡ , denn ØÙQ –QÁG
N ÞQhA
æ
¡ , denn ؎Qx –Q£Gcà@N k0Qa> æ ❑ f(n) = k0Q^
>
í
^
[
Q



¡
❑ f(n) = Q > 
Q A
í a –Q : ØÙQ3ãåQ•G
N Q £
> QrA
❑ f(n) = ÞQrA
ÞQ ¡ mit |ù{HÊÞ3?BùH
? [Q ¡ ¾
H Q
eQ ¡ mit
|ùHÊe3?BùHßà3? [ Q ¡ H¾Q


ç
¡
mit |ùH ? BùH ? [Q l
Q
H Q
Beachten Sie:
❑ Es kommt nicht auf den kleinstmöglichen Startwert Ô
ù an. Statt B
ùÉH
Beispiel hätte man auch ÚùH
wählen können.
à im zweiten
❑ Es kommt nicht auf die kleinstmögliche Konstante |ù an. Im zweiten Beispiel hätte man
wählen können.
statt | ù Hße genausogut | ù H
Die Konstante |ù ist nur ein Multiplikator für die Laufzeit, die unabhängig von der Problemgröße ist und daher für die Einteilung in Klassen vernachlässigt werden kann.
❑ Unter mehreren möglichen Komplexitätsklassen ist stets die kleinste zu wählen.
Q und somit ÞQÔA
í^ –Q ¡ , diese Aussage ist aber
So gilt zwar rechnerisch ÞQA
nicht konstruktiv und daher zu unterlassen.
<
❑ Faustregel: der höchste Exponent bzw. die höchste Basis ( ?5Þ
Informatik I – c Guido Rößling
<
etc.) dominiert.
Komplexität – Rechenbeispiele
6.12
Weitere Symbole
Die O-Notation“ geht auf den Zahlentheoretiker Edmund Landau (1877-1938) zur ück, das
”
O“ wird daher auch als Landau’sches Symbol“ bezeichnet.
”
”
+
¡
¡
a –Q bezeichnet dabei eine ganze Klasse von Funktionen; so liegen in ^ [Q ¡ alle Funktionen, die maximal linear mit Q wachsen.
Es gibt insgesamt drei verschiedene Symbole:
❑ °“ –Q ¡ ía –Q +¡ ¡ : “
° –Q ¡ wächst höchstens so schnell wie [Q ¡ “ (obere Schranke)
”
¡
+
¡
¡
❑ °“ –Q í­ –Q : °“ –Q ¡ wächst mindestens so schnell wie –Q ¡ “ (untere Schranke)
”
¡
+
¡
¡
❑ °“ –Q í@ –Q : °ˆ –Q ¡ wächst genauso schnell wie –Q ¡ “ (exakte Schranke)
”
Informatik I – c Guido Rößling
Komplexität – Rechenbeispiele
6.13
Weitere Symbole
c 2* g(n)
f(n)
c * g(n)
f(n)
f ε O(g)
f(n)
c 1* g(n)
c * g(n)
f ε Ω(g)
f ε Θ(g)
Abbildung 14: Schema von und Informatik I – c Guido Rößling
Komplexität – Rechenbeispiele
6.14
Komplexitätsklassen
Die folgende Tabelle enthält die wichtigsten Komplexitätsklassen:
Klasse
Leseweise
Die Rechenzeit ist unabhängig von der Problemgröße.
Die Rechenzeit wächst logarithmisch (zur Basis 2) mit
der Problemgröße.
Die Rechenzeit wächst linear mit der Problemgröße.
^ –Q ¡
¡
^ –QzfQ Die Rechenzeit wächst linear logarithmisch mit der
Problemgröße.

¡
^ –Q
Die Rechenzeit wächst quadratisch mit der Problemgröße.
Die Rechenzeit wächst kubisch mit der Problemgröße.
^ –Q < ¡
¡
^ Die Rechenzeit wächst exponentiell (zur Basis 2) mit
der Problemgröße.
^ ¡
^ Q ¡
Tabelle 14: Die wichtigsten Komplexitätsklassen
Informatik I – c Guido Rößling
Komplexität – Komplexitätsklassen
6.15
Beispiele zu den Komplexitätsklassen
a ¡
a xQ
a –Q
¡
¡
a –Q"Q
¡
Informatik I – c Guido Rößling
Tritt ein, wenn das Programm nur einmal linear durchlaufen wird, ohne
von der Problemgröße abzuhängen (d.h. auch ohne Schleifen über Q )
☞ konstante Laufzeit“
”
Die Rechenzeit wächst logarithmisch zur Problemgröße.
Häufig bei Zerlegung von Problemen in Teilprobleme und Berechnung
eines der Teilprobleme
Beispiel: Binäre Suche
Lineare Zunahme der Rechenzeit mit Q .
Typischer Vertreter sind Schleifen von ¹êRQ (¹K Q ) sowie alle Operationen, die jedes Element genau ! -mal referenzieren f ür ein von Q
unabhängiges ! .
Beispiel: Invertieren eines Bildes; Sequentielle Suche
Linear logarithmische Zunahme der Rechenzeit.
Typisch bei Zerlegung des Problems in Teilprobleme mit Bearbeitung
aller Teilprobleme.
Beispiel: Bessere Sortierverfahren, etwa Quicksort
Komplexität – Komplexitätsklassen : Beispiele
6.16
Beispiele zu den Komplexitätsklassen

^ –Q
^ –Q
^ ¡
¡
< ¡
^ –Qxè ¡
Quadratische Zunahme der Rechenzeit mit Q .
Typisch bei verschachtelten Schleifen.
Beispiel: Paarweiser Vergleich aller Elemente bei naheliegendem“
”
Sortierverfahren.
Kubische Zunahme der Rechenzeit mit Q .
Typisch bei dreifach verschachtelten Schleifen.
<
%
Beispiel: Matrixmultiplikation mit | 9$# ( H ', & w 9$# , f¶y , # (
Exponentielle Zunahme der Rechenzeit (zur Basis 2).
Typisch bei der erschöpfenden Suche in allen Kombinationen von Paaren oder Teilmengen.
Zunahme gemäß Fakultätsfunktion.
Tritt bei der Bildung aller Permutationen auf.
Auf den beiden nächsten Folien sind Diagramme für das Wachstum dieser Funktionen angegeben.
Informatik I – c Guido Rößling
Komplexität – Komplexitätsklassen : Beispiele
6.17
Verhalten Grundfunktionen
Verhalten fuer n=1,...,5
140
1
log(n)
n
n*log(n)
n^2
n^3
2^n
120
n^3
100
f(n)
80
60
40
2^n
n^2
n*log(n)
n
20
0
1
2
3
n
4
5
Abbildung 15: Verhalten der Funktionen für n=1, Í8Í¢Í ,5
Informatik I – c Guido Rößling
Komplexität – Komplexitätsklassen : Verhalten der Funktionen
6.18
Verhalten Grundfunktionen
Verhalten fuer n=1,...,5
4500
n^2
n^3
2^n
4000
3500
3000
f(n)
2500
2^n
2000
1500
1000
n^3
500
n^2
0
5
6
7
8
9
10
11
12
n
Abbildung 16: Verhalten der Funktionen für n=5, Í8Í¢Í ,12
Informatik I – c Guido Rößling
Komplexität – Komplexitätsklassen : Verhalten der Funktionen
6.19
Verhalten Grundfunktionen
Beispiel für einen 500 Mhz-Rechner mit Rechenzeit Q pro Taktzyklus:
^ + ¡
^ 
^ n¡
^ n ^ n
¡
^ n ¡
^ n ¡
^ `Þ n ¡
^ n è ¡
n¡

k
n¡
Q
k Q
0
k Q
0
Q
àQ
Q
Q k0Q k0Q Q àQ Þ Q Q Þ Q à Q k Q àQ à Q k Q Q ï e
Q Þï ï Þ
e
Þ
à¼
Wert von n
à
Q Q Q Q ï ï Þ
Q àk0Q Þ
Q ï àeï eS k .S- ~
æ w
à f
à,+
àk
f
Q
Q
æ à Q
ï
e k0ï
àS
) (
SIf
(
w
w
w
k0Q
e àQ
æ S Q
Þ ï
k0¼ ¤
f
æ
(*(
eIf  )(
f
w
w
w
Tabelle 15: Berechnungsdauer von n Rechenschritten nach Komplexitätsklasse
Deutlich zu erkennen ist das geringe Wachstum (Addition) bei
Wachstum von n n und das starke Zunehmen von n.
n, das ebenfalls geringe
Aufgrund der Berechnung von n (zur Basis 2) wurden nur Zweierpotenzen verwendet.
Informatik I – c Guido Rößling
Komplexität – Komplexitätsklassen : Verhalten der Funktionen
6.20
Ergebnis zu den Grundfunktionen
❑ Solange Q noch sehr klein ist, verhält sich
❑ Das schnelle Wachstum der Funktionen Q
<
sogar günstiger als etwa Q
und
<
(bis Q HßS )
ist deutlich zu erkennen.
❑ Die Funktionen lassen sich in der in der Tabelle 14 angegebenen Reihenfolge anordnen.
❑ Günstige
Komplexitäten liegen bis ^ –Q/ Q ¡

–Q ¡ ist ebenfalls noch mit akzeptablem Wachstum verbunden
❑a
–Q ¡ ist nur für relativ geringe Q akzeptabel.
❑a
❑ Exponentielles Wachstum vervielfacht die Laufzeit bei Hinzunahme eines Elements
☞ nicht mehr akzeptable Laufzeiten.
Informatik I – c Guido Rößling
Komplexität – Komplexitätsklassen : Ergebnis
6.21
Average, Best und Worst Case
Die Komplexitätstheorie unterscheidet weiter in folgende Kategorien:
❑ worst case-Komplexität ( worst“)
”
Gibt die Komplexität des rechenintensivsten Falls an.
❑ average case-Komplexität ( avg“)
”
Dies gibt die Komplexität des durchschnittlichen Falls an.
❑ best case-Komplexität ( best“)
”
Beschreibt die Komplexität des günstigsten Falls.
Naheliegenderweise gilt
best
avg
worst
Für einige Algorithmen fallen die Komplexitätsklassen zusammen, so daß z.B. avg“ und
”
worst“-case identisch sind, z.B. bei dem Sortierverfahren Sortieren durch Auswahl.
”
Die Bestimmung des tatsächlichen durchschnittlichen“ Falls ist in der Regel nicht trivial.
”
Die übliche Kenngröße eines Algorithmus ist der worst case - es interessiert vor allem, womit
im schlimmsten Fall zu rechnen ist.
Informatik I – c Guido Rößling
Komplexität – Average, Best und Worst Case
6.22
Ergebnisse
❑ Algorithmen lassen sich über ihre Komplexität, d.h. den Aufwand in Abhängigkeit
von der Problemgröße, gruppieren.
❑ Es wird zwischen best, average und worst case Komplexität unterschieden.
Die wichtigste Kategorie ist die worst case-Komplexit ät.
❑ Das Verhalten der Grundfunktionen
wurde auf Seite 6.18 bis 6.20 dargestellt.

❑ Eine Komplexität bis ^ [Q ¡ ist tolerierbar, ^ –Q ¡ ist bereits bei mittelgroßen Werten
für Q sehr aufwendig.
<
Exponentielles Wachstum wie ^ ¡ ist für die Praxis inakzeptabel.
❑ Beim Programmieren sollte auf die Komplexität geachtet werden.
Viele schlecht programmierte Algorithmen lassen sich um eine oder sogar zwei Komplexitätsklassen drücken“, wenn ein besserer Ansatz gewählt wird.
”
Informatik I – c Guido Rößling
Komplexität – Ergebnisse
6.23
Einführung in die Rekursion
Ein Objekt (oder Problem, Methode, ) heißt rekursiv, wenn es sich teilweise selbst enth ält:
❑ Russische Holzpuppen (Matrioschka);
❑ Einige Bilder von M. C. Escher;
❑ Fernsehbild, bei dem die Kamera den eigenen Monitor zeigt
Eine Definition heißt rekursiv, wenn das zu definierende teilweise durch sich selbst definiert
wird.
Um zu einem Abschluß zu gelangen, muß die Rekursion irgendwo beendet werden, etwa
durch elementare Fälle oder Objekte, die unmittelbar erklärt werden können.
Andernfalls läßt sich die Rekursion endlos fortsetzen - ohne abschließende Aussage:
Hofstadter’s Law: (aus: [Hof79])
It always takes longer than you expect, even when you
take into account Hofstadter’s Law.
Informatik I – c Guido Rößling
Rekursion – Einführung
7.1
Einführung in die Rekursion
Abbildung 17: Russische Matrioschkas
Jede Puppe enthält wiederum eine kleinere Puppe (bis hin zur kleinsten Puppe).
Informatik I – c Guido Rößling
Rekursion – Einführung
7.2
Einführung in die Rekursion
In der Modellierung und in der Programmierung findet Rekursion häufig Verwendung.
Zur Modellierung von Personen in einem Stammbaum ist es etwa notwendig, daß eine Person
folgende Attribute hat:
❑ Vor- und Nachname,
❑ Geburts- und ggf. Sterbedatum,
❑ Vater, Mutter und Kinder.
Die hervorgehobenen Attribute sind wiederum vom Typ Person: jede Person ist also u.a.
durch andere Personen definiert!
Auch bei vielen Verfahren ist Rekursion häufig. Viele Beispiele stammen direkt aus der Mathematik, wo die rekursive Definition von Funktionen oder Relationen gerne verwendet wird,
da viele rekursive Definitionen elegant und prägnant sind.
Diese Definitionen können in der Regel direkt in Java umgesetzt werden.
Auf den folgenden Folien werden einige Beispiele für rekursive Definitionen gegeben.
Informatik I – c Guido Rößling
Rekursion – Einführung
7.3
Beispiele zu rekursiven Definitionen
In den Sprachdefinitionen der BNF befinden sich zahlreiche Beispiele f ür rekursive Regeln:
L
❑ K Restzahl G ::= K Ziffer G
K Ziffer G@K Restzahl G
Eine Restzahl (aus der Grammatik für natürliche Zahlen auf Seite 3.18) besteht also
aus einer Ziffer gefolgt wiederum von einer Restzahl.
L
K Term GunvK Faktor G
❑ K Term G ::= K Faktor G
Ein Term kann also neben einem Faktor auch wiederum ein Term sein, der durch n
mit einem Faktor verknüpft ist.
Zu beachten ist dabei, daß durch beide Regeln jeweils beliebig lange Sequenzen erzeugt
werden können, bevor eine andere, nicht-rekursive Regel verwendet wird.
Informatik I – c Guido Rößling
Rekursion – Beispiele : BNF
7.4
Beispiele zu rekursiven Definitionen
Einige rekursive mathematische Funktionen :
❑ Fakultätsfunktion ° w !Ž –Q ¡ HlQxè ist für natürliche Zahlen definiert als
Ë
° w Ž
! –Q ¡ H¾Q èªH
1
Qzfª –QrA
falls Ö
Q H
Q G
falls £
¡
è
Die Fakultätsfunktion gibt die Anzahl möglicher Anordnungen von Q Elementen an.
< ç
ã , :
❑ Binomialkoeffizient y'¹ºQ –Q?! ¡ H
0
y'¹ºQ –Q?! ¡ H
Q
H
!21
465
3 <7
ã ,87
ç
>
falls !aH
falls QÉ
H !
n ! ¾
9
¯H Q
falls !£¯H
<7 ç
ã ,
Binomialkoeffizienten geben die Anzahl Möglichkeiten an,
Informatik I – c Guido Rößling
!
Elemente aus Q zu wählen.
Rekursion – Beispiele : Mathematik
7.5
Beispiele zu rekursiven Definitionen
❑ Größter gemeinsamer Teiler : žd –¼•?=Q ¡ für natürliche Zahlen:
;
Ë
žd [¼£?=Q ¡ H
¼
;
falls É
Q H
falls Á
Q G
žd –Qx?R¼=<ÀQ ¡
’%’ ist dabei die Modulo-Operation, d.h. der nach (Ganzzahl-)Division entstehende Rest.
❑ Fibonacci-Zahlen, ursprünglich 1202 von Leonardo Pisano definiert:
°ä¹/y0 –Q ¡ H
465
3
°¦¹+y0 [QhA
¡
>î°¦¹+y0 [QrA
¡
Q H
falls É
falls É
Q H
falls Á
Q G
Die Fibonacci-Zahlen dienten anfangs als (abstrakte) Rechenaufgabe zur Fortpflanzung
von Kaninchen, haben aber einige interessante Anwendungen, etwa den Goldenen Schnitt.
Der Goldene Schnitt ist ein geometrischer Faktor, der zur ästhetisch möglichst ansprechenden Aufteilung von Flächen und Strecken in harmonischem Verhältnis dient und in
vielen Gemälden des Mittelalters Verwendung findet.
Informatik I – c Guido Rößling
Rekursion – Beispiele : Mathematik
7.6
Beispiele zu rekursiven Definitionen
In allen angegebenen Beispielen ist es sehr einfach, direkt aus der Definition eine entsprechende Java-Methode zu programmieren.
Das darf aber nicht darüber hinwegtäuschen, daß die Berechnung eines konkreten Ergebnis-<
ses sehr zeitaufwendig sein kann: so benötigt etwa die Berechnung von °ä¹/y0 –Q ¡ ungefähr
Rechenschritte.
Zur Begründung: Für Q•G
ist die Anzahl Rechenschritte °ˆ –Q ¡ Hs°ˆ [Q A ¡ >@°ˆ [Q A ¡ > .
¡>
¡? fª°“ –QÉA ¡ und man erhält damit
Daher
gilt
f
“
°
–
É
Q
A
ˆ
°
[
Q

<7 <7 °ˆ –Q ¡
.
Im Abschnitt Komplexität“ auf Seite 6.4f wird eine nähere Bestimmung des Aufwands
”
durchgeführt.
Informatik I – c Guido Rößling
Rekursion – Beispiele : Mathematik
7.7
Allgemeines
Generell lassen sich rekursive Definitionen in zwei Teile aufteilen:
❑ den Rekursionsanker
❑ und den Rekursionsschritt.
Der Rekursionsanker definiert den Wert für eine bestimmte Eingabe durch eine nicht-rekursive Formel. Es kann sich dabei um einen einfachen Zahlenwert handeln, aber auch um eine
(andere) Formel. Es kann auch für mehr als eine Eingabe einen Rekursionsanker geben (vgl.
Fibonacci-Zahlen).
Der Rekursionsschritt hingegen definiert den Wert für eine bestimmte Eingabe durch den Wert
für eine andere Eingabe. In der Regel wird dabei ein Schritt in Richtung des Rekursionsankers
gemacht, d.h. es wird z.B. immer die Eingabe um eins heruntergezählt.
☞ Was ist in der folgenden Formel der Rekursionsanker, was der Rekursionsschritt?
Was wird definiert?
<
falls
gêù
Ö
Q
H
6
4
5
<7 %
9& ù
Informatik I – c Guido Rößling
g 9 H
3
g < >
%
9& ù
g 9
Rekursion – Allgemeines
falls Q£G
7.8
Summenformel
%
Beispiel: Zu berechnen sei die Summe der Werte g 9 für ¹ H
%

9& ù
g 9 H
g
H
H
%

g

g
>

>
"
?? .
9 & #ù
g >
>Ág >
g 9
!
ù
&
" 9 #ù
gäù
g 9
!
Rekursive Definitionen sind im allgemeinen
❑ kürzer,
❑ leichter verständlich und
❑ einfacher nachzubilden (d.h. zu implementieren)
als herkömmliche“ iterative Definitionen.
” Informatik I – c Guido Rößling
Rekursion – Allgemeines : Summenformel
7.9
Bekannte rekursive Algorithmen
Folgende Algorithmen bzw. Vorgehensweisen sind einigen von Ihnen vielleicht bekannt:
❑ Quicksort
Ein einfaches Sortierverfahren, das in vielen Fällen sehr schnell ist.
❑ Türme von Hanoi
Umsortieren von Scheiben unterschiedlicher Größe von einem Stab auf einen anderen
unter Zuhilfenahme eines dritten Stabs.
❑ 8-Damenproblem
Anordnung von 8 Damen auf einem Schachbrett, so daß keine Dame eine andere schlagen
kann.
❑ Backtracking
Systematisches Ausprobieren eines Ansatzes mit anschließender R ückverfolgung der
Schritte und Wahl von Alternativen.
❑ Einige Operationen auf Datenstrukturen, z.B. Bäumen
Insbesondere die Operationen Suchen, Einfügen
Informatik I – c Guido Rößling
Rekursion – Allgemeines : Bekannte Algorithmen
7.10
Arten von Rekursion
❑ Wechselseitige Rekursion (auch: indirekte Rekursion)
m ruft eine andere Methode n auf, die wiederum m aufruft.
❑ Endrekursion (engl. tail recursion)
¼ wird in der Rekursion als letztes verwendet.
Ë
°ˆ –g ¡ H
Ç
[ g ¡
°“ –·› –g ¡+¡
Ç
falls – g ¡
Ç
falls m [ g ¡
–g ¡ ist dabei eine boole’sche Funktion und ·› –g ¡ eine beliebige Funktion oder Anweisungsfolge, die nicht auf ° zurückgreift.
❑ Lineare Rekursion (allgemeinste Form der Rekursion)
Ë
°ˆ [g ¡ H
– g ¡
+T –g“?'°ˆ –·› [g ¡+¡/¡
Ç
falls – g ¡
Ç
falls m – g ¡
+T –g“?'°ˆ [·› –g
¡+¡+¡ ist dabei eine zusätzliche Funktion. Dieser Fall liegt z.B. bei der Fakultäts
Ç
funktion für +T –g“?R½ ¡ Hlg¿f½Ù?R·; –g ¡ H¾g A ? –g ¡ H ? –g ¡ H –gjH}H ¡ .
Informatik I – c Guido Rößling
Rekursion – Arten von Rekursion
7.11
Türme von Hanoi
Ein vielzitiertes Problem für Rekursion sind die Türme von Hanoi.
Das 1883 von dem französischen Mathematiker Eduard Lucas erfundene Spiel“ ist wie folgt
”
definiert:
Ein Mönchsorden in Benares (Indien) besitzt den Turm des Brahma“, der aus drei
”
Stäben besteht, auf die 64 goldene Scheiben verteilt sind. Die Scheiben sind alle unterschiedlich groß und daher auch unterschiedlich schwer.
Anfangs befinden sich alle Scheiben auf dem linken Stab. Die M önche haben nun die
Aufgabe, alle Scheiben auf den mittleren Stab zu verschieben, wobei sie aber immer
nur eine Scheibe bewegen dürfen.
Aufgrund des Gewichts der Scheiben darf nie eine Scheibe auf einer kleineren Scheibe
liegen.
Wenn alle Scheiben korrekt verschoben wurden, ist die Aufgabe des M önchsordens
gelöst und die Welt geht unter.
Wie können die Mönche ihr Problem möglichst einfach und elegant lösen ?
Informatik I – c Guido Rößling
Rekursion – Arten von Rekursion : Türme von Hanoi
7.12
Türme von Hanoi
Ein paar Vorüberlegungen:
1. Wann kann die unterste Scheibe bewegt werden?
2. Wohin muß die unterste Scheibe geschoben werden?
3. Wie sieht die Lösung für Q H
4. Wie sieht die Lösung für Q H
Scheibe aus?
aus?
5. und die Lösung für QÖHßÞ Scheiben?
6. ☞ Welcher Bezug besteht zwischen den Lösungen?
Informatik I – c Guido Rößling
Rekursion – Arten von Rekursion : Türme von Hanoi
7.13
Türme von Hanoi
Prinzipiell wird das Problem ausschließlich durch das Verschieben von einzelnen Scheiben
gelöst. Es macht aber Sinn, eine feste Methode vorzugeben, die das Verschieben der Scheibe
¹ von Stab A nach Stab B erlaubt.
Gegeben sei also eine Methode bewege(i, A, B), die genau dies tut.
auf das Problem
Nun muß man sich überlegen, wie sich das Problem für ein konkretes Q£G
für QrA
zurückführen läßt. Dazu betrachten wir die Überlegungen zu den Fragen :
1. Die unterste Scheibe (Nummer Q ) kann nur dann bewegt werden, wenn alle anderen QMA
Scheiben schon vom Stab entfernt wurden.
2. Die unterste Scheibe muß direkt auf den Zielstab gelegt werden.
3. Q H
:
bewege(1, start, ziel)
Informatik I – c Guido Rößling
Rekursion – Arten von Rekursion : Türme von Hanoi
7.14
Türme von Hanoi
4. Q H
:
bewege(1, start, frei)
bewege(2, start, ziel)
bewege(2, start, ziel)
Informatik I – c Guido Rößling
Rekursion – Arten von Rekursion : Türme von Hanoi
7.15
Türme von Hanoi
5. Q HßÞ :
bewege(1, start, ziel)
bewege(2, start, frei)
Rekursion – Arten von Rekursion : Türme von Hanoi
bewege(1, ziel, frei)
bewege(3, start, ziel)
bewege(1, frei, start)
bewege(2, frei, ziel)
bewege(1, start, ziel)
Informatik I – c Guido Rößling
7.16
Türme von Hanoi
Um Scheibe ¹ von Stab A nach Stab B zu bewegen, müssen also folgende Bedingungen erfüllt
sein:
❑ Scheibe ¹ ist die oberste Scheibe auf Stab A;
❑ auf Stab B befindet sich keine kleinere Scheibe als Scheibe ¹ .
Aus diesen Aussagen folgt direkt, daß alle kleineren Scheiben sich auf dem dritten Stab (C)
befinden müssen – unabhängig davon, wie die Zuordnung von A, B, C auf die Stäbe ist.
☞ Zum Verschieben von Scheibe ¹ müssen die Scheiben ? ??R¹TA
Wie kommen die Scheiben ? ? ?R¹«A
dorthin?
☞ Das ist das gleiche Problem wie oben - nur für Scheibe ¹“A
Informatik I – c Guido Rößling
auf Stab C liegen.
!
Rekursion – Arten von Rekursion : Türme von Hanoi
7.17
Lösung
Um Q Scheiben von Stab A nach Stab B zu verschieben, geht man also wie folgt vor :
❑ Verschiebe die QhA
oberen Scheiben vom Startstab zum Hilfsstab;
❑ Verschiebe die oberste Scheibe vom Startstab zum Zielstab;
❑ Verschiebe die QhA
Scheiben vom Hilfsstab zum Zielstab.
Für den ersten und den dritten Schritt ist wiederum der gleiche Algorithmus ( hanoi“) ein”
zusetzen.
Eine mögliche Implementierung ist auf den folgenden Folien angegeben.
Informatik I – c Guido Rößling
Rekursion – Arten von Rekursion : Türme von Hanoi
7.18
Lösung
package e i . misc ;
ü
/ ]3]
] D i e s e K l a s s e i m p l e m e n t i e r t das ” Tuerme von Hanoi ” Problem .
] /
p u b l i c c l a s s Hanoi
/ ]3]
] K o n s t a n t e n f u e r d i e Zuordnung der S t a e b e
] /
p r i v a t e s t a t i c f i n a l i n t LINKER STAB = 0 , MITTLERER STAB = 1 ,
RECHTER STAB = 2 ;
/ ]3]
] T e x t f u e r d i e S t a e b e ( h i n t e r ’ vom ’ oder ’ zum ’ , daher D a t i v f o r m )
] /
ü
p r i v a t e s t a t i c f i n a l S t r i n g [ ] STAEBE =
” l i n k e n Stab
”,
” m i t t l e r e n Stab ” ,
ý
” r e c h t e n Stab ” ;
Informatik I – c Guido Rößling
Rekursion – Arten von Rekursion : Türme von Hanoi
7.19
Lösung
/ ]3]
] A n z a h l a u s g e f u e h r t e r Bewegungen
] /
p r i v a t e s t a t i c i n t nrMoves = 0 ;
ü
/ ]3]
] V e r s c h i e b e S c h e i b e n vom S t a b ’ s t a r t ’ zum S t a b ’ z i e l ’ .
]
] G i b t e i n e n p a s s e n d e n T e x t aus und z a e h l t d i e Bewegung .
] /
p r i v a t e void bewege ( i n t n , i n t s t a r t , i n t z i e l )
ý
System . e r r . p r i n t l n ( ” Bewege S c h e i b e ” + n + ” vom ” + STAEBE[ s t a r t ]
+ ” zum ” + STAEBE[ z i e l ] ) ;
nrMoves ++;
Informatik I – c Guido Rößling
Rekursion – Arten von Rekursion : Türme von Hanoi
7.20
Lösung
ü
/ ]3]
] V e r s c h i e b e den Turm der Hoehe n von S t a b ’ von ’ nach S t a b ’ nach ’ u n t e r
] Nutzung von S t a b ’ f r e i ’ .
] /
p u b l i c void h a n o i ( i n t n , i n t von , i n t nach , i n t f r e i )
ü
if ( n == 1)
bewege ( n , von , nach ) ;
else
h a n o i ( n þ 1 , von , f r e i , nach ) ;
bewege ( n , von , nach ) ;
h a n o i ( n þ 1 , f r e i , nach , von ) ;
ý
ý
// direktes
Informatik I – c Guido Rößling
Verschieben moeglich
/ / ( n þ 1) þ Turm a u f ’ f r e i ’
/ / u n t e r s t e Scheibe verschieben
/ / ( n þ 1) þ Turm a u f ’ nach ’
Rekursion – Arten von Rekursion : Türme von Hanoi
7.21
Lösung
ý
ü
/ ]3]
] V e r a r b e i t e d i e Eingabe und g e n e r i e r e e i n n e u e s O b j e k t .
] Erwartet die Anzahl Scheiben als Parameter .
] /
p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s )
ý
Hanoi h a n o i = new Hanoi ( ) ;
h a n o i . h a n o i ( I n t e g e r . v a l u e O f ( a r g s [ 0 ] ) . i n t V a l u e ( ) , LINKER STAB ,
MITTLERER STAB , RECHTER STAB ) ;
System . e r r . p r i n t l n ( nrMoves + ” Bewegungen i n g e s a m t . ” ) ;
Informatik I – c Guido Rößling
Rekursion – Arten von Rekursion : Türme von Hanoi
7.22
Ausgabe des Programms für QÖHlk
Bewege Scheibe 1 vom linken Stab
Bewege Scheibe 2 vom linken Stab
Bewege Scheibe 1 vom rechten Stab
Bewege Scheibe 3 vom linken Stab
Bewege Scheibe 1 vom mittleren Stab
Bewege Scheibe 2 vom mittleren Stab
Bewege Scheibe 1 vom linken Stab
Bewege Scheibe 4 vom linken Stab
Bewege Scheibe 1 vom rechten Stab
Bewege Scheibe 2 vom rechten Stab
Bewege Scheibe 1 vom mittleren Stab
Bewege Scheibe 3 vom rechten Stab
Bewege Scheibe 1 vom linken Stab
Bewege Scheibe 2 vom linken Stab
Bewege Scheibe 1 vom rechten Stab
15 Bewegungen ingesamt.
Informatik I – c Guido Rößling
zum
zum
zum
zum
zum
zum
zum
zum
zum
zum
zum
zum
zum
zum
zum
rechten Stab
mittleren Stab
mittleren Stab
rechten Stab
linken Stab
rechten Stab
rechten Stab
mittleren Stab
mittleren Stab
linken Stab
linken Stab
mittleren Stab
rechten Stab
mittleren Stab
mittleren Stab
Rekursion – Arten von Rekursion : Türme von Hanoi
7.23
Typische Fehler
Folgende Fehler werden bei Rekursion häufig gemacht:
❑ Rekursionsanker fehlt
❑ Rekursionsanker nicht immer erfüllt oder wird übersprungen
❑ Falsche Rekursionsrichtung (zählt hoch, aber Anker bei 0)
❑ Inkorrekte oder fehlende Verarbeitung der Ergebnisse des Rekursionschritts
❑ Rekursionsanker inkorrekt
❑ Rekursionsschritt inkorrekt
❑ Reihenfolge Ergebnisberechnung/Rekursion ungünstig (erst Rekursion)
Informatik I – c Guido Rößling
Rekursion – Typische Fehler bei der Rekursion
7.24
Einsatzgebiete der Parallelverarbeitung
Haupteinsatzgebiet der Parallelverarbeitung sind Anwendungen, die sehr viele Operationen
pro Sekunde benötigen, bzw. mehrere Daten gleichzeitig bearbeiten m üssen.
Typische Vertreter sind etwa
❑ Wettervorhersage
❑ Quantenchemie
❑ Astrophysik
Z.B. Bestimmung und Lokalisierung von Schwarzen Löchern“ anhand der Krümmung
”
von Planetenlaufbahnen
❑ Modellierung der Umwelt
❑ Materialwissenschaft
❑ Künstliche Intelligenz
❑ Komplexe Probleme in der Statik (Bauwissenschaft)
Informatik I – c Guido Rößling
Parallelverarbeitung – Einsatzgebiete
8.1
Architekturen
Unterschiedliche Einzelrechnermodelle:
❑ Herkömmliches Maschinenmodell (von Neumann-Architektur)
Rechner mit einem Prozessor, der zu einem gegebenen Zeitpunkt nur genau einen Befehl
abarbeiten kann und auch nur ein Programm gleichzeitig laufen läßt.
❑ Multitasking-fähiger Rechner
Rechner mit (üblicherweise) einem Prozessor, der (scheinbar) mehrere Programme gleichzeitig ablaufen lassen kann.
In der Praxis besitzt jedes Programm eine Priorität und wird je nach vorhandener Rechenzeit und Ausführungszustand der Programme höherer Priorität abgearbeitet.
❑ Multithreading
Jeder Prozeß auf dem Rechner kann sich in verschiedene Threads aufteilen, die mit geringerer Priorität ausgeführt werden und Unteraufgaben übernehmen.
❑ (Echter) Parallelrechner
Rechner mit mehreren Prozessoren, die geeignet“ miteinander verbunden sind. Jeder Pro”
zessor führt auf den ihm zugeordneten Daten bestimmte Befehle aus.
Informatik I – c Guido Rößling
Parallelverarbeitung – Architekturen
8.2
Architekturen
Eine übliche Unterteilung erfolgt über den Steuerungsmechanismus.
SISD Single Instruction, Single Data – herkömmlicher Rechner mit CPU und Speicher
MISD Multiple Instruction, Single Data – Q Prozessoren f ühren gleichzeitig (verschiedene)
Aktionen auf den selben Daten aus.
Im Prinzip trifft dies eingeschränkt auch auf Pipeline-Architekturen zu, wie etwa bei Pen
tium/Pentium II, bei denen während der Ausführung von Befehl ¹ bereits Befehl ¹ >
gelesen wird.
SIMD Single Instruction, Multiple Data – Q Prozessoren f ühren die selbe Aktion gleichzeitig
auf jeweils unterschiedlichen Daten aus ( Vektor-Rechner“ oder Array-Rechner“).
”
”
Vor allem von Vorteil bei regulären“ Strukturen, z.B. Matrixaddition, wo in allen Teilbe”
reichen die gleiche Operation auszuführen ist.
MIMD Multiple Instruction, Multiple Data – Q Prozessoren f ühren gleichzeitig verschiedene
Aktionen auf unterschiedlichen Daten aus.
Mischformen Systolische Arrays bzw. Wavefront Arrays mit unabhängigen MIMD-Rechnern
und synchronem bzw. asynchronem Betrieb.
Informatik I – c Guido Rößling
Parallelverarbeitung – Architekturen
8.3
Beispiele
❑ Quicksort
Jede Einzelfolge wird von einem eigenen Prozessor sortiert.
❑ Vektorenoperationen (Addition, Subtraktion, Multiplikation und Division)
Jedem Prozessor wird dabei ein Vektorelement (oder mehrere) der beiden Vektoren zugeordnet.
❑ Mandelbrot-Berechnung ( Apfelmännchen“).
”
Die Menge kann in Blöcke zerteilt werden, die unabhängig voneinander berechnet werden.
❑ Bild-, Audio- und Video-Kompressionsverfahren (JPEG bzw. MPEG).
Zur Kompression wird bei diesen Verfahren das Bild in Bl öcke der Größe 8 û 8 zerlegt.
Diese Blöcke können parallel codiert werden.
❑ Spezielle Sortierverfahren (Bitonisches Mischen)
❑ Numbercruncher“-Programme, die beispielsweise versuchen, Codierungen zu knacken
”
(vgl. RSA-Wettbewerbe).
Informatik I – c Guido Rößling
Parallelverarbeitung – Beispiele
8.4
Voraussetzungen
❑ mehrere Prozessoren (oder mindestens Multithreading)
❑ Kommunikationswege zwischen den Prozessoren mit geeigneter“ Topologie.
”
Achtung: bei all to all“ (jeder Prozessor ist mit allen verbunden) ist die maximale Anzahl
”
der Prozessoren durch die Anschlüsse bereits festgelegt.
❑ Ein Master“-Programm oder Prozeß, verantwortlich für
”
☞ Verteilen der Daten auf die Prozessoren oder Worker“
”
Alternativ Verfügbarkeit der Daten in gemeinsamen Speicherraum.
☞ Zuteilung der Anweisungen bzw. Programme an die Worker,
☞ Entgegennahme der Ergebnisse der Worker,
☞ Zusammensetzen der Teilergebnisse zum Gesamtergebnis.
Dazu muß der Master jedem Teilergebnis die ursprüngliche Position im Datenraum
zuordnen können.
Informatik I – c Guido Rößling
Parallelverarbeitung – Voraussetzungen
8.5
Voraussetzungen
❑ Parallelisierbarkeit des Algorithmus:
☞ gleichzeitige Ausführung von (verschiedenen) Befehlen auf den gleichen Daten oder
☞ gleichzeitige Ausführung von gleichen Befehlen auf verschiedenen Daten
muß Vorteile bringen – das ist nicht immer gegeben!
❑ spezielle Umgebung oder Programmiersprache, die Verteilung von Daten oder Befehlen
an Worker unterstützt, etwa OCCAM oder PVM.
❑ Anpassung des Programms an Parallelisierung, etwa durch Implementierung eines spezifischen Masters und Aufteilung der Daten von Hand“.
”
Informatik I – c Guido Rößling
Parallelverarbeitung – Voraussetzungen
8.6
Bewertung
Zur Bewertung des Gewinns bei Parallelverarbeitung wird der Speedup verwendet:
❑ Sei ž 9 –Q ¡ die Laufzeit des Algorithmus bei ¹ Prozessoren und Eingabegr öße Q .
Der Speedup bei Verwendung von @ Prozessoren wird dann definiert als
ACB
Dabei gilt
AB
[Q ¡
@
–Q ¡ H
ž –Q ¡
ž
B
–Q ¡
.
¡
WähltAman
B ¡ als Basis für ž –Q die Laufzeit eines (optimalen) sequentiellen Algorithmus, so
kann –Q auch kleiner als 1 werden.
Dies passiert in der Regel durch
❑ schlechte Parallelisierbarkeit der Daten und des Algorithmus,
❑ Wartezeiten in der Prozeßkommunikation,
❑ zusätzlichen Kommunikationsaufwand sowie
❑ Aufwand zur Aufteilung und Zusammensetzung der Ergebnisse.
Informatik I – c Guido Rößling
Parallelverarbeitung – Bewertung
8.7
Algorithmenklasse
Die entscheidende Frage ist: Wie schnell kann man Probleme mit effizienten sequentiellen
Algorithmen im besten Fall parallel lösen?
Auf Nick Pippenger geht die Klasse NC ( Nick’s Class“) zurück. Elemente dieser Klassen
”
heißen NC-Probleme“ und haben folgende Eigenschaften:
”
❑ Das Problem gilt als effizient parallelisierbar.
❑ Es gibt einen parallelen Algorithmus, der das Problem auf polynomiell vielen Prozessoren
9

in poly-logarithmischer Zeit löst, d.h. in ^ + D Q ¡ ¡ .
Es gilt NC E P, da jeder parallele NC-Algorithmus in Polynomialzeit mit einem einzelnen
Prozessor simulierbar ist.
Bis heute ist ungeklärt, ob auch NC = P gilt, also alle effizienten sequentiellen Algorithmen
effizient parallelisierbar sind. Es wird aber vermutet, daß dies nicht der Fall ist.
Informatik I – c Guido Rößling
Parallelverarbeitung – Algorithmenklasse
8.8
Problemstellungen
❑ Das Programm muß in der Regel die Aufteilung der Daten und Aufgaben explizit vorgeben.
❑ Parallelverarbeitung ist nur dann hilfreich, wenn sich das Gesamtprogramm in einzelne,
möglichst weitgehend unabhängige Probleme aufteilen läßt.
❑ Der Kommunikationsaufwand zwischen den Prozessoren, etwa zur Übertragung der Daten, des Status und der Ergebnisse sind zu berücksichtigen
❑ Wahl der Vernetzung der Prozessoren: jeder mit jedem direkt, über Bus oder Ring, ?
❑ Synchronisation der Prozesse
❑ Master“-Prozeß zur Vergabe der Daten und Entgegennahme der Ergebnisse sowie Zu”
sammenfügung der Daten.
❑ Anzahl der benötigten Prozessoren kontra Anzahl vorhandener Prozessoren
Informatik I – c Guido Rößling
Parallelverarbeitung – Problemstellungen
8.9
Problemstellungen
❑ Lastverteilung an die Prozessoren: Einsparen von Wartezeiten durch Bereitstellen der
Aufgaben und Selbstbedienung“ der Worker
”
❑ Zusammenfügen der Einzelergebnisse.
Hierzu ist in der Regel eine Markierung vorhanden, welchen Eingangsdaten bzw. welcher
Position oder Koordinaten das Ergebnis zugeteilt war, sowie ggf. die Identifikation des
bearbeitenden Workers.
❑ Spezielle Teilprozessoren mit besonderer (aber eingeschränkter) Funktionalität kontra
Verknüpfung von normalen Prozessoren.
❑ Anzahl der Prozessoren wird durch Hardware festgelegt; der Algorithmus muß dem Rechnung tragen
Informatik I – c Guido Rößling
Parallelverarbeitung – Problemstellungen
8.10
Zusammenfassung
❑ Paralleles Abarbeiten auf mehreren Prozessoren kann die Effizienz deutlich erh öhen
❑ Algorithmen müssen an Parallelverarbeitung angepaßt werden, u.a. durch explizite Anweisungen, welche Daten an welche Prozessoren zu leiten sind
❑ Oft Aufteilung in einen Master für Aufteilung und Zusammensetzen und mehrere Worker
für die eigentliche Berechnung
❑ Zeitgewinn durch Speedup meßbar (siehe auf Seite 8.7)
❑ zusätzlicher Kommunikationsaufwand gegenüber sequentiellem Algorithmus
❑ Teilweise erhebliche Leistungssteigerung, z.B. bei Mandelbrot oder JPEG-Codierung.
❑ Vermutlich sind nicht alle Algorithmen effizient parallelisierbar
Informatik I – c Guido Rößling
Parallelverarbeitung – Zusammenfassung
8.11
Literatur zur Parallelverarbeitung
❑ [FBK97]
❑ [Dud93]
❑ [GZZZ95]
❑ [Sed92]
Informatik I – c Guido Rößling
Parallelverarbeitung – Literatur
8.12
Determinismus und Nichtdeterminismus – Begriffe
Algorithmen lassen sich in verschiedene Klassen unterteilen:
❑ deterministische Algorithmen,
❑ probabilistische Algorithmen,
❑ heuristische Algorithmen sowie
❑ nichtdeterministische Algorithmen.
Generell wird noch unterschieden zwischen
❑ determinierten und
❑ nicht-determinierten Algorithmen.
Determiniert“ bzw. nicht-determiniert“ sagt aus, ob der Algorithmus bei gleichen Eingaben
”
”
und Startsituation immer die gleichen Ergebnisse liefert.
Im folgenden werden die einzelnen Klassen kurz näher betrachtet.
Informatik I – c Guido Rößling
Determinismus und Nichtdet. – Begriffe
9.1
Deterministische Algorithmen
❑ Ein Algorithmus heißt deterministisch, wenn es zu jeder m öglichen Programmsituation
höchstens eine Folgesituation geben kann.
Anders formuliert: Die nächste auszuführende Anweisung ist zu jedem Zeitpunkt eindeutig definiert (oder nicht existent).
❑ Deterministische Algorithmen sind immer auch determiniert, d.h. sie liefern zu einer
gewählten Eingabe bei gleichen Startbedingungen immer das gleiche Ergebnis.
❑ Deterministische Algorithmen stellen den Großteil der vorzufindenden Algorithmen dar.
❑ Beispiel: Quicksort mit vorgegebener Wahl des Pivot-Elements, etwa stets des
zweiten Elements, oder des Medians der ersten drei Elemente.
Informatik I – c Guido Rößling
Determinismus und Nichtdet. – Deterministische Algorithmen
9.2
Probabilistische Algorithmen
❑ Ein Algorithmus heißt probabilistisch, wenn es mindestens eine Programmstelle gibt, in
der die auszuführende Anweisung von zufälligen“ Ereignissen abhängt.
”
❑ In der Regel wird eine (Pseudo-)Zufallszahl bestimmt und je nach Wert eine Aktion ausgelöst.
❑ Probabilistische Algorithmen sind nicht-determiniert, d.h. sie k önnen zu einer gewählten
Eingabe bei gleichen Startbedingungen unterschiedliche Ergebnisse berechnen.
❑ Haupteinsatzgebiet sind Entscheidungsprobleme mit Ergebnis ja“ oder nein“
”
”
❑ Randomisierte Algorithmen irren sich bei Antwort nein“ nicht und haben bei minde”
stens 50% der positiven Fälle recht.
❑ Las Vegas Algorithmen können neben ja“ und nein“ auch noch ein unbestimmt“ aus”
”
”
geben. Die Antworten ja“ und nein“ müssen stets korrekt sein.
”
”
Zu beachten ist, daß man die Genauigkeit des Ergebnisses von randomisierten bzw. Las
Vegas Algorithmen durch mehrfache Ausführung steigern kann. Nach ¹ Ausführungen sinkt
die Wahrscheinlichkeit
einer fehlerhaften positiven Antwort bei randomisierten Algorithmen
G F
so auf K
.
Informatik I – c Guido Rößling
Determinismus und Nichtdet. – Probabilistische Algorithmen
9.3
Beispiel: randomisierter Algorithmus
Ein berühmtes Beispiel für randomisierte Algorithmen ist der Primzahltest von Solovay und
Strassen, der (vereinfacht) wie folgt vorgeht (Q sei die zu untersuchende Zahl):
❑ Für a, b í IN sei H w ?5y ¡ eine Funktion mit H w ?5y ¡ HJI , falls ggT(a, b) = 1
Die genaue Definition von H w ?5y ¡ befindet sich z.B. im Duden K Informatik L “.
”
w
w
QhA
❑ Zufälliges Auswählen einer Zahl mit K
❑ Falls ggT(a, n) ¯H 1, kann Q keine Primzahl sein.
❑ Falls ggT(a, n) = 1, berechne H w ?RQ ¡ .
Y
H w ?=Q ¡ H wNMPO Z modulo Q , antworte ”Primzahl“, andernfalls ”keine Primzahl“.
❑ Falls x
Es läßt sich zeigen, daß der Algorithmus
❑ nie eine Primzahl als Nicht-Primzahl klassifiziert,
❑ und bei Antwort Q ist eine Primzahl“ in mindestens 50% der Fälle recht hat.
”
Informatik I – c Guido Rößling
Determinismus und Nichtdet. – Probabilistische Algorithmen : Beispiel
9.4
Heuristische Algorithmen
❑ Heuristik: griechisch heuristikein“ ( finden“ oder entdecken“) (vgl. Eureka“ – ich
”
”
”
”
”
habe es gefunden“)
❑ Heuristiken sind Strategien oder Lösungsverfahren
❑ Zweck einer Heuristik ist das Finden einer guten“ (d.h. fast optimalen) Lösung in ak”
”
zeptabler“ Rechenzeit.
Unter Umständen kann keine Lösung gefunden oder die Qualität (als Distanz zum Optimum) nicht bestimmt werden.
❑ Heuristische Algorithmen sind Algorithmen, die zum Lösen eines Problems eine Heuristik benutzen.
❑ Die Güte der Heuristiken läßt sich nicht beweisen, sondern nur durch (mehrere) Testläufe
mit verschiedenen Eingabedaten beurteilen.
❑ Haupteinsatzgebiet sind Optimierungs- und Entscheidungsprobleme, deren L ösung nicht
effizient (deterministisch) berechenbar ist.
❑ Heuristiken erzeugen in der Regel recht schnell relativ gute Ergebnisse – aber oft nicht
das optimale Ergebnis.
Informatik I – c Guido Rößling
Determinismus und Nichtdet. – Heuristische Algorithmen
9.5
Heuristische Algorithmen
❑ Viele Heuristiken basieren auf
☞ Faustregeln,
☞ (plausiblen) Annahmen, die fast immer“ gelten,
”
☞ Erfahrungswerten,
☞ Ansätzen zum Herantasten“ an die Lösung (z.B. Local Search und Genetische Algo”
rithmen)
☞ oder der Nachbildung menschlichen Verhaltens bei der Probleml ösung.
❑ heuristische Algorithmen können determiniert oder nicht-determiniert sein, da vielfach
Zufallszahlen mit in die Heuristik einfließen.
❑ Beispiel: Ansätze zur Lösung NP-vollständiger Probleme, etwa TSP (Travelling Salesman Problem)
Informatik I – c Guido Rößling
Determinismus und Nichtdet. – Heuristische Algorithmen
9.6
Beispiel für heuristische Algorithmen
Das eben schon erwähnte Travelling Salesman Problem ist wie folgt definiert:
Gegeben ist ein Netz von Punkten, die jeweils eine Stadt repräsentieren, sowie die Entfernungen zwischen allen Städten. Für jedes Paar A, B von Städten gebe es eine direkte Route von
A nach B (und zurück), wobei die Entfernungen unterschiedlich sein dürfen.
Gesucht ist eine Route, die
❑ in einer beliebigen Stadt beginnt,
❑ jede Stadt genau einmal besucht,
❑ und am Ende wieder im Ausgangspunkt angelangt.
Der Name des Problems rührt von der Verwandschaft zu dem (überaus realen) Problem der
Streckenplanung eines Handelsreisenden, der von zuhause startet und alle Kundenstandorte
genau einmal besuchen muß.
Informatik I – c Guido Rößling
Determinismus und Nichtdet. – Heuristische Algorithmen : Beispiel
9.7
Beispiel für heuristische Algorithmen
1. Suche die Verbindung zweier Punkte A, B mit minimalen Kosten
2. Wählen einen der beiden Punkte als Startpunkt, z.B. A.
3. Wähle die billigste“ Strecke als ersten Reiseabschnitt, reise also von A nach B. Setze die
”
Kosten der Strecke als bisherige Kosten.
Bisher wurden daher die Punkte A und B besucht.
4. Falls bereits alle Städte besucht wurden und durch einen Linienzug miteinander verbunden
sind, fahre mit Schritt 8 fort.
5. Suche die billigste Strecke, die entweder zwei noch nicht besuchte Städte, eine der bisher
besuchten Städte mit einer noch nicht besuchten Stadt oder aber zwei isolierte Linienz üge
verbindet.
6. Folge dieser Strecke, d.h. füge die Stadt zur Liste der besuchten Städte hinzu und addiere
die Entfernung zu den Kosten.
7. Gehe zu Schritt 4.
8. Schließe die Rundreise durch Wählen der Strecke von der letzten besuchten Stadt zur
Ausgangsstadt und addieren der Kosten hierfür.
Informatik I – c Guido Rößling
Determinismus und Nichtdet. – Heuristische Algorithmen : Beispiel
9.8
Beispiel für heuristische Algorithmen
❑ Der Ansatz benutzt eine Vorgehensweise aus der Graphentheorie, den minimal aufspan”
nenden Baum“.
❑ Falls stets Ñ N Ã N Q JbÑ N Q gilt, ist das Ergebnis maximal doppelt so groß wie die
optimale Lösung – wenn man von der letzten Kante absieht.
❑ Die Reihenfolge der Wahl der Städte kann entscheidend sein.
❑ Für viele praktische Anwendungen ist dies aber zu schlecht; vielfach ist auch die oben
angegebene Dreiecksungleichung nicht erfüllt.
❑ Eine nachgeschaltete Heuristik wird daher die gefundene L ösung schrittweise leicht modifizieren und nach sich ergebenden besseren Lösungen suchen.
❑ Die anfangs bestimmte Lösung kann bereits ein lokales Minimum sein, d.h. jede einfache
Änderung führt zu einer Verschlechterung.
Um das globale Optimum zu finden, werden daher oft weitergehende Vertauschungen von
Teilstrecken durchgeführt.
Informatik I – c Guido Rößling
Determinismus und Nichtdet. – Heuristische Algorithmen : Beispiel
9.9
Nichtdeterministische Algorithmen
❑ Bei deterministischen Algorithmen ist in jeder Programmstelle die nächste auszuführende
Anweisung eindeutig festgelegt (oder nicht existent).
❑ Bei nichtdeterministischen Algorithmen braucht entsprechend die nächste auszuführende Anweisung nicht eindeutig festgelegt sein: das Programm kann aus mehreren Alternativen wählen.
❑ Ein gängiges Modell für Nichtdeterminismus ist die (fiktive!) Rate-Verifikations-Turing”
maschine“, die im Fall der Wahlmöglichkeit automatisch den richtigen“, d.h. zur Lösung
”
führenden, Befehl wählt ( Ratephase“) und die Korrektheit der Wahl dann durch (deter”
ministisches) Weiterrechnen überprüft ( Verifikationsphase“).
”
Gibt es keinen richtigen“ Befehl, oder mehr als einen, so kann die Maschine einen der in
”
Frage kommenden gleichwertigen Befehle wählen.
❑ Da der richtige“ Befehl nicht im voraus bestimmt werden kann, ist diese Maschine nicht
”
unmittelbar implementierbar.
Aber: durch Austesten aller Möglichkeiten kann die richtige Wahl deterministisch bestimmt werden – jedoch nur mit exponentiellem Aufwand ( Backtracking“).
”
Informatik I – c Guido Rößling
Determinismus und Nichtdet. – Nichtdeterministische Algorithmen
9.10
Nichtdeterministische Algorithmen
❑ Jeder deterministische Algorithmus kann auch als nichtdeterministischer Algorithmus interpretiert werden, der von der Möglichkeit des Nichtdeterminismus keinen Gebrauch
macht.
❑ Die Klasse NP der nichtdeterministisch polynomiellen Algorithmen umfaßt genau die Algorithmen, die von einer Rate-Verifikations-Turingmaschine“ in polynomieller Zeit be”
rechnet werden können.
❑ Aus den beiden letzten Punkten folgt die Beziehung P E NP, da jeder deterministisch
polynomielle Algorithmus ebenfalls nichtdeterministisch polynomiell ist.
Zur Abgrenzung der deterministisch polynomiellen von den zunächst nur nichtdeterministisch polynomiellen Algorithmen gibt es eine Teilklasse NPC der NP-vollständigen“
”
Probleme, die zu den schwierigsten“ Problemen in NP zählen.
”
Es ist bislang nicht bewiesen, ob tatsächlich die Gleichheit zwischen den Klassen P und
NP gilt.
Informatik I – c Guido Rößling
Determinismus und Nichtdet. – Nichtdeterministische Algorithmen
9.11
Ergebnis
❑ Soweit die Problemstellung sowie die Komplexität es erlaubt, sollten deterministische
Algorithmen gewählt werden.
Dies gilt insbesondere, wenn eine exakte oder optimale L ösung erforderlich ist.
❑ Zur Prognose eines Ergebnisses in recht kurzer Rechenzeit k önnen insbesondere bei Entscheidungsprobleme probabilistische Algorithmen herangezogen werden.
❑ Für sehr komplexe Probleme, bei denen eine deterministische Berechnung einer exakten
bzw. optimalen Lösung nicht effizient möglich ist, können vielfach heuristische Algorithmen hilfreich sein.
Das gilt insbesondere bei Optimierungsproblemen, in denen nur eine (sehr) gute, nicht
aber zwangsläufig optimale Lösung erforderlich ist.
Beispiele hierfür sind die meisten NP-vollständigen Probleme.
❑ Nichtdeterministische Algorithmen lassen sich nur durch systematische Suche über (im
schlimmsten Fall) dem gesamten Suchraum realisieren (Backtracking, Branch and Bound).
Die Laufzeit dieser wiederum deterministischen Verfahren ist in der Regel exponentiell
zur Problemgröße und daher nicht mehr von praktischer Relevanz.
Informatik I – c Guido Rößling
Determinismus und Nichtdet. – Ergebnis
9.12
Literatur zu Determinismus und Nichtdeterminismus
❑ [Kre93a]
❑ [GJ79]
❑ [Dud93]
❑ [GZZZ95]
Informatik I – c Guido Rößling
Determinismus und Nichtdet. – Literatur
9.13
Geschichte der Korrektheit
❑ Schon seit Entwicklung des Algorithmusbegriffes, und noch fr üher in den Beweisen der
Mathematik sowie der Statik, ist die entscheidende Frage:
Leistet die gegebene Realisierung (Algorithmus, Beweis, Skizze, ) das geforderte?“
”
❑ In der Informatik kann zunächst zwischen zwei Sorten von Fehlern unterschieden werden:
☞ Hardware-Fehler, etwa Rechnungsfehler im Gleitkommabereich (vgl. Pentium-Prozessor) und
☞ Software-Fehler, in der Regel Programmierfehler.
❑ Die übliche Bezeichnung für (Software-)Fehler ist Bug.
☞ Bug (engl. Käfer“) geht auf einen lange unerklärlichen Fehler im Großrechner
”
Mark II im Jahr 1945 zurück, der sich schließlich auf eine Motte zurückführen
ließ, die auf zwei Leitungen gefallen war
Informatik I – c Guido Rößling
Korrektheit – Motivation und Geschichte
10.1
Fehlerarten
Folgende Software-Fehlerquellen sind häufig:
❑ Zugriff auf nicht existente Elemente ( null pointer“),
”
❑ Seiteneffekte bei Zeigern (Mitänderung von anderen Variablen),
❑ Division durch 0,
❑ nicht berücksichtigte Fälle,
❑ Endlosschleifen und inkorrekte Rekursionsanker,
❑ Ignorierung unerwarteter Werte ohne Überprüfung oder Fehlverhalten des Algorithmus
❑ und viele andere.
Informatik I – c Guido Rößling
Korrektheit – Fehlerarten
10.2
Fehlerarten
Als kleine Demonstration die geschätzte Anzahl Fehler in Windows 95 und Windows NT
gemäß gängiger Schätzmethoden in Abhängigkeit der Programmzeilen:
Abbildung 18: Fehleranzahl in Windows 95 und Windows NT (aus c’t 19/1998)
Informatik I – c Guido Rößling
Korrektheit – Fehlerarten
10.3
Testverfahren
❑ Wie kann festgestellt werden, ob ein gegebener Algorithmus korrekt ist?
☞ Prinzipiell gibt es zwei Möglichkeiten: Testverfahren und Verifikation
❑ Wir gehen nun zunächst auf die Testverfahren ein.
❑ Die Testverfahren lassen sich in zwei Untertypen unterteilen:
☞ Statisches Testen
Hierzu zählen die Verfahren Schreibtischtest“, Walkthroughs und Codeinspektion.
”
☞ Dynamisches Testen mit den Unterverfahren Black Box-Test und White Box-Test.
❑ Auf die einzelnen Testverfahren wird auf den nächsten Folien kurz eingegangen.
Informatik I – c Guido Rößling
Korrektheit – Testverfahren
10.4
Statische Testverfahren
Bei den statischen Testverfahren können folgende Eigenschaften überprüft werden:
❑ Einhaltung von Darstellungskonventionen
❑ Dokumentationseigenschaften
Insbesondere Namensgebung und Kommentierung
❑ Komplexität
Insbesondere Schnittstellenbreite, Im- und Exportzahl von Klassen sowie Schachtelungstiefe.
❑ Kontrollstrukturen
Sind alle Programmteile überhaupt erreichbar?
Informatik I – c Guido Rößling
Korrektheit – Statische Testverfahren
10.5
Schreibtischtest und Walkthrough
Beim Schreibtischtest wird wie folgt vorgegangen:
❑ Ein Testfall wird mit ausgewählten Testdaten geplant
❑ Es werden nur Programmteilstücke getestet
❑ Basis des Tests ist das Listing, d.h. der Programmtext
❑ Die Testpersonen sind Programmierer
❑ Beim Testen werden kontextabhängige Annahmen gemacht.
☞ Das Verfahren Walkthrough“ funktioniert wie der Schreibtischtest, allerdings
”
wird der Code von einem Testteam statt einer Einzelperson getestet.
Informatik I – c Guido Rößling
Korrektheit – Statische Testverfahren : Schreibtischtest
10.6
Codeinspektion
❑ Bei der Codeinspektion besteht das Testteam aus einem Moderator, Vorleser, Protokollant
und Inspektoren.
❑ Das gesamte Programm wird von dem Team sequentiell durchgegangen auf Basis der
Listings und alle gefundenen Fehler werden gesammelt.
❑ Sehr hohen Nutzen (im Durchschnitt werden ca. 60-70% der Fehler gefunden)
❑ allerdings auch hohe Kosten
☞ bis zu 20% des Erstellungsaufwandes
Informatik I – c Guido Rößling
Korrektheit – Statische Testverfahren : Codeinspektion
10.7
Black Box-Test
❑ Testen der Schnittstelle einer Klasse getestet ohne Beachtung der Interna
❑ Hierzu werden Testeingaben gewählt, die in die Klasse(n) geleitet werden und Ausgabedaten produzieren.
❑ Vergleich mit denerwarteten Ausgabedaten
❑ Bei Unterschieden liegen folglich Programmfehler vor, die auszubessern sind.
❑ Es bleiben aber noch einige Fragen offen:
☞ Gab es Zustandsänderungen durch Methodenaufrufe?
☞ Werden alle Methoden des Programms benutzt?
☞ Welche Wirkungen haben die Methoden auf andere Objekte?
❑ Insgesamt ist die ausschließliche Betrachtung der Ausgabedaten daher nicht ausreichend.
Informatik I – c Guido Rößling
Korrektheit – Dynamisches Testen : Black Box-Test
10.8
Schema des Black Box-Tests
Abbildung 19: Schema des Black Box-Tests
Informatik I – c Guido Rößling
Korrektheit – Dynamisches Testen : Black Box-Test
10.9
White Box-Test
❑ Der White Box-Test setzt an den Schwachstellen des Black Box-Tests an:
☞ Beim Test der Klassen wird der Objektzustand mitberücksichtigt
☞ Es werden alle Methoden getestet
☞ Es werden alle möglichen Pfade durchlaufen (Testdeckung)
❑ Nachteile des White Box-Tests:
☞ große Komplexität
☞ hoher Aufwand
❑ Zusätzlich wird automatische Unterstützung benötigt.
Informatik I – c Guido Rößling
Korrektheit – Dynamisches Testen : White Box-Test
10.10
Testdeckungsgrade
Es gibt folgende Testdeckungsgrade für den Pfaddurchlauf bei White Box-Tests:
C0 Jede Anweisung wird mindestens einmal durchlaufen
C1 Jeder Zweig wird mindestens einmal durchlaufen
C2 Jede Bedingung wird mindestens einmal durchlaufen
C3 Jeder Zweig und jede Schleifengrenze wird mindestens einmal durchlaufen
... beliebige weitere Kombinationen
Informatik I – c Guido Rößling
Korrektheit – Dynamisches Testen : White Box-Test
10.11
Klassentest
Zum Testen von Klassen kann man wie folgt vorgehen:
1. Testplanung: in welcher Reihenfolge sollen die Methoden getestet werden?
2. Testvorbereitung für Methodentest
❑ Ermittlung der Testdatenmenge: alle Eingaben und Zustände der Klasse
❑ Auswahl geeigneter Testdaten
❑ Festlegen der Sollergebnisse
3. Testdurchführung: Ermittlung und Dokumentation der Istergebnisse
4. Testauswertung: Vergleich von Soll- und Istergebnissen
Informatik I – c Guido Rößling
Korrektheit – Klassentest
10.12
Integrationstest
Zuletzt ist noch ein Integrationstest durchzuführen, um zu überprüfen, ob das Zusammenspiel
der Klassen korrekt ist:
❑ Schrittweises Zusammenfügen der bereits einzeln getesteten Klassen;
❑ Neuer Test nach jedem Integrationsschritt
❑ Verwendung existierender Testdaten und -objekte sowie Treiber
❑ Überprüfung der Schnittstelle zwischen den Klassen
Hierzu gibt es zwei Vorgehensweisen:
❑ Top-Down Integration
❑ Bottom-Up Integration
Informatik I – c Guido Rößling
Korrektheit – Integrationstest
10.13
Top-Down Integration
❑ Die Wurzelklasse bildet den Ausgangspunkt
❑ Anfang des Tests ist ein lauffähiger“ rudimentärer Prototyp
”
☞ Design-Fehler können frühzeitig erkannt werden
☞ die Benutzungsschnittstelle kann frühzeitig getestet werden
Nachteile:
❑ Die Implementierung von Testobjekten ( Dummies“) kann aufwendig sein
”
❑ Bei einfachen Dummies“ bleiben Fehler verborgen
”
Die Variante Depth-First Integration unterstützt die Präsentation einer abgeschlossenen Teilfunktionalität des Programms; die Breadth-First Integration hingegen mehr den PrototypCharakter.
Informatik I – c Guido Rößling
Korrektheit – Integrationstest : Top-Down Integration
10.14
Bottom-Up Integration
❑ Bei der Bottom-Up Integration wird von unten nach oben integriert
☞ der Aufbau erfolgt auf Basis von getesteten, sicheren Grundlagen
❑ Die Bottom-Up Integration erlaubt daher evtl. auch paralleles Vorgehen unter Verwendung von Testtreibern.
❑ Nachteile:
☞ Benutzungsschnittstelle und Dynamik werden erst spät sichtbar
☞ Die Behebung spät erkannter Fehler ist besonders teuer
☞ Bei vernetzten Klassenhierarchien ist das unten“ schwer erkennbar
”
Informatik I – c Guido Rößling
Korrektheit – Integrationstest : Bottom-Up Integration
10.15
Produkttest
❑ Am Abschluß der Tests steht der Produkttest
☞ Test des fertiggestellten Produkts ohne Dummies oder Treiber
❑ Bei der Testplanung ist dazu die Reihenfolge der zu testenden Benutzerfunktionen festzulegen.
❑ In der Testvorbereitung sind folgende Schritte auszuf ühren:
☞ Ermittlung der Testdatenmenge,
☞ Auswahl geeigneter Testdaten,
☞ Festlegung des Sollergebnisses.
❑ Bei der Testdurchführung und Auswertung wird wie beim Klassentest vorgegangen.
Informatik I – c Guido Rößling
Korrektheit – Produkttest
10.16
Bewertung der Testverfahren
Allen Testmethoden ist gemeinsam, daß
❑ sie vor allem zum Bestimmen und Ausmerzen von bekannten“ Fehlern dienen , die bei
”
Testläufen aufgetreten sind und
❑ sie stark davon abhängen, daß die Testdaten gut“ ausgewählt wurden, d.h. insbesondere
”
auch Sonderfälle abgedeckt werden.
Aber: gute“ Testdaten können nicht durch einen allgemeinen Algorithmus generiert wer”
den!
❑ mit ihnen nur bekannte“ Fehler eliminiert werden.
”
☞ Ein Algorithmus ist nur dann korrekt, wenn er überhaupt keine Fehler enthält
– also nicht nur die bekannten“ Fehler ausgebessert sind.
”
☞ Program testing can be used to show the presence of bugs, but never their
”
absence“ – Edsgar W. Dijkstra, 1972.
Im folgenden wird ein mathematischer Kalkül vorgestellt, der die Korrektheit von Programmen beweisbar macht.
Informatik I – c Guido Rößling
Korrektheit – Bewertung der Testverfahren
10.17
Korrektheitskriterien
Was macht einen korrekten Algorithmus aus?
❑ Spezifikation: Es wird sauber definiert, aus welchen Eingaben welche Ausgaben erzeugt
werden sollen.
❑ partielle Korrektheit I: Auf allen erwarteten Eingaben liefert der Algorithmus das gew ünschte Ergebnis, erfüllt also die Spezifikation.
❑ partielle Korrektheit II: Auf ungültigen Eingaben signalisiert der Algorithmus eine Verletzung der Spezifikation, etwa durch Abbruch der Routine oder Setzen eines daf ür reservierten Ergebnisses.
❑ Terminierung: Der Algorithmus beendet bei allen Eingaben seine Rechnung nach endlicher Zeit.
❑ Totale Korrektheit Spezifikation und partielle Korrektheit I + II sowie Terminierung.
Im folgenden wird betrachtet, wie man diese Aspekte mathematisch sauber fassen und auch
in viele Programme einbetten kann.
Informatik I – c Guido Rößling
Korrektheit – Korrektheitskriterien
10.18
Spezifikation
Vor der Implementierung eines Algorithmus sollte man erst eine Spezifikation des Algorithmus erstellen.
Bestandteil der Spezifikation sind:
❑ Wieviele Parameter welchen Typs erwartet der Algorithmus in welcher Reihenfolge?
❑ Welche Werte oder Kombinationen sind für die Parameter zulässig? Welche sind unzulässig?
❑ Welche Ausgabe soll der Algorithmus liefern, wenn alle Parameter zulässig sind?
❑ Wie soll der Algorithmus sich verhalten, wenn mindestens ein Parameter nicht zul ässig
war?
❑ Wie läßt sich das Ergebnis formal-logisch (etwa in Aussagenlogik oder Prädikatenlogik)
formulieren?
Umgangssprachliche Definitionen sind oft zu ungenau!
Informatik I – c Guido Rößling
Korrektheit – Spezifikation
10.19
Probleme bei der Spezifikation
Empfehlenswert ist folgendes Vorgehen:
1. Überlegen, was der Algorithmus für ein Ergebnis liefern soll, etwa f(a, b) =
”
max(a, b)“
2. Versuch, das Ergebnis mathematisch präzise zu fassen, ggf. unter Zuhilfenahme
von Prädikaten und Arithmetik
3. Schrittweise Transformation des Ergebnisses in einzelne Komponenten, etwa
durch Fallunterscheidung
4. Angabe von Befehlen oder Befehlssequenzen, die genau diese Transformationen
repräsentieren
5. Überprüfung des Ergebnisses durch Verifikation
6. Betrachten aller übriggebliebenen Voraussetzungen: diese geben die g ültigen Werte für die Parameter an.
Vorsicht: Dieses Verfahren ( Algorithmensynthese“) ist sehr zeitaufwendig und erfordert
”
einige Übung!!!
Informatik I – c Guido Rößling
Korrektheit – Spezifikation : Probleme
10.20
Motivation der Verifikation
❑ Egal, ob man einen Algorithmus einfach so“ programmiert oder durch die auf Seite 10.20
”
angegebenen Schritte gewonnen hat: es muß getestet werden, ob der Algorithmus das
gewünschte leistet.
❑ Hierzu dient die Verifikation, ein Kalkül zur Überprüfung der Programmkorrektheit.
❑ Gegeben: Ein Algorithmus sowie die mathematische Spezifikation des erwarteten
Ergebnisses.
❑ Ziel: Eine mathematische Formel, die die Bedingungen enthält, unter denen der Algorithmus die Spezifikation des Algorithmus erfüllt.
❑ Im schlimmsten Fall ergibt sich falsch“: der Algorithmus erfüllt die Spezifikation
”
nie.
❑ Im besten Fall ergibt sich wahr“: der Algorithmus erfüllt die Spezifikation immer.
”
❑ In vielen Fällen enthält die Formel Beschränkungen für die Parameter, etwa
x GIH 0“. In diesen Fällen liefert der Algorithmus nur dann das korrekte Ergebnis,
”
wenn diese Bedingungen erfüllt sind.
Informatik I – c Guido Rößling
Korrektheit – Motivation der Verifikation
10.21
Generelle Vorgehensweise
☞ Inhalt der Verifikation ist die schrittweise Anpassung der Bedingungen an die einzelnen Befehle.
☞ Das Vorgehen ist dabei folgendes:
❑ Gegeben seien ein Befehl und eine Bedingung, die nach seiner Ausf ührung gelten
soll ( Nachbedingung“).
”
❑ Gesucht ist eine Bedingung, die vor der Ausführung des Befehls gelten muß, damit
anschließend die Nachbedingung erfüllt ist ( Vorbedingung“).
”
❑ Die Verifikation arbeitet den Algorithmus von unten nach oben durch und erstellt
zu jeder Nachbedingung eines Befehls eine passende Vorbedingung.
❑ Die Vorbedingung sollte die schwächst mögliche sein, die die Nachbedingung
erfüllt.
Muß vor der Ausführung eines Befehls etwa g¾G
gelten, so lautet die korrekte
æ
Vorbedingung gÖG , nicht etwa g²G .
Andernfalls wird die Nutzbarkeit des Algorithmus künstlich eingeschränkt.
Informatik I – c Guido Rößling
Korrektheit – Vorgehensweise
10.22
Weakest Precondition
❑ Warum arbeitet die Verifikation von unten nach oben?
☞ Es wird davon ausgegangen, daß der Autor weiß, was der Algorithmus leisten soll
☞ Diese Anforderung liegt als Spezifikation im Sinne einer logischen Aussage vor, die
gleichzeitig Nachbedingung des Algorithmus ist
☞ Überprüft werden soll, in welchen Fällen der Algorithmus das gewünschte leistet.
❑ Das Schema der Notation der Berechnung der Vorbedingung ist folgendes:
wp(Befehl, Nachbedingung) Vorbedingung
❑ Leseweise: Die schwächste Vorbedingung zur Erfüllung von Nachbedingung nach dem
”
Befehl Befehl ist Vorbedingung.“
❑ wp steht für weakest precondition“ ( schwächste Vorbedingung“) und berechnet zu je”
”
dem gegebenen Befehl und seiner Nachbedingung die (schwächste) Vorbedingung.
❑ Die Vorbedingung des ¹«A ¸ €Q Befehls ist die Nachbedingung des [¹«A
¡
A
¸ €Q Befehls
❑ Durch diese Kettenbildung“ erhält man schließlich aus der Nachbedingung des gesamten
”
Algorithmus die Vorbedingung für den Algorithmus.
Informatik I – c Guido Rößling
Korrektheit – Weakest Precondition
10.23
Regeln von wp für Wertzuweisung
❑ Wie berechnet man nun
wp(Befehl, Nachbedingung) = Vorbedingung?
❑ Offensichtlich hängt dies von der Art des Befehls sowie der Nachbedingung ab.
❑ Im folgenden werden die einzelnen Arten der Befehl und die zugeh örige Regel für wp
Ç
angegeben. Für die Nachbedingung wird im folgenden das Prädikat verwendet.
❑ Befehl ohne Änderung von Variablen, etwa Ausgaben, Kommentare etc.:
wp(Befehl,
Ç
)
Ç
☞ Nachbedingung und Vorbedingung sind also identisch
❑ Einfache Wertzuweisung:
wp(x = ausdruck,
ÇSR
Ç
)
T
ÇSR
T
6 %VU 7 2 %8W_,VX
Ç
☞ Der Ausdruck 6 %VU 7 2 %W`, X bedeutet dabei, daß in alle Vorkommen von g , die
µ |Y! ersetzt werden.
nicht durch einen Quantor gebunden sind, durch w µ ~· ê
Informatik I – c Guido Rößling
Korrektheit – Regeln für Wertzuweisung
10.24
Beispiele zur Wertzuweisung
❑ wp(x = i;, gÉGce ) c¹‚Gce
☞ Damit der Wert von g nach der Wertzuweisung (dann identisch zu ¹ ) gr ößer als
5 ist, muß der Wert von ¹ bereits größer als 5 gewesen sein
❑ wp(x = 2 f i + 5, ÞIfgÉG
à ) ތf f ¹Ž> e ¡ G
àOf¹ê>
e G
d
à
àOf¹‚ G
¹ G Z
à
☞ Falls ¹ eine Variable vom Typ Integer (ganze Zahl) ist, ist die letzte Aussage
äquivalent mit
:
für
Integer
gilt
¹‚G
¹‚G
N ¹‚J
N ¹‚G Z


❑ wp(x = 8, ÐDgˆÛ [g
HlkšS ¡ ) ÐDgˆÕ –g
¸ ·0µÙ€
HlkšS ¡
☞ Das Auftreten von g ist gebunden, wird also durch die Wertzuweisung nicht
beeinflußt
❑ wp(x = a, ½jGce ¡ P½jGce
☞ g tritt in der Nachbedingung nicht auf, daher hat die Wertzuweisung keine Auswirkung auf die Nachbedingung
Informatik I – c Guido Rößling
Korrektheit – Regeln für Wertzuweisung : Beispiele zur Wertzuweisung
10.25
Beispiele zur Wertzuweisung
❑ wp(x = y, gÉGʽ ¡ P½jG¾½ ° w\[ € .
☞ Dies deckt sich offensichtlich
auch mit der Erwartung


æ
ØÙ½¿± Û –½  K¾k ¡

¡
æ
ØÙ½¿± 5à3Û –½  K¾k
n
K¾k
ØÙ½¿± 5à3Û –½ K¾k ¡ nÖ° w;[ €
w [ €
° \
☞ Wäre der Bereich des Quantors nur 5à gewesen, oder der g zugewiesene
❑ wp(x = 42, ؎½¿±
æ
Õ –½
KÊg ¡/¡
Wert mindestens 50, wäre die Aussage erfüllt
Informatik I – c Guido Rößling
Korrektheit – Regeln für Wertzuweisung : Beispiele zur Wertzuweisung
10.26
Regeln von wp für Blöcke
❑ Blöcke oder zusammengesetzte Anweisungen haben die Form
Å
]2^`_^badcfe'g
]2^`_..^badchg
Æ
❑ Die Vorbedingung des Blocks ergibt sich hierbei durch das schrittweise Berechnen der
Vorbedingungen aller Befehle von unten nach oben gemäß der folgenden Regeln:
]^:_C^,aicjekg
]2^`_^badchg
Ç
Æ , ¡ ]2^`_^badcjelg
]^:_C^,aicmh
Ç
1. wp( Å
wp( Å
, )
☞ Die Nachbedingung des letzten Befehls ist identisch zur Nachbedingung des
]^:_C^,aicjekg ]2^`_^badc;n elgP]2^`_^badc\ng Ç
Blocks
? ]2^`)_^badc n
2. wp( Å
]2^`_^bad c e g ]^:7 _C^,aic n e
Ç
7 , wp(
wp( Å
? ))
☞ Die Vorbedingung des ¹ A ¸ €Q Befehls des Blocks ist gleichzeitig die Nachbe
dingung des –¹©A ¡ A ¸ €Q Befehls
Informatik I – c Guido Rößling
Korrektheit – Regeln für Blöcke
10.27
Regeln von wp für Blöcke
]^:_C^,aic e
]^:_C^,aic e
Ç
? ¡ Ç
3. wp( Å
wp( Å , wp(
? ))
☞ Die Nachbedingung des Blockanfangs ist identisch zur Vorbedingung des ersten Befehls
Ç
Ç
4. wp( Å , ¡ ☞ Die Vorbedingung des Blocks ist die Vorbedingung des ersten Befehls
☞ Ist der Block leer, so ist die Vorbedingung des Blocks identisch zur Nachbedingung des Blocks (Regel 1 und 4)
Informatik I – c Guido Rößling
Korrektheit – Regeln für Blöcke
10.28
Regeln von wp für Blöcke
üofprqtsvuwqÛý
ü
üo
ƒ„’…“„8‡‰ˆYŠ”
ƒ„’…“„8‡‰ˆ • ”
...
ý
prqtsvuwq ý
’
üo ý
Z ’
üo — ý
üo
ü.xmy
’
ü'‚Nx
ü'‚Nx
’
...
‘kz
ü8o ý
Y ’
ý
’
ü.xmy
ü'‚Nx
” ƒ„’…Y„8‡,ˆV•–
” ƒ„’…Y„8‡,ˆœ›
ý
o
” ƒ„†…Y„8‡‰ˆYŠG Z`™
of— ™ ý
o\ž ™ ý
ü.xmy
’
’
ü.xmy
ý
{m‹$Œ.‹w˜|š™
‘
‘
ü.xmy
’
ý
’
” ƒ„†…Y„8‡‰ˆ'¡
m{ ‹wŒ.‹wG|~Ž ý ’ ü.x,8P‘ z
ü.x,8P‘
ý
{m‹wŒ.‹wG| Ž
ü.x,8P‘
{m‹wŒ.‹wG| ™ ý
‘
’
{m‹$Œ.‹w˜| Ÿ ý ’
ü.xmy
ý
‘P{m‹wŒ.‹wG| ¢˜£kŽ
o ™ý ’
Š
MlO
O M
ƒ„’…“„8‡‰ˆ ¡ O Š ” üo ý ü'‚¤x
o ý ü.xmy ‘ {m‹wŒ.‹$˜| ¢
” ƒ„’…“„8‡‰ˆ ¡ ‹ M–¥ ™ ’
M ’
ƒ„’…“„8‡‰ˆ'¡'” üo ý ü.x,8P‘ ý ü.x‰P‘
ý
‹ M*¥ ’
{m|~}$€ ’
{m‹wŒ.‹w˜| ¢
üo
‹ M*¥ ý ’ ü.x,8P‘ {m|~}$€ ý
Y
ý
ü'‚Nx
‘P{m|~}$€
ý
’
’
ü.x,8P‘
ü.x,8P‘
ý
{m‹wŒ.‹wG| ¢G£ ™
{m‹wŒ.‹$˜| ¢˜£kŽ
ý
ý
Tabelle 16: Schema der Verifikation von Blöcken
Informatik I – c Guido Rößling
Korrektheit – Regeln für Blöcke
10.29
Beispiel zu Blöcken
Å ½jG
Å
¦
Æ@
Å@ –½À>tÞ ¡ C eBG
x = y + 3;
Å gaC eBG
x = x C
5;
Å gÉG
Å gÉG
Å gÉG
Æ (natürliche Zahlen!)
àªÆM
Å0e­C ½À>
eBG
àªÆM
Ŷ½jG
¦
Æ
àOÆ
àÝÆ
y = y + 1;
Æ
Ŷ½¿G
àÝÆ
àªÆM
Å
Ç *_<
7 Æ
Tabelle 17: Beispiel zur Verifikation von Blöcken
Informatik I – c Guido Rößling
Korrektheit – Regeln für Blöcke : Beispiele
10.30
Regeln von wp für IF
❑ Im Fall eines if-Befehls ohne else gibt es zwei mögliche Abläufe:
☞ Die Bedingung Ausdruck ist wahr, so daß der Befehl Befehl ausgef ührt wird.
Ç
☞ Damit nach der Ausführung des Befehls gilt, muß vorher sowohl Ausdruck
Ç
als auch wp(Befehl, ) gelten
Ç
☞ Vor dem if muß die Aussage Ausdruck n wp Befehl ? ¡/¡ gelten
☞ Die Bedingung Ausdruck ist falsch, so daß Befehl nicht ausgef ührt wird.
Ç
Ç
☞ Damit nach dem if gilt, muß in diesem Fall also bereits vorher gelten, was
Ç
zu der folgenden Aussage führt: m Ausdruck n
❑ Die beiden Teilaussagen werden nun zusammengesetzt.
☞ Es muß mindestens eine der beiden Aussagen wahr sein, so daß sie über oder
( o ) verknüpft werden können
❑ Man erhält insgesamt also
Ç
wp(if (Ausdruck) Befehl, )
Ç
Ç ¡
Ausdruck n wp Befehl ? +¡ ¡ £
o m Ausdruck n
Informatik I – c Guido Rößling
Korrektheit – Regeln für IF
10.31
Regeln von wp für IF
❑ Ein vorhandener else-Teil kann identisch behandelt werden:
]2^`_^badcCe
wp(if Ausdruck
Ausdruck n wp(
2] ^`_^badc`§
] else
^:_C^,aic e Ç
?
)o
?
Ç
)
m¨:©«ª‰¬\­`©«®m¯ n wp ]2^`_^badc §
?
Ç ¡
❑ Die auf]^:der
_C^,ailetzte
c § Folie angegebene Regel für if ohne else ist ein Spezialfall dieser Regel,
leer ist
in der
]^:_C^,aic;§ Ç
Ç
☞ entsprechend gilt dann wp(
? ¡ Informatik I – c Guido Rößling
Korrektheit – Regeln für IF
10.32
Beispiele zu Fallunterscheidungen
ü
ü'°
if (x X
y)
z = x;
else
z = y;
ý
°´³ ± ý
ü'°
° µ ± Š °¶³ ± ‡·± µS°ý
´
X²± ‡
ü'°
°¹¸²º … ° ” ° G±™šŠ °¶³ ± ‡·± ¸»º … ° ” ° ˜ ±™ ý
X²± ‡
ü'°
°¹¸²¼¾½–¿ ” ° ˜±™ªŠŒ„T” ° X»±™ª‡·± ¸»¼¾½–¿ ” ° G ±™ ý
X²± ‡
ü'°¹¸²¼¾½–¿ °
ý
ü.xmy q ý
” ˜±™ ’
‘ ˜‹ M
ü8Ãĸ²¼
½–¿ °
” G
± ™ ý ’ ü.x,8P‘ À ŒGÁ“˜‹ M* | p ‹ ý ’ ü.x,8P‘ q G‹ M ý
ü ¸²¼¾½–¿ °
ý
ü.xmy p ý
±
” ˜±™ ’
‘ ‹Å| ‹
ü8Ãĸ²¼
½–¿ °
ý
ü.x,8P‘
p ‹ ý ’ ü.x,8P‘ ‹w| p ‹ ý
”
G
±
™
’
À
G
Œ
“
Á
˜

‹
|
M*Â
ü8Ãĸ²¼
½–¿ °
” G
± ™ ý ’ ü.x,8P‘ À ŒGÁ“˜‹ M* | p ‹ ý
T
X²± Š
’
ü.xby
‘À
ŒGÁ“G‹ M* | p ‹ ý
Tabelle 18: Beispiel zur Verifikation von Fallunterscheidungen
☞ Der angegebene Algorithmus bestimmt also das Maximum zweier beliebiger
Zahlen x, y
☞ @˜·š€ bzw. @ä» ¸ stehen dabei als Abkürzung für Precondition und Postcondition
Informatik I – c Guido Rößling
Korrektheit – Regeln für IF : Beispiele
10.33
Regeln von wp für Schleifen
❑ Schleifen bestehen üblicherweise aus folgenden Teilen:
☞ Initialisierung, insb. des Schleifenzählers,
☞ Abbruchs- oder Fortsetzungsbedingung
☞ Schleifenkörper, sowie
☞ Befehlen zum Ändern des Schleifenzählers.
❑ Zur Verifikation von Schleifen muß zunächst eine Invariante gefunden werden
☞ Die Invariante ist eine logische Aussage, die nach jedem Schleifendurchlauf
erfüllt ist
❑ Da alle Schleifen von Java funktional äquivalent sind, wird nur die while-Schleife als
einfachste betrachtet
☞ Denkaufgabe: Wie kann eine for-Schleife in eine while-Schleife umgesetzt
werden?
Informatik I – c Guido Rößling
Korrektheit – Regeln für Schleifen
10.34
Invariante
❑ Um eine Schleife verifizieren zu können, muß sie noch um zwei Komponenten ergänzt
werden: eine Invariante und eine Variante.
☞ Die Invariante ist eine logische Bedingung, die vor und nach jedem Schleifendurchlauf
gelten muß.
☞ Damit gilt sie insbesondere auch nach der Initialisierung sowie bei Schleifenende
☞ Da bei Schleifen i.a. nicht bekannt ist, wie oft sie durchlaufen werden, muß
die Invariante Inhalte absichern, die auch bei beliebig ofter Wiederholung wahr
bleiben
☞ Die Variante ist ein Integer-Ausdruck, der bei jedem Schleifendurchlauf kleiner werden
muß, ohne dabei negativ zu werden.
❑ Die Invariante beschreibt daher unveränderliche“ Bedingungen, deren Gültigkeit durch
”
die Schleife nicht verändert wird – wenngleich sie während des Schleifenkörpers durchaus
verletzt sein darf.
Informatik I – c Guido Rößling
Korrektheit – Regeln für Schleifen : Invariante
10.35
Invariante
Folgende Schritte sind der Reihe nach durchzuführen:
1. Die Nachbedingung der Schleife muß aus ` ьyy'· µê|Y+ y€¶~¹ºQ µäQ
bzw. `ŸM»· ¸ € ¸ ÒµäQ y€~ªº¹ Q µ¦Q nzÂQ«Æ w · ¹ w Q ¸ € ) folgerbar sein.
n
ÂQÇÆ w · ¹ w Q ¸ € )
2. Die Nachbedingung des letzten Schleifenbefehls ist Å0ÂQ«Æ w ·0¹ w Q ¸ €Æ
3. Falls der Schleifenzähler am Schleifenende geändert wird, sind zunächst diese
Befehle zu verifizieren.
4. Der Körper wird mit den Regeln für Blöcke verifiziert, siehe auf Seite 10.27ff.
5. Die Vorbedingung des ersten Schleifenbefehls muß folgen aus
nzªQÇÆ w · ¹ w Q ¸ € )
m ьyy'· µê|Y+ y€¶~ª¹¤Q µäQ
bzw.
nzªQÇÆ w · ¹ w Q ¸ € )
`ŸM»¶· ¸ € ¸ Òµ¦Q y€¶~¹ºQ µäQ
6. Die Nachbedingung der Initialisierungsbefehle ist Å0ÂQ«Æ w ·0¹ w Q ¸ €Æ
7. Die Vorbedingung der Schleife ist die Vorbedingung der Initialisierungsbefehle.
Informatik I – c Guido Rößling
Korrektheit – Regeln für Schleifen : Invariante
10.36
Beispiele zu Schleifen
❑ Die unten angegebene Schleife implementiert die Fakultätsfunktion für natürliche Zahlen.
❑ Als Invariante wurde gewählt
¹
Q¿nÖ° w a
! H¾¹÷è
❑ Die nicht betrachtete Variante ist QrA ¹ .
i = 0;
fak= 1;
while (i K
n)
Å
i = i + 1;
fak = fak * i;
Æ
Informatik I – c Guido Rößling
Korrektheit – Regeln für Schleifen : Beispiele
10.37
Beispiele zu Schleifen
i = 0;
fak = 1;
È
while (i
Í
n)
i = i + 1;
fak = fak *
Ê
Informatik I – c Guido Rößling
È nÉ 0Ê
È n É 0 Ë true Ê
È 0 Ì n Ë 1 = 0! Ê
È i Ì n Ë 1 = i! Ê
È i Ì n Ë fak = i! Ê
È i Ì n Ë fak = i!
È i Ì n Ë fak = i! Ë i Í n Ê
È i Í n Ë fak = i! Ê
È i+1 Ì n Ë fak = ((i+1)-1)! Ê
È i Ì n Ë fak = (i-1)! Ê
È i Ì n Ë fak Ð i = i! Ê
i; È
i Ì n Ë fak = i! Ê
È i Ì n Ë fak = i! ËbÑ (i Í n) Ê
È i Ì n Ë fak = i! Ë i É n Ê
È i = n Ë fak = i! Ê
È fak = n! Ê
Vorbedingung
Definition Fakultät
wp Wertzuweisung
wp Wertzuweisung
Invariante
Ë
Ì Ë iÍ n Î i Í
Invariante Bedingung (i n
i:N
I . ( i n i+1 n)
wp Wertzuweisung
Ï
Í Î
Ì
n)
Definition der Fakultätsfunktion
wp Wertzuweisung
Invariante
ËbÑ
Ò É
Invariant
Bedingung
(i n) i n
i = n fak = i!
fak = n!
Nachbedingung
Ñ Í
Ë
ÊfÎ
Korrektheit – Regeln für Schleifen : Beispiele
10.38
Totale Korrektheit
❑ Die bisherigen Betrachtungen bezogen sich lediglich auf die partielle Korrektheit, d.h. die
Frage, ob der Algorithmus das tut, was er tun soll.
❑ Um einen komplett korrekten Algorithmus zu erhalten, muß jedoch auch die Terminierung, d.h. die Beendigung der Rechnung, sichergestellt werden.
❑ Erst wenn sowohl Terminierung als auch partielle Korrektheit nachgewiesen sind, gilt der
Algorithmus als total korrekt.
❑ Der Nachweis der Terminierung ist für Schleifen und Rekursion erforderlich.
Informatik I – c Guido Rößling
Korrektheit – Totale Korrektheit
10.39
Schleifen
❑ Hier wird ein Integer-Ausdruck verwendet (etwa AÀ¹ bei Schleifenzähler ¹ ) der mit jedem
Schleifendurchlauf kleiner werden muß, ohne den Wert 0 zu unterschreiten.
❑ Für Schleifen, die z.B. ¹ von einem gegebenen Startwert bis zu dem Endwert Q hochz ählen,
kann daher der Ausdruck QrA ¹ verwendet werden.
☞ Da ¹ mit jedem Durchlauf um (z.B.) eins größer wird, wird dieser Ausdruck mit
jedem Durchlauf kleiner, ohne die 0 zu unterschreiten
❑ In den Nachweis der partiellen Korrektheit sind dazu Umformungen einzuf ügen, die das
Kleinerwerden des Ausdrucks nachweisen.
Informatik I – c Guido Rößling
Korrektheit – Totale Korrektheit : Schleifen
10.40
Schleifen
❑ Rekursion
☞ Auch hier läßt sich ein Zähler verwenden, der allerdings nachträglich einzuführen ist
☞ In vielen Fällen kann auch über die Änderung der Argumente argumentiert wer
den, z.B. bei der Fakultätsfunktion (QxèªH¾QdfF –QMA ¡ è ), bei der das Argument mit
jedem Schritt um eins kleiner wird
Informatik I – c Guido Rößling
Korrektheit – Totale Korrektheit : Schleifen
10.41
Programmierparadigmen
Es gibt in der Informatik mehrere grundsätzliche Alternativen zum Entwurf von Programmiersprachen.
Jeder Alternative liegt ein separates Modell des Herangehens an die Implementierung zugrunde, ein Paradigma (Grundsatz oder Denkmuster).
Die wichtigsten Paradigmen in der Programmierung sind
❑ Imperative Programmierung,
❑ Objektorientierte Programmierung (aus der Imperativen Programmierung entstanden),
❑ Logische Programmierung und
❑ Funktionale Programmierung.
Im folgenden werden die einzelnen Paradigmen kurz vorgestellt.
Informatik I – c Guido Rößling
Imperative Programmierung
11.1
Allgemeines zur Imperativen Programmierung
❑ Imperative Programmierung ist die älteste Form der Programmierung. Imperativ“
”
stammt aus dem Lateinischen und bedeutet befehlend“.
”
❑ Vorgehen: Aufgliedern des Algorithmus in einzelne Befehle, meist Wertzuweisungen sowie Funktions- und Prozeduraufrufe.
Aus diesem Grund wird Imperative Programmierung auch als befehlsorientiert“ bezeich”
net.
❑ Sehr viele Programmiersprachen sind imperativ. Typische Vertreter sind beispielsweise:
☞ Assembler,
☞ BASIC-Dialekte,
☞ PASCAL und Turbo-Pascal
☞ sowie C.
❑ Daten werden in imperativen Programmiersprachen manipuliert durch direkte Wertzuweisungen an Variablen sowie Prozedur- und Funktionsaufrufe.
Informatik I – c Guido Rößling
Imperative Programmierung – Allgemeines
11.2
Modellierung von Daten und Objekten
Grundlegend zur Modellierung von Daten in imperativen Programmiersprachen sind Variablen der folgenden Typen:
❑ einfache Datentypen (etwa Integer, Float),
❑ Zeiger (auch als Referenz oder Pointer bezeichnet), die die Adresse von Variablen repräsentieren,
❑ Verbunde und Strukturen (records bzw. structs), in denen einzelne Datenelemente
in fester Reihenfolge angeordnet sind.
Durch Strukturen lassen sich auch dynamische Strukturen modellieren, etwa Listen:
TYPE i n t l i s t =
RECORD
v a l u e : INTEGER ;
next : i n t l i s t ˆ ;
END ;
Im Beispiel verweist next auf einen weiteren RECORD vom Typ intlist.
Informatik I – c Guido Rößling
Imperative Programmierung – Modellierung von Daten und Objekten
11.3
Objektorientierte Programmierung
Worum geht es bei objektorientierter Programmierung (OOP)?
❑ Die reale Welt besteht aus einer Menge unterscheidbarer, klassifizierbarer und interagierender Dinge ( Objekte“)
”
❑ Modellierung (eines Ausschnitts) der realen Welt durch kommunizierende Objekte
❑ Objekte bestehen aus einer Menge von Daten und Operationen auf diesen Daten
❑ Jedes Objekt hat einen eigenen Zustand (Instanzvariablen) sowie ein typisches Verhalten
(Methoden)
❑ ☞ Zusammenfassung (Kapselung) von Daten und Funktionen auf diesen Daten
☞ bessere Wartbarkeit
Informatik I – c Guido Rößling
Objektorientierte Programmierung – Motivation
12.1
Schlüsselbegriffe: Klassen
Eine Klasse umfaßt Daten und Methoden, die auf diesen Daten arbeiten.
Die Daten werden meist als Attribute bezeichnet.
Beispiel: Eine Klasse Auto“ umfaßt (u.a.) die folgenden
”
❑ Attribute: Karosserie, Typbezeichnung, Benzinpegel, Gangschaltung,
Höchstgeschwindigkeit, aktuelle Geschwindigkeit
❑ Methoden: abbiegen, fahren, bremsen, beschleunigen, halten, parke
hochschalten, herunterschalten
Eine Klasse ist ein Muster“ für alle Objekte diesen Typs.
”
Klassen geben eine statische Definition der Daten und Methoden an.
☞ Die Klasse Auto“ gibt eine (unvollständige) Beschreibung von Eigenschaften an, die
”
allen Autos gemeinsam sind.
Informatik I – c Guido Rößling
Objektorientierte Programmierung – Schlüsselbegriffe : Klassen
12.2
Objekte
Ein Objekt ist eine Instanz einer Klasse, also eine konkrete Auspr ägung.
Das Objekt übernimmt von der Klasse die Methoden sowie die Deklaration der Attribute,
kann aber die Werte der Attribute nach Belieben ändern.
Die Klasse definiert damit die Möglichkeiten, die alle Objekte dieser Klasse besitzen (im
Zuge der Methoden) sowie die Daten der Objekte (Attribute); die Werte der Attribute sowie
die Arbeit darauf bleibt den einzelnen Objekten überlassen.
Objekte entstehen zur Laufzeit
☞
Klassen entstehen zur Kompilierzeit ☞
dynamisch
statisch
Objekte die zu einer Klasse X gehören, haben den Typ X.
Beispiel: Alle möglichen Arten von Autos sind Objekt vom Typ Auto“.
”
Die Unterschiede zwischen den Objekten liegt in der Fahrgeschwindigkeit, H öchstgeschwindigkeit, Karosserie etc. – aber beide können alle vorhin angegebenen Methoden benutzen,
wie fahren, bremsen, beschleunigen.
Informatik I – c Guido Rößling
Objektorientierte Programmierung – Schlüsselbegriffe : Objekte
12.3
Attribute und Methoden
Wie bereits erwähnt, werden die Daten einer Klasse als Attribute bezeichnet.
Attribute können dabei sowohl primitive Typen (Zahlen, Zeichen, boole’sche Werte) sein, als
auch (Referenzen auf) Objekte.
☞ Sinnvollerweise wird man die Karosserie eines Autos nicht einfach als Zahl
codieren, sondern als Objekt einer Klasse mit Attributen wie Anzahl und Lage
der Scheinwerfer, Anzahl der Türen, Attribute können sichtbar oder auch versteckt sein (in verschiedenen Abstufungen).
Beispielsweise sollte das Attribut Passwort einer Klasse Rechneraccount“ nicht für alle
”
les- oder schreibbar sein.
In der Objektorientierung wird Methode als Sammelbegriff f ür Funktion und Prozedur verwendet. Es gibt drei Arten von Methoden:
❑ Zustand abfragend: get X()
❑ Zustand ändernd: set X()
❑ Zustand abfragend und ändernd: evaluate()
Informatik I – c Guido Rößling
Objektorientierte Programmierung – Schlüsselbegriffe : Attribute und Methoden
12.4
Abstrakte Datentypen
Ein sehr gutes Hilfsmittel zum Finden und Spezifizieren von Klassen sind die Abstrakten
Datentypen (ADT).
Ein ADT besteht aus
❑ einem Namen,
❑ der Angabe anderer verwendeter ADTs (vgl. Grundmengen“ bei der BNF),
”
❑ einer Spezifikation aller verfügbaren Methoden des ADTs,
❑ der Angabe aller Vorbedingungen oder Einschränkungen der Methoden,
❑ sowie der Angabe der Axiome“, die das Verhalten der Funktionen beschreiben.
”
Informatik I – c Guido Rößling
Objektorientierte Programmierung – Abstrakte Datentypen
12.5
Beispiel zu Abstrakten Datentypen
Name: ARRAY
Verwendete ADTs: INTEGER
Methoden:
new
: INTEGER
INTEGER
get
: ARRAY
put
: ARRAY
INTEGER
length : ARRAY
Ó
Ó
DÕ¤Ö ’×
BÙ DÖtÖtÚ Ú # # T × #
Î
Ó
INTEGER
Ò <9 Ø ù 9 *_< .$݆ÖtÚj×
Û Ù
× ÒÒ 9 ÉÉ ùù ËË 9 ÌÜ
ÌÜÛ *_< Ù .$݆ÖtÚj×
Axiome:
Ï Ú¶Þ–Újßfß;*_Ú\< à,á˜.$Ý†Ö Ï Ö 9$<# *D( Õ¤& Ô Ö <’9w×w# ×< & # T < ޖâPãåä\æçæß·á
Û *[.ÙÖ <*DÕ¤Ö <’× Õ# 9 ×&
Ù *[.Ö B %=.ÖtÚ # T Õ# 9 × Õ# 9 ×Yù & T
Ù B
BÙ %=*[..DÖ Ö B %=%=..ÖtÖtÚ Ú # # T T Õ# Õ# 9 9 × × # #w(Pè8×YÕ# 9 & ד& Ù *–B .Öt%=Ú .DÖt# Ú (P× #wè8Õ# 9 ×
B %=.DÖtÚ # *–.DÖtÚ Õ# 9 × Õ# 9 ×Y&ÜÚ
ÙB
Û *_< Ù .$Ý†Ö %R.ÖtÚ # T —# 9 ×w×& Û *_< Ù .$ݒÖtÚj×
Vorbedingungen:
<* <
pre
*[. Õ9
pre
%=.
Õ9
pre
Î
Î
ÎÔ
ARRAY
INTEGER
INTEGER
INTEGER
Mindestens ein Element groß
Lesezugriff nur auf existente Felder
Schreibzugriff nur auf existente Felder
<
gibt beim Erzeugen die Länge an
beachten: Falls Vorbedingung nicht erfüllt, Fehler!
*–.
%=.
geschriebenen Wert aus
%=. liest den mit
hat keinen Nebeneffekt
%=.
überschreibt vorhandene Werte
Schreiben des gelesenen Wertes ändert nichts am Feld
%=.
verlängert das Feld nicht
BÙ
B
B
B
Tabelle 19: Beispiel-ADT ARRAY“
”
Informatik I – c Guido Rößling
Objektorientierte Programmierung – Abstrakte Datentypen : Beispiel
12.6
Vom ADT zur Klasse
Die Definition des ADTs kann als Gerüst für eine Klasse genommen werden:
❑ Der Name des ADTs entspricht dem Klassennamen
❑ Jeder Funktion des ADTs entspricht genau eine Methode der Klasse
❑ Die Axiome können wenigstens teilweise als Spezifikation der Methoden dienen – und
damit als Nachbedingungen
❑ Die Vorbedingungen entsprechen den Vorbedingungen der Methoden
❑ Es ist lediglich“ der Inhalt der Methoden so zu implementieren, daß er der Spezifikation
”
entspricht.
Informatik I – c Guido Rößling
Objektorientierte Programmierung – Abstrakte Datentypen : Vom ADT zur Klasse
12.7
Von der Klasse zum Objekt
Wie kann man ein Objekt als Instanz einer Klasse erstellen, also z.B. ein bestimmtes ARRAY?
Zunächst ist eine Variable zu deklarieren, z.B. wie folgt:
Klassenname Variablenname;
Anschließend wird die Variable durch
Variablenname = new Klassenname()
instantiiert und enthält nun eine Referenz auf ein Objekt.
Es können auch Parameter angegeben werden:
Objektname = new Klassenname(Parameter)
Die Deklaration und Instantiierung kann auch zusammengefaßt werden:
Klassenname Objektname = new Klassenname();
bzw.
Klassenname Objektname = new Klassenname(Parameter)
Informatik I – c Guido Rößling
Objektorientierte Programmierung – Von der Klasse zum Objekt
12.8
Konstruktoren
In den meisten OO-Sprachen besitzen die Klassen Konstruktoren, mit denen Objekte erzeugt werden können.
Konstruktoren sind wie Methoden aufgebaut, haben aber einen besonderen Namen. In C++
und Java ist der Name des Konstruktors immer der Name der Klasse.
Der Konstruktor für ein ARRAY hat also die Form
public ARRAY()
Å@3Æ
oder aber – mit Parametern – beispielsweise
public ARRAY(int size)
Å@3Æ
Der Standardkonstruktor ohne Parameter wird – wenn nicht neu definiert – vom System
vorgegeben und legt lediglich ein entsprechendes Objekt an.
Konstruktoren haben das erzeugte Objekt als Ergebnis und ben ötigen daher kein return.
Informatik I – c Guido Rößling
Objektorientierte Programmierung – Von der Klasse zum Objekt : Konstruktoren
12.9
Konstruktoren
Bei Erzeugung des Objektes werden automatisch alle Attribute initialisiert; die Initialisierung
erfolgt im Sourcecode von links nach rechts und oben nach unten.
Der Konstruktor mit Parametern für ARRAY könnte beispielsweise wie folgt aussehen:
public ARRAY(int size)
Å
// reserviere Speicher für ¹/Ҁ Elemente;
Æ
und wird dann aufgerufen durch
ARRAY anArray;
anArray = new ARRAY(5);
oder direkt
ARRAY anArray = new ARRAY(5);
Informatik I – c Guido Rößling
Objektorientierte Programmierung – Von der Klasse zum Objekt : Verwendung
12.10
Konstruktoren
Der Programmierer hat für jede Klasse die Wahl zwischen folgenden Alternativen:
❑ Die Klasse hat keinen (expliziten) Konstruktor.
In diesem Fall wird der Standardkonstruktor verwendet, der implizit stets definiert ist.
❑ Die Klasse hat genau einen Konstruktor.
Der Konstruktor darf dabei auch beliebige Argumente enthalten.
❑ Die Klasse besitzt mehrere Konstruktoren.
Die Konstruktoren müssen sich in Reihenfolge, Anzahl oder Typ der Parameter unterscheiden, damit Java zur Laufzeit erkennen kann, welcher Konstruktor zu verwenden ist.
(Zur Erinnerung: Der Name aller Konstruktoren ist der Klassenname!)
Informatik I – c Guido Rößling
Objektorientierte Programmierung – Von der Klasse zum Objekt : Mögliche Fälle
12.11
Vererbung
Oft kann eine Klasse als eine Erweiterung oder eine Spezialisierung einer anderen Klasse
angesehen werden.
☞ Beispielsweise sind sowohl LKWs als auch Formel-1 Wagen spezielle Autos,
die eigene Eigenschaften besitzen (Nutzlast und Achsenzahl, bzw. Gewicht,
Rennstall und Spoiler).
❑ Duplizierung von viel Code aufgrund gemeinsamer Attribute und identischer Methoden –
insbesondere der gesamte Code der Klasse Auto“.
”
❑ Probleme bei Änderung von Auto-Attributen oder Methoden
☞ Versionskontrolle, Inkonsistenzen.
Insgesamt also :
❑ unschöne und unsaubere Modellierung
❑ Variablen müssen vom passenden“ Typ (Auto, LKW, Formel1Auto) deklariert wer”
den, da man sonst nicht auf Nutzlast bzw. Rennstall zugreifen kann.
❑ einem Auto kann nie ein LKW zugewiesen werden – ein LKW ist also kein Auto (!!!)
Informatik I – c Guido Rößling
Objektorientierte Programmierung – Vererbung : Problemstellung
12.12
Vererbung
Die objektorientierten Sprachen besitzen daher das Konzept der Vererbung.
Vererbung bedeutet, daß eine Klasse B (der Erbe“) eine Erweiterung oder Spezialisierung
”
einer Klasse A ( Vorfahr“) ist, notiert als A N B ( N “ = ist Vorfahr von“).
”
”
”
Der Erbe übernimmt dabei
❑ alle Attribute des Vorfahrs sowie
❑ alle Methoden des Vorfahrs.
Der Erbe kann gegenüber dem Vorfahr
❑ weitere Attribute besitzen,
❑ zusätzliche Methoden beinhalten, sowie
❑ die geerbten Methoden anders implementieren.
Informatik I – c Guido Rößling
Objektorientierte Programmierung – Vererbung : Motivation
12.13
Beispiele zur Vererbung
Einige Beispiele für sinnvolle Vererbung:
❑ Person N Student
Studenten sind Personen, die zusätzliche Attribute wie Uni und Fachrichtung, sowie
Methoden wie graduieren und vorlesung besuchen besitzen.
❑ Rechteck N Quadrat
Ein Quadrat ist ein Rechteck mit speziellen Eigenschaften, insb. bez üglich der Methode
flaeche, die anders (effizienter!) implementiert werden kann.
❑ Auto N LKW sowie Auto N Formel1Auto
Objekte vom Typ LKW oder Formel1Auto sind immer auch Autos.
Aus meiner Sicht nicht sinnvoll ist dagegen zum Beispiel Punkt N Polygon, da ein Polygon kein spezieller“ oder erweiterter“ Punkt ist.
”
”
Allerdings ist dies Anlaß für (fast) philosophische Streitfragen in der Modellierung – oft
dienen Punkte als Basis für alle Objekte in Grafiksystemen.
Informatik I – c Guido Rößling
Objektorientierte Programmierung – Vererbung : Beispiele
12.14
Beispiel zur Vererbung Teil 1
Zur Implementierung eines Grafiksystems wurden bereits die folgenden Klassen CGPoint
zum Modellieren eines Punktes und CGPolygon zum Modellieren eines Polygons entwickelt:
public class CGPoint
public class CGPolygon
Å
Å
Æ
int x, y;
Vector nodes = new Vector();
public void set(int x value,
int y value) Å@3Æ
public void translate(int d x,
int d y)
public void set(Vector new nodes)
public void translate(int d x,
int d y)
ÅM3Æ
ÅM3Æ
public void paint(Graphics g)
public void paint(Graphics g)
ÅM3Æ
ÅM3Æ
Informatik I – c Guido Rößling
ÅM3Æ
Æ
Objektorientierte Programmierung – Vererbung : Beispiele
12.15
Beispiel zur Vererbung Teil 2
Es bestehen offenbar Gemeinsamkeiten zwischen CGPoint und CGPolygon, die die Methoden translate und paint betreffen.
❑ Erstellen einer Klasse CGObject mit Methoden translate und paint, aber ohne
Attribute
❑ Deklarieren von CGPoint und CGPolygon als Erben von CGObject:
public class CGPoint extends CGObject
sowie
public class CGPolygon extends CGObject
Informatik I – c Guido Rößling
Objektorientierte Programmierung – Vererbung : Beispiele
12.16
Folgen der Vererbung im Beispiel
CGPoint und CGPolygon haben nun den gleichen Vorfahren CGObject.
❑ Überall, wo ein CGObject erwartet wird, kann nun auch ein CGPoint oder CGPolygon
benutzt werden
❑ Jedes CGObject-Objekt weiß, ob es sich um einen CGPoint oder einen CGPolygon
handelt und ruft die entsprechende korrekte Methode paint bzw. translate auf
☞ dynamisches Binden
❑ Es kann beispielsweise allen vorhandenen CGObjects gesagt werden, sie sollen sich anzeigen – CGPoint-Objekte benutzen dann die Methode der Klasse CGPoint, und CGPolyg
Objekte die Methode der Klasse CGPolygon.
❑ Das System kann konsistent ausgebaut werden durch Einf ührung weiterer Erben von
CGObject (etwa CGOval) oder CGPolygon (etwa CGFilledPolygon); die gemeinsamen Methoden können weiterhin direkt angesprochen werden.
❑ Befehle folgender Form sind möglich:
CGObject anObject = new CGPoint();
anObject = new CGPolygon();
Informatik I – c Guido Rößling
Objektorientierte Programmierung – Vererbung : Folgen
12.17
Abstrakte Klassen
Für (denkbare) Objekte vom Typ CGObject gibt es keine allgemeine M öglichkeit, den Methodenkörper für translate bzw. paint anzugeben, da sie keine Koordinaten besitzen
und daher auch nicht verschoben oder gezeichnet werden k önnen.
Anstatt die Methoden einfach leer zu lassen, bietet Java ein besseres Konzept: abstract Methoden bzw. Klassen.
Eine als abstract deklarierte Methode besitzt keinen K örper:
public abstract void paint(Graphics g);
Sobald wenigstens eine Methode einer Klasse abstract ist, muß die ganze Klasse als abstract
deklariert werden:
public abstract class CGObject
Å
Æ
Informatik I – c Guido Rößling
Objektorientierte Programmierung – Abstrakte Klassen
12.18
Abstrakte Klassen
Konsequenzen der Deklaration einer Klasse X als abstract:
❑ Da der Code der Klasse nicht vollständig ist, kann kein Objekt vom Typ dieser Klasse
instantiiert werden:
CGObject anObject = new CGObject();
gibt eine Compiler-Fehlermeldung.
❑ Jeder Erbe der Klasse muß entweder alle als abstract deklarierten Methoden implementieren oder selbst als abstract deklariert werden. CGObject wird quasi gezwungen,
translate und paint zu implementieren.
Informatik I – c Guido Rößling
Objektorientierte Programmierung – Abstrakte Klassen
12.19
Überladen von Methoden
Geerbte Methoden können auch überladen werden. Dazu wird die Methode neu implementiert unter Beibehaltung der Schnittstelle des Vorfahren; die Methode des Vorfahren im Erben
nicht mehr direkt sichtbar.
Auf die geerbte Methode kann über super zugegriffen werden. Diese Größe erlaubt den
Zugriff auf die Methoden des Vorfahren.
Beispiel:
❑ Klasse X habe eine Methode build window components, die verschiedene Buttons
und Textfelder in ein Fenster einfügt.
❑ Klasse Y, die von X erbt, will alle Buttons von X übernehmen, aber noch einen weiteren
Button einfügen.
build window components() Å
super.build window components();
//uebernehme Buttons
//Code zum Zufuegen eines Buttons
Æ
Informatik I – c Guido Rößling
Objektorientierte Programmierung – Überladen von Methoden
12.20
Definition von Interfaces
Interface = reine Schnittstellendefinition
Im Gegensatz zu einer abstrakten Klasse, die Attribute besitzen und Methoden implementieren darf, besteht ein Interface nur aus der Deklaration abstrakter Methoden sowie ggf.
Konstanten.
Interfaces können sowohl erweitert (☞ extends) als auch implementiert werden. Wie bei
der Vererbung einer abstrakten Klasse muß der Implementierer alle Methoden implementieren.
In Java-Notation:
public interface Interfacename
Å
public void methodenname(Parameter);
Æ
(Zugriffsrechte, Modifikatoren und Rückgabewerte sind beliebig wählbar)
Informatik I – c Guido Rößling
Objektorientierte Programmierung – Interfaces : Definition
12.21
Implementierung eines Interfaces
Implementierung eines Interfaces:
public class Klassenname implements Interfacename
Å
public void methodenname(Parameter)
Å
Æ
Æ
Eine Klasse kann auch mehrere Interfaces implementieren, die dann durch Komma getrennt
angegeben werden:
public class Klassenname implements Interfacename1, Interfacename2
Informatik I – c Guido Rößling
Objektorientierte Programmierung – Interfaces : Implementierung
12.22
Anwendung von Interfaces
❑ Jede Klasse, die das Interface implementiert, kann die Methoden anders implementieren
❑ Klassen können auf Interfaces für die Realisierung von Funktionen zurückgreifen
☞ Delegation“ der Aufgaben
”
❑ Normalerweise wird die Zuordnung der das Interface realisierenden Klasse zur aktuellen
Klasse durch eine Methode realisiert, etwa set Interface.
❑ Vorteil: Zur Laufzeit kann die Delegation geändert werden.
Informatik I – c Guido Rößling
Objektorientierte Programmierung – Interfaces : Anwendung
12.23
Casting
Casting ist die explizite Umwandlung eines Datentyps in einen anderen.
Casting ist nur möglich, wenn die Datentypen einander ähnlich sind, z.B. kann int nach
float umgewandelt werden und umgekehrt, aber nicht nach oder von boolean.
❑ Casting von einem Objekt object in einen Datentyp Typ wird notiert als
(Typ)object
Beispiel: float f = 5.5; int i = (int)f; führt zu i = 5.
❑ Casts sind z.B. bei der Verwendung von Vector sinnvoll, da ein Vector nur (allgemeine) Object-Objekte speichert. Um auf konkrete Funktionalität eines Objekts zuzugreifen, muß es erst gecastet“ werden:
”
(CGObject)elementVector.elementAt(0)
❑ Ist der Cast zwischen unverträglichen statisch deklarierten Typen, erzeugt der Compiler
eine Fehlermeldung, z.B. beim Casten von int nach boolean.
❑ Beim Downcasten“, dem Cast von einem allgemeinen Objekttyp (etwa CGObject) zu
”
einem Erben dieses Typs (etwa CGPolygon), wird ggf. eine ClassCastException zur
Laufzeit erzeugt.
Informatik I – c Guido Rößling
Objektorientierte Programmierung – Casting
12.24
Literatur zur Objektorientierung
❑ [Kre93b]
❑ [Fla96]
❑ [Rö97]
Informatik I – c Guido Rößling
Objektorientierte Programmierung – Literatur
12.25
Logische Programmierung
❑ Logische Programmierung wird auch als Prädikative Programmierung bezeichnet.
❑ Grundkonzept der Logischen Programmierung sind Fakten sowie Regeln. Die Berechnung
erfolgt durch Anwenden der Regeln und Fakten auf die Eingabedaten; die Antwort ist
wahr“ oder falsch“ bzw. eine Belegung von Variablen, die die Aussage erf üllt.
”
”
❑ Fakten sind eine Ansammlung von gültigen, d.h. erfüllten Prädikaten, die sozusagen das
Grundwissen“ darstellen.
”
❑ Regeln geben an, wie man anhand schon bekannter Fakten neue Fakten gewinnen kann.
❑ Der wichtigste Vertreter der Logischen oder Prädikativen Programmiersprachen ist PROLOG ( PROgramming in LOGic“)
”
❑ Einfaches mathematisches Beispiel: Eine Funktion zur Berechnung von Potenzen.
ù
potenz(x, 0, 1).
# g < H
potenz(x, n, m) :- potenz(x, n-1, m/x). # g ¾
H ¼
p
g
<7 H¾¼ÖEg
Tabelle 20: PROLOG-Programm zum Berechnen von Potenzen
Informatik I – c Guido Rößling
Logische Programmierung – Grundidee
13.1
Anfragen
❑ Anfragen an das System erfolgen in folgender Art:
☞ ? potenz(5, 2, 25)
Mit
 dieser Art der Anfrage wird die Gültigkeit der Frage überprüft, d.h. gefragt gilt
”
e H
e ?“. Das Ergebnis der Anfrage ist true bzw. false.
☞ ? potenz(5, 3, m)
Hier wird nach dem Wert ¼ gefragt, für den das Prädikat true liefert, falls es einen
solchen Wert gibt. Ergebnis dieser Anfrage ist m=125.
❑ Zur Beantwortung von nicht-elementaren Anfragen wird die Resolution benutzt, bei der
systematisch alle Möglichkeiten ausprobiert werden, bis eine Lösung gefunden wurde
oder keine Alternative mehr existiert.
Durch eine Erweiterung von PROLOG um Funktoren“, die logisch zusammengehörige Da”
ten zusammenfassen (einem PASCAL Record ähnlich) sowie die definierten arithmetischen
Operationen ist PROLOG äquivalent zu den Imperativen oder Funktionalen Programmiersprachen: jedes algorithmisch lösbare Problem kann durch PROLOG gelöst werden.
Informatik I – c Guido Rößling
Logische Programmierung – Anfragen
13.2
Resolution und Unifikation
Grundidee:
1. Kann ein Teil der Behauptung mit einem Faktum unifiziert“ werden, so ist nur der Rest
”
der Behauptung weiter zu untersuchen.
Unifiziert“ bedeutet dabei im wesentlichen die Überführung eines Ausdrucks in einen an”
deren durch Einsetzen von Termen in Variable, etwa – im obigen Beispiel – der Ersetzung
von ¼ durch e .
2. Kann ein Teil der Behauptung mit einer linken Regelseite unifiziert werden, so kann dieser
Teil durch die rechte Regelseite ersetzt werden.
3. Die Behauptung ist bewiesen, wenn sie durch Anwendungen der beiden ersten Schritte in
eine leere Behauptung überführt werden kann.
Informatik I – c Guido Rößling
Logische Programmierung – Resolution und Unifikation
13.3
Beispiel zur Resolution
Beispiel:
Zu beweisen
Regel
potenz(5, 3, m)
Anfrage
—
Regel 1: 3 ¯H 0, Faktum greift nicht.
potenz(5, 2, m / 5)
Regel 2: Wählen der Regel für potenz
potenz(5, 1, (m / 5) / 5)
Regel 2 (Regel 1 greift nicht)
potenz(5, 0, ((m / 5) / 5) / 5) erneut Regel 2 (Regel 1 greift nicht)
((m / 5) / 5) / 5 = 1
Regel 1, Unifiziere ((m / 5) / 5) / 5 mit 1
(m / 5) / 5 = 5
Arithmetische Umformung zur Unifikation
m / 5 = 25
Arithmetische Umformung zur Unifikation
m = 125
Arithmetische Umformung zur Unifikation
m = 125
Systemantwort
Tabelle 21: Beispiel zur Resolution
Informatik I – c Guido Rößling
Logische Programmierung – Resolution und Unifikation : Beispiel
13.4
Funktionale Programmierung
❑ Zentrales Element der Funktionalen Programmierung ist die Funktion, die die Eingabedaten in Ergebnisse abbildet.
❑ Beschreibung der Beziehung von Eingabe- zu Ausgabedaten durch mathematische Funktionen
❑ Zugrunde liegen relativ wenige elementare Ausdrücke und (Grund-)Funktionen, aus denen komplexere Funktionen zusammengebaut werden.
❑ Jede Funktion kann wiederum als Argument dienen, so daß etwa auch Funktionen auf
Funktionen definierbar sind.
❑ Grundlegendes Konzept: Rekursion
❑ Programm“ ist eine Sammlung von Funktionen; Berechnung“ ist das Anwenden ( Ap”
”
”
plikation“) einer oder mehrerer Funktionen auf einer Liste von Werten oder Ausdr ücken
(die wiederum Funktionen sein können).
❑ Mit funktionaler Programmierung können alle algorithmischen Aufgabenstellungen gelöst
werden; sie ist daher äquivalent zur Imperativen oder Objektorientierten Programmierung.
Informatik I – c Guido Rößling
Funktionale Programmierung – Grundidee
14.1
Funktionale Programmierung
❑ Wichtigster Vertreter der Funktionalen Programmiersprachen ist LISP ( list processing
”
language“)
❑ Essentiell für die Programmierung ist es, Variablen nicht als Behälter“ für Werte zu
”
interpretieren, sondern als Platzhalter für Werte oder Funktionen, mit denen – im mathematischen Sinn – symbolisch gerechnet wird.
❑ Grundlegende Datenstruktur von LISP ist die Liste. Es stehen Funktionen zur Verf ügung,
um die wesentlichsten Listenoperationen durchzuführen, etwa Zugriff auf das erste Element (CAR), Zugriff auf die Liste ohne das erste Element (CDR) sowie die Vereinigung
von Listen (CONS).
❑ Beispiel: Ein LISP-Ausdruck, der alle Elemente einer Liste aufsummiert:
( d e f i n e sum ( l i s t e )
( COND
; Fallunterscheidung
( ( EQUAL l i s t e NIL ) 0 )
; Falls leer , Ergebnis 0
( T ( + ( CAR l i s t e ) ( sum ( CDR l i s t e ) ) ) ) ) ) ; Kopf + Summe R e s t l i s t e
Informatik I – c Guido Rößling
Funktionale Programmierung – Grundidee
14.2
Beispiele zur Funktionalen Programmierung
❑ Mit einer einfachen Änderung kann man die obige Funktion in folgende Funktion transformieren: <
°“ [ ¹ ¸ € ¡ H
[9
%
[ 9 ¡ Hs°ˆ [ / ¡ > [  ¡ ¾
“
°
> fff> [ < ¡
9& sei dabei das ¹ -te Element einer Liste liste, die Q Elemente habe.
Die LISP-Funktion hat dann folgende Form:
( d e f i n e fktsum ( f l i s t e )
( COND
; Fallunterscheidung
( ( EQUAL l i s t e NIL ) 0 ) ; F a l l s l e e r , E r g e b n i s 0
( T ( + ( f ( CAR l i s t e ) )
; s o n s t Summe aus F u n k t i o n a n g e w e n d e t aus Kopf
( f k t s u m f ( CDR l i s t e ) ) ) ) ) )
; und R e k u r s i o n u e b e r R e s t der L i s t e
Bitte beachten Sie, daß die Funktion ° hier als Argument verwendet wird, d.h. nichts über
den Aufbau der Funktion (oder der Listenelemente!) gesagt wird.
Informatik I – c Guido Rößling
Funktionale Programmierung – Beispiele
14.3
Elisp
❑ Die wohl bekannteste Anwendung von Funktionalen Programmiersprachen ist der sehr
populäre Texteditor Emacs (für Unix, OS/2, Linux, Windows etc.), der eine LISP-Variante
namens Elisp ( Emacs Lisp“) benutzt.
”
Sämtliche Operationen – z.B. Einfügen und Löschen von Text, aber auch Suchen, Sortieren von Zeilen oder Blöcken sowie Befehlsdefinitionen und Menüs – sind in Elisp implementiert.
Der Benutzer kann jederzeit vorgefertigte oder selbstgeschriebene Elisp-Programme eingeben oder einladen, die die Funktionalität des Editors erweitern, aber auch abändern
können.
Informatik I – c Guido Rößling
Funktionale Programmierung – Elisp
14.4
Beispiel zu Elisp
Beispiel: Die folgende Funktion fragt vom Benutzer einen Dateinamen und eine Beschreibung ab und erstellt daraus einen HTML-Link.
( d e f i n e sum ( l i s t e )
( COND
; Fallunterscheidung
( ( EQUAL l i s t e NIL ) 0 )
; Falls leer , Ergebnis 0
( T ( + ( CAR l i s t e ) ( sum ( CDR l i s t e ) ) ) ) ) ) ; Kopf + Summe R e s t l i s t e
Es ergibt sich folgender Dialog:
Filename: haus.cg
Description: Skizze eines Hauses
Das Ergebnis ist dann folgender HTML-Text:
K P G@K LI GMK A HREF=“../Bsp/haus.cg“ G haus.cg K /A G (Skizze eines Hauses)
Informatik I – c Guido Rößling
Funktionale Programmierung – Elisp : Beispiel
14.5
Abbildungsverzeichnis
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Einordnung der Informatik . . . . . . . . . . . . . . . . . . . . .
Vom Problem zum Programm . . . . . . . . . . . . . . . . . .
Schematischer Aufbau des Systems . . . . . . . . . . . . . .
Ein typisches“ Fenster . . . . . . . . . . . . . . . . . . . . . . .
”
Klassenhierarchie für grafische Benutzerschnittstellen
Ableitungsbaum für eine einfache Grammatik . . . . . .
Ableitungsbäume für natürliche Zahlen . . . . . . . . . . .
Ableitungsbäume für ganze Zahlen . . . . . . . . . . . . . .
Syntaxdiagramm zur BNF auf Seite 3.24 . . . . . . . . . .
Syntaxdiagramm für ganze Zahlen . . . . . . . . . . . . . . .
Syntaxdiagramm für Aussagenlogik . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.8
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.13
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.17
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.17
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.19
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.21
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.27
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.28
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.11
Interpretation von „˜… ‡I‰†ŠŒ‹    ‘“’•”_”–”–”–”Õ„†…™š‡Œ‰/™ŠŒ‹/™› ™›
Schematischer Aufbau einer Turingmaschine . . . . . . . . . . . . . . . . .
Schema von und . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Verhalten der Funktionen für n=1, Í¢Í8Í ,5 . . . . . . . . . . . . . . . . . . . . . .
Verhalten der Funktionen für n=5, Í¢Í8Í ,12 . . . . . . . . . . . . . . . . . . . . .
Russische Matrioschkas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Fehleranzahl in Windows 95 und Windows NT (aus c’t 19/1998) . .
Schema des Black Box-Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
‘R™
. . . . . . . . . . . . . . . . . . . . . . 4.13
. . . . . . . . . . . . . . . . . . . . . . . . . . 5.7
. . . . . . . . . . . . . . . . . . . . . . . . . . 6.14
. . . . . . . . . . . . . . . . . . . . . . . . . . 6.18
. . . . . . . . . . . . . . . . . . . . . . . . . . 6.19
. . . . . . . . . . . . . . . . . . . . . . . . . . 7.2
. . . . . . . . . . . . . . . . . . . . . . . . . . 10.3
. . . . . . . . . . . . . . . . . . . . . . . . . . 10.9
Tabellenverzeichnis
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
BNF für natürliche Zahlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
BNF für ganze Zahlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ein- und mehrdeutige BNF für Teile der elementaren Arithmetik . .
BNF für elementare Arithmetik . . . . . . . . . . . . . . . . . . . . . . . . . . .
Leseweise der Junktoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Wahrheitstabelle der Junktoren . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Backus-Naur-Form für die Aussagenlogik . . . . . . . . . . . . . . . . . . .
Konversionsregeln 1-6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Konversionsregeln 7-12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
BNF für die Prädikatenlogik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
BNF Prädikatenlogik mit beschränkten Quantoren . . . . . . . . . . . . .
Turingmaschinen-Programm zum Invertieren von Binärzahlen . . . .
Faktoren für die Komplexität . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die wichtigsten Komplexitätsklassen . . . . . . . . . . . . . . . . . . . . . . .
Berechnungsdauer von n Rechenschritten nach Komplexitätsklasse
Schema der Verifikation von Blöcken . . . . . . . . . . . . . . . . . . . . . . .
Beispiel zur Verifikation von Blöcken . . . . . . . . . . . . . . . . . . . . . .
Beispiel zur Verifikation von Fallunterscheidungen . . . . . . . . . . . .
Beispiel-ADT ARRAY“ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
”
PROLOG-Programm zum Berechnen von Potenzen .
Beispiel zur Resolution . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 3.18
. . . . . . . . . . . . . . . . . . . . . . . . . . 3.20
. . . . . . . . . . . . . . . . . . . . . . . . . . 3.23
. . . . . . . . . . . . . . . . . . . . . . . . . . 3.24
. . . . . . . . . . . . . . . . . . . . . . . . . . 4.6
. . . . . . . . . . . . . . . . . . . . . . . . . . 4.7
. . . . . . . . . . . . . . . . . . . . . . . . . . 4.10
. . . . . . . . . . . . . . . . . . . . . . . . . . 4.14
. . . . . . . . . . . . . . . . . . . . . . . . . . 4.15
. . . . . . . . . . . . . . . . . . . . . . . . . . 4.19
. . . . . . . . . . . . . . . . . . . . . . . . . . 4.22
. . . . . . . . . . . . . . . . . . . . . . . . . . 5.12
. . . . . . . . . . . . . . . . . . . . . . . . . . 6.7
. . . . . . . . . . . . . . . . . . . . . . . . . . 6.15
. . . . . . . . . . . . . . . . . . . . . . . . . . 6.20
. . . . . . . . . . . . . . . . . . . . . . . . . . 10.29
. . . . . . . . . . . . . . . . . . . . . . . . . . 10.30
. . . . . . . . . . . . . . . . . . . . . . . . . . 10.33
. . . . . . . . . . . . . . . . . . . . . . . . . . 12.6
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.1
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.4
Index
Symbols
Backtracking 9.10
Halteproblem 5.13
MIMD 8.3
MISD 8.3
Master 8.5–8.6, 8.9–8.10
Primzahltest Solovay/Strassen 9.4
Quicksort 8.4, 9.2
SIMD 8.3
SISD 8.3
TSP 9.6–9.9
Worker 8.5–8.6, 8.9–8.10
NC 8.8
NPC 9.11
NP 9.11
P 9.11
Informatik I
Ziel 0.2
PROLOG 13.1
B
Berechenbarkeit 5.1, 5.3–5.14
Typische Probleme 5.14
Ziel 5.2
C
Church’sche These 5.13
D
determiniert 9.1–9.2, 9.6
Determinismus u. Nichtdeterminismus 9.1–9.12
deterministisch 5.1, 9.1–9.2, 9.10–9.12
dynamisch 12.3
E
entscheidbar 5.3–5.4, 5.13
Bezug zu rekursiv aufzählbar 5.4
F
Folgezustand 5.8
Formale Sprachbeschreibung 3.1–3.29
Ableitungsschritt 3.11
Alphabet 3.2, 3.3
Alternative 3.11
Backus-Naur-Form 3.8, 3.10–3.24
3.12
Ableitung 3.13
Ableitungsbaum 3.16–3.28
Ableitungssequenz 3.14–3.15, 3.28
Alternative 3.14
Arithmetische Ausdrücke 3.23
Binärzahlen 3.12
Ein- und Mehrdeutigkeit 3.21–3.22
Erzeugte Sprache 3.24
A
Abstrakte Datentypen 12.5–12.7
Axiome 12.5–12.7
Beispiel 12.6
Vom ADT zur Klasse 12.7
Vorbedingungen 12.5–12.7
Algorithmen 2.17–2.18
Aufwand siehe Komplexität
Definition 2.17
Typische Gebiete 2.18
Aufwand von Algorithmen siehe Komplexität
é
17.2
Ganze Zahlen 3.19–3.20
Natürliche Zahlen 3.17–3.18
Nonterminal 3.24
Notation 3.11–3.12
Priorität 3.24
Wort der Sprache 3.11, 3.13–3.15, 3.28
Kommentarzeichen 3.8
Kommunikationsform 3.1, 3.3
Konstante 3.8
Lexeme 3.5
Lexikalische Analyse 3.5
Literal 3.8
Nonterminal 3.10–3.11, 3.14
Notation 3.2, 3.3, 3.8
Parser 3.5
Regeln 3.3
Regelsystem 3.7
Reservierte Wörter 3.8
Semantik 3.7
Semantische Analyse 3.6
Sonderzeichen 3.8
Sprache 3.1, 3.3
Sprachform 3.3
Sprachstufe 3.2
Syntaktische Analyse 3.5, 3.6
Syntax 3.6, 3.7
Syntaxdiagramm 3.25–3.26
Terminal 3.10, 3.11, 3.14
Token 3.5
Zusammenfassung 3.27
Funktion 12.4, 14.1
Funktionale Programmierung 11.1, 14.1–14.5
Elisp 14.4–14.5
Emacs 14.4–14.5
LISP 14.2
Applikation 14.1
Beispiele 14.2–14.3, 14.5
Funktion 14.3
Rolle der Variablen 14.2
Funktionen siehe auch bei Rekursion
H
Heuristik 5.1, 9.5–9.9
heuristisch 9.1, 9.5–9.9, 9.12
I
Imperative Programmierung 11.1–11.3
Modellierung von Daten u. Objekten 11.3
Informatik
Begriff 1.1–1.6
Geschichte 1.8–1.19
Problemstellungen siehe Problemstellungen
Teilgebiete 1.7
Themengebiete 1.20–1.23
K
Komplement einer Menge 5.4
Komplexität 5.1, 6.1–6.24
6.13, 6.14
6.13, 6.14
average case 6.22, 6.23
Begriffe 6.3
average case 6.3
best case 6.3
Komplexität eines Algorithmus 6.3
Komplexität eines Problems 6.3
Platzbedarf 6.3
Problemumfang 6.3
worst case 6.3
Zeitaufwand 6.3
best case 6.22, 6.23
ê
ë
Elementare Kosten siehe Komplexität - Rechenschritte
Entwurfsüberlegungen 6.2
Implementierungs-Zeitkomplexität 6.4
Klassen 6.15–6.21
Y 6.15–6.21
Z 6.15–6.21
6.15–6.21
6.15–6.21
6.15–6.21
6.15–6.21
6.15–6.21
Laufzeitangaben 6.5
Motivation 6.4
Nutzen 6.6
O-Notation 6.11–6.21
Beispiele 6.12
Definition 6.11
Faustregel 6.12
konstanter Vorfaktor 6.11, 6.12
Startwert 6.11, 6.12
Platzkomplexität 6.4
Rechenschritte 6.7–6.10
Beispiel 6.8–6.10
Turingmaschinen-Zeitkomplexität 6.4
worst case 6.22, 6.23
KomplexitätskNC siehe NC
Korrektheit 5.1, 10.1–10.43
Fehlertypen 10.1
Geschichte 10.1
partielle Korrektheit 10.18, 10.42
Spezifikation 10.18–10.20
Terminierung 10.18
Testverfahren 10.4–10.17
Black Box-Test 10.4, 10.8, 10.9
Codeinspektion 10.4, 10.7
ìîí $ï
ìîí wðvï
ìîí~ñ òvó ï
ìîí ñ M òõó ï
ìîí Mîï ô M
ìîí M ï
ìîí M*ö ï
M*÷
ú
Grundbegriffe 4.5
Implikation ( ) 4.6–4.9
Junktoren 4.6–4.9
Äquivalenz siehe Logik - Äquivalenz ( )
Disjunktion siehe Logik - Disjunktion ( )
Faustregeln 4.8
Implikation siehe Logik - Implikation ( )
Konjunktion siehe Logik - Konjunktion ( )
Negation siehe Logik - Negation ( )
Unterschiede zur Umgangssprache 4.9
Konjunktion ( ) 4.6–4.9
Konversionsregeln 4.13–4.14
Negation ( ) 4.6–4.9
Nutzen 4.4
Prädikat 4.16–4.17
Definition 4.16
Prädikatenlogik 4.1, 4.15–4.24
Quantoren 4.18–4.24
Bereichsangabe 4.21
Probleme bei Auswertung 4.24
Variable 4.5
Wahrheitstabelle 4.7
Logische Programmierung 11.1, 13.1–13.4
Anfragen 13.2
Faktum 13.1–13.3
Funktoren 13.2
Regeln 13.1
Resolution 13.2–13.4
Unifikation 13.3
ü
ø
ü
û
M
Multitasking 8.2
Multithreading 8.2
N
nicht rekursiv aufzählbar 5.3
ú
ù
û
Integrationstest 10.13–10.15
Klassentest 10.12
Produkttest 10.16
Schreibtischtest 10.4, 10.6
Walkthrough 10.4, 10.6
White Box-Test 10.4, 10.10, 10.11
totale Korrektheit 10.18, 10.42
Totale Korrektheit
Rekursion 10.43
Schleifen 10.42
Typische Fehlerquellen 10.2
Verifikation 10.4, siehe Verifikation
L
Las Vegas-Algorithmus 9.3
Logik 4.1–4.25
Äquivalenz ( ) 4.6–4.9
F 4.7
T 4.7
allgemeingültig 4.5
Allquantor 4.20
Auswertung 4.23
Aussage 4.3, 4.5–4.6
Aussagenlogik 4.1–4.14
Backus-Naur-Form 4.10–4.11
Geschichte 4.2
Backus-Naur-Form
Aussagenlogik 4.10–4.11
Priorität 4.11
Disjunktion ( ) 4.6–4.9
Einsquantor 4.24
erfüllbar 4.5
erfüllt 4.5
Existenzquantor 4.19
Auswertung 4.22
ø
ù
nicht-determiniert 9.1, 9.3, 9.6
nichtdeterministisch 9.1, 9.10–9.12
O
Objektorientierte Programmierung siehe OOP
OOP 11.1, 12.1–12.24
Überladen von Methoden 12.20
Abstrakte Klasse 12.21
Abstrakte Klassen 12.18–12.19
Folgen 12.19
Abstrakte Methoden 12.18
Attribut 12.2–12.4
Casting 12.24
Downcasting 12.24
Fehler 12.24
Daten 12.2
Instanz 12.3
Instanzvariablen 12.1
Interface 12.21–12.23
Anwendung 12.23
Deklaration 12.21
Implementierung 12.22
Kapselung 12.1
Klasse 12.1–12.4
Konstruktor 12.8–12.11
Form 12.9
Standardkonstruktor 12.9
Verwendung 12.10
Methode 12.1–12.8
Objekt 12.1–12.4
statisch 12.2, 12.3
Vererbung 12.12–12.17
Beispiele 12.14–12.17
dynamisches Binden 12.17
Folgen 12.17
Möglichkeiten 12.13
P
Parallelität 5.1
Parallelrechner 8.2
Parallelverarbeitung 8.1–8.11
NC siehe NC
Architekturen 8.2
MIMD 8.3
MISD 8.3
SIMD 8.3
SISD 8.3
Multitasking 8.2
Multithreading 8.2
Parallelrechner 8.2
steuerungsorientiert 8.3
Einsatzgebiete 8.1
Problemstellungen 8.9–8.10
Speedup siehe Speedup
Voraussetzungen 8.5–8.6
Prädikative Programmierung siehe Logische Programmierung
probabilistisch 5.1, 9.1, 9.3, 9.12
Problemstellungen 2.1
Aufgabenbeispiele 2.3
Beispiel
Grafische Komponenten 2.11–2.16
idealisiertes Vorgehen 2.1
Vorgehen 2.4–2.10
Analyse der Problemstellung 2.6
Aufgabenstellung 2.4
Entwickeln Lösungsmodell 2.10
Erfassen der Problemstellung 2.5
zu klärende Fragen 2.8
Programmierparadigma 11.1
Struktur 11.3
T
Türme von Hanoi 7.11–7.20
Definition 7.11
Implementierung 7.17–7.20
Lösungsansatz 7.15
Vorüberlegungen 7.12
Travelling Salesman Problem siehe TSP
Turingmaschine 5.5–5.13
Form des Programms 5.8
Komponenten 5.6
Programm
Ausführung 5.10
Beispiel 5.11–5.12
Beispiel f. Befehl 5.9
Rate-Verifikations- 9.10–9.11
Rechenschritt 5.8
V
Verbund 11.3
Verifikation 10.21
Bindung von Variablen 10.25–10.27
Beispiele 10.26–10.27
Nachbedingung 10.22, 10.23
Richtung 10.23
Vorbedingung 10.22, 10.23
Vorgehensweise 10.22
weakest precondition siehe weakest precondition
W
weakest precondition 10.23–10.40
Befehl ohne Variablenänderung 10.24
Blöcke 10.30–10.33
Beispiel 10.32–10.33
Fallunterscheidung 10.34–10.36
R
randomisiert 9.3–9.4
Rekursion 5.1, 7.1–7.22, 14.1
Anwendungsgebiete 7.2
Arten der Rekursion 7.10
Beispiele 7.3–7.5, 7.8–7.9, 7.11–7.20
8-Damenproblem 7.9
Backtracking 7.9
Quicksort 7.9
Türme von Hanoi siehe Türme von Hanoi
ggt 7.5
Binomialkoeffizient 7.4
Fakultätsfunktion 7.4, 7.10
Fibonacci-Zahlen 7.5
Sprachbeschreibung 7.3
7.8
Summenformel
Türme von Hanoi siehe Türme von HanoiDefinition 7.1
Effizienz 7.6
Endrekursion 7.10
indirekte Rekursion 7.10
Lineare Rekursion 7.10
Literatur 7.22
Rekursionsanker 7.7
Rekursionsschritt 7.7
Typische Fehler 7.21
Vorteile 7.8
wechselseitige Rekursion 7.10
rekursiv siehe Rekursion
rekursiv aufzählbar 5.3–5.4, 5.13
ý
S
semi-entscheidbar siehe rekursiv aufzählbar
Speedup 8.7
Startzustand 5.8
Stolpersteine 2.19–2.20, 3.4
Beispiel 10.36
Schleifen 10.37–10.40
Beispiel 10.40
Invariante 10.38
Wertzuweisung 10.24
Beispiele 10.28, 10.29
Z
Zeiger 11.3
Literatur
þ
[DCG 89] Peter J. Denning, D. E. Comer, David Gries, Michael C. Mulder, Allen Tucker, A. Joe Turner, und Paul R. Young. Computing as a Discipline.
Communications of the ACM, 32(1):9–23, 1989.
ÿ
[Dud93]
Duden Verlag. Duden Informatik – Ein Sachlexikon für Studium und Praxis. Dudenverlag, 2. Ausgabeedition, 1993.
[FBK97]
Bernd Freisleben, Jörg Baumgart, und Thilo Kielmann. Skript zur Vorlesung Parallelverarbeitung. Technischer Bericht, Uni Siegen, 1997.
[Fla96]
David Flanagan. Java in a Nutshell - Deutsche Ausgabe. O’Reilly, 1996. Eine knappe, beispielorientierte Einführung in Java.
[GJ79]
Michael R. Garey und David S. Johnson. Computers and Intractability: a Guide to the Theory of NP-Completeness. Freeman, 1979.
[GZZZ95] G. Grosche, V. Ziegler, D. Ziegler, und E. Zeidler. Teubner-Taschenbuch der Mathematik, Teil II. Teubner, 7 Ausgabeedition, 1995.
[Hof79]
Douglas R. Hofstadter. Gödel, Escher, Bach. Penguin, 1979.
[Hop88]
John E. Hopcroft. Einführung in die Automatentheorie, formale Sprachen und Komplexit ätstheorie. Addison-Wesley, 1988.
[Kre93a]
Christoph Kreitz. Skriptum zur Informatik I. Skript, TU Darmstadt, 1993.
[Kre93b]
Christoph Kreitz. Tutorium zur Informatik IV. Skript, TU Darmstadt, 1993.
[Rö97]
Guido Rößling. Einführung in Java. Skript, Universitat-Gesamthochschule Siegen, 1997. http://www.informatik.uni-siegen.de/psy/gdv/EinfuehrungJava/java.html/.
[Sed92]
Robert Sedgewick. Algorithmen in C. Addison-Wesley, 1992.
Herunterladen