DAP 1. Datenstrukturen, Algorithmen und Programmierung. Bernhard Steffen. Lehrstuhl für Programmiersysteme

Ähnliche Dokumente
Einführung in die Informatik

Informatik - Lehrgang 2000/2001 GRUNDLAGEN

Informationsblatt Induktionsbeweis

Einführung. Vorlesungen zur Komplexitätstheorie: Reduktion und Vollständigkeit (3) Vorlesungen zur Komplexitätstheorie. K-Vollständigkeit (1/5)

Logik für Informatiker

Grundbegriffe der Informatik

Theoretische Grundlagen des Software Engineering

Programmiersprachen und Übersetzer

Grundlagen der Informatik II. Teil I: Formale Modelle der Informatik

Mathematische Maschinen

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes.

Theoretische Grundlagen der Informatik

1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage:

Semantik von Formeln und Sequenzen

Formale Systeme, WS 2012/2013 Lösungen zu Übungsblatt 4

1 Mathematische Grundlagen

Grammatiken. Einführung

2.11 Kontextfreie Grammatiken und Parsebäume

Lernziele: Ausgleichstechniken für binäre Bäume verstehen und einsetzen können.

Binäre Suchbäume (binary search trees, kurz: bst)

Also kann nur A ist roter Südler und B ist grüner Nordler gelten.

Satz. Für jede Herbrand-Struktur A für F und alle t D(F ) gilt offensichtlich

t r Lineare Codierung von Binärbbäumen (Wörter über dem Alphabet {, }) Beispiel code( ) = code(, t l, t r ) = code(t l ) code(t r )

Analysis I für Studierende der Ingenieurwissenschaften

Primzahlen und RSA-Verschlüsselung

Grundlagen der Theoretischen Informatik, SoSe 2008

Formale Sprachen und Grammatiken

Grundlagen Theoretischer Informatik I SoSe 2011 in Trier. Henning Fernau Universität Trier fernau@uni-trier.de

Terme stehen für Namen von Objekten des Diskursbereichs (Subjekte, Objekte des natürlichsprachlichen Satzes)

Zusammenfassung. 1 Wir betrachten die folgende Signatur F = {+,,, 0, 1} sodass. 3 Wir betrachten die Gleichungen E. 4 Dann gilt E 1 + x 1

50. Mathematik-Olympiade 2. Stufe (Regionalrunde) Klasse Lösung 10 Punkte

Theoretische Grundlagen des Software Engineering

Logische Folgerung. Definition 2.11

WS 2008/09. Diskrete Strukturen

Zusammenfassung. Satz. 1 Seien F, G Boolesche Ausdrücke (in den Variablen x 1,..., x n ) 2 Seien f : B n B, g : B n B ihre Booleschen Funktionen

Grundbegriffe der Informatik

WS 2009/10. Diskrete Strukturen

IT-Basics 2. DI Gerhard Fließ

I. Aussagenlogik. Aussagenlogik untersucht Verknüpfungen wie "und", "oder", "nicht", "wenn... dann" zwischen atomaren und komplexen Sätzen.

Grundlagen der Theoretischen Informatik - Sommersemester Übungsblatt 1: Lösungsvorschläge

Vorlesung Diskrete Strukturen Graphen: Wieviele Bäume?

4.9 Deterministische Kellerautomaten Wir haben bereits definiert: Ein PDA heißt deterministisch (DPDA), falls

Formeln. Signatur. aussagenlogische Formeln: Aussagenlogische Signatur

Prolog basiert auf Prädikatenlogik

Motivation. Formale Grundlagen der Informatik 1 Kapitel 5 Kontextfreie Sprachen. Informales Beispiel. Informales Beispiel.

Kapitel 2: Formale Sprachen Kontextfreie Sprachen. reguläre Grammatiken/Sprachen. kontextfreie Grammatiken/Sprachen

Das Briefträgerproblem

Grundbegriffe der Informatik

Wortproblem für kontextfreie Grammatiken

Grundlagen der Informationverarbeitung

2. Vorlesung. Slide 40

Theoretische Informatik 2 (WS 2006/07) Automatentheorie und Formale Sprachen 19

Programmieren Formulierung eines Algorithmus in einer Programmiersprache

Kapiteltests zum Leitprogramm Binäre Suchbäume

Technische Informatik - Eine Einführung

9.2. DER SATZ ÜBER IMPLIZITE FUNKTIONEN 83

Erfüllbarkeit und Allgemeingültigkeit

Übung Theoretische Grundlagen

Mächtigkeit von WHILE-Programmen

Theoretische Informatik I

Rekursionen (Teschl/Teschl )

VBA-Programmierung: Zusammenfassung

FHZ. K01 Geschichte des Computers. Lernziele. Hochschule Technik+Architektur Luzern. Inhalt

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen. I.2. I.2. Grundlagen von von Programmiersprachen.

Beispiel Zusammengesetzte Zufallsvariablen

Formale Systeme. Binary Decision Diagrams. Prof. Dr. Bernhard Beckert WS 2010/2011 KIT INSTITUT FÜR THEORETISCHE INFORMATIK

Mai Hauptseminar: Nichtrelationale Datenbanken Historisch-Kulturwissenschaftliche Informationsverarbeitung Universität zu Köln

4. Übungsblatt Matrikelnr.:

3.2 Binäre Suche. Usr/local/www/ifi/fk/menschen/schmid/folien/infovk.ppt 1

SEP 114. Design by Contract

Deterministische Turing-Maschinen (DTM) F3 03/04 p.46/395

Der Zwei-Quadrate-Satz von Fermat

Fachschaft Mathematik und Informatik (FIM) LA I VORKURS. Herbstsemester gehalten von Harald Baum

Eine Logikschaltung zur Addition zweier Zahlen

Erwin Grüner

Data Mining: Einige Grundlagen aus der Stochastik

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Was bisher geschah. Aufgaben: Diagnose, Entscheidungsunterstützung Aufbau Komponenten und Funktion

Formale Methoden II. Gerhard Jäger. SS 2008 Universität Bielefeld. Teil 8, 11. Juni Formale Methoden II p.1/30

Einführung in die Fuzzy Logic

Einführung in die Algebra

Theorie der Informatik

Probleme beim Arbeiten mit Variablen, Termen und Gleichungen

Effiziente Algorithmen und Datenstrukturen I. Kapitel 10: Lineare Algebra

Basis und Dimension. Als nächstes wollen wir die wichtigen Begriffe Erzeugendensystem und Basis eines Vektorraums definieren.

Beweisbar sichere Verschlüsselung

Korrelation (II) Korrelation und Kausalität

Objektorientierte Programmierung

Diskrete Strukturen und Logik WiSe 2007/08 in Trier. Henning Fernau Universität Trier

Einfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie

Algorithmen & Datenstrukturen 1. Klausur

15 Optimales Kodieren

1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. Bäume / Graphen 5. Hashing 6. Algorithmische Geometrie

Rekursionen. Georg Anegg 25. November Methoden und Techniken an Beispielen erklärt

Grundlagen der Theoretischen Informatik

7 Rechnen mit Polynomen

6.2 Perfekte Sicherheit

4. AUSSAGENLOGIK: SYNTAX. Der Unterschied zwischen Objektsprache und Metasprache lässt sich folgendermaßen charakterisieren:

Folge 19 - Bäume Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

Mathematik für Informatiker II. Beispiellösungen zur Probeklausur. Aufgabe 1. Aufgabe 2 (5+5 Punkte) Christoph Eisinger Sommersemester 2011

Transkript:

DAP 1 Datenstrukturen, Algorithmen und Programmierung Bernhard Steffen Lehrstuhl für Programmiersysteme B. Steffen 1

Was ist Informatik? Informatik ist die Wissenschaft von der Informationsverarbeitung. Auffallend ist, daß in dieser Definition das Wort Computer nicht vorkommt. Im Vordergrund stehen prinzipielle Fragen wie: B. Steffen 2

Wo liegen die Grenzen des (automatisch) Berechenbaren? Wie können komplexe Probleme zuverlässig behandelt werden? Warum ist eine Programmier-, Modellierungs- oder Spezifikationssprache so und nicht anders entworfen worden? (formales Sprachdesign) Welche Maschinenarchitekturen sind zur Realisierung spezieller Problemklassen am besten geeignet? (abstrakte Maschinen- und Berechnungsmodelle, verteilte Systeme und parallele Algorithmen) Was sind die wesentlichen Charakteristika eines Problems in Hinblick auf eine abstrakte Modellierung (Problemanalyse, Requirements Engineering)? Wann läßt sich ein gegebenes Verfahren einsetzen (Anwendungsprofile)? Wer sind die zukünftigen Interessenten und Anwender (Relevanzanalyse)? B. Steffen 3

Wissenschaftliche Einordnung geisteswissenschaftliche Natur ingenieurwissenschaftlicher Charakter mathematischer Charakter B. Steffen 4

Mathematische Wurzeln Algebra Logik Statistik Zahlentheorie Operations Research Informationstheorie Codierungstheorie Modelltheorie Kryptographie Topologie Geometrie Kontrolltheorie Kybernetik B. Steffen 5

Auseinandersetzung mit Abstrakten Strukturen Programmstrukturen, Sprachstrukturen, Datenstrukturen, Rechnerstrukturen,... Strukturwissenschaft B. Steffen 6

Historie bis Ende der 80er B. Steffen 7

Anfänge des Rechnens Jahr Entwicklungsschritt 1700 v. Chr. Älteste schriftliche Rechenaufgabe, auf Papyrus in Ägypten 300 v. Chr. Euklidischer Algorithmus 5. Jh. n. Chr. Benutzung von Dezimalzahlen in Indien 820 n. Chr. Mukhammad ibn Musa Al-Chowarizmi (etwa 780-850), persischer Mathematiker und Astronom, Buch über Algebra 1202 Liber abaci (erste systematische Einführung in Rechnen mit Dezimalzahlen) von Leonardo von Pisa, genannt Fibonacci (etwa 1180-1240), italienischer Mathematiker 1524 Rechenbuch von Adam Riese (1492-1559) B. Steffen 8

Erste Ansätze zu Rechenmaschinen Jahr Entwicklungsschritt 1623 Mechanische Rechenmaschine für vier Grundrechenarten von Wilhelm Schickard (1592-1635) 1641 Maschine zur Addition von sechsstelligen Zahlen, konstruiert von Blaise Pascal (1623-1662) 1673 Gottfried Wilhelm Leibniz (1646-1716) konstruiert Rechenmaschinen mit Staffelwalzen für vier Grundrechenarten, befasst sich auch mit dualem Zahlensystem 1774 Erste zuverlässig arbeitende mechanische Rechenmaschine, in Serie hergestellt von Philipp Matthäus Hahn (1739-1790) B. Steffen 9

Erste Ansätze zu Rechenmaschinen Jahr um 1800 Entwicklungsschritt Mittels Lochkarten gesteuerter automatischer Webstuhl von Joseph-Marie Jacquard (1752-1834) 1833 Analytical Engine von Charles Babbage (1792-1871); Lady Augusta Ada Byron (1815-1852), Countess of Lovelace, entwickelt dazu die erste Programmiersprache 1886 Erfindung der Lochkarte von Hermann Hollerith (1860-1929); Entwicklung verschiedener elektrischer Lochkartenmaschinen (u.a. Einsatz zur Volkszählung); Programmierung mittels Steckkarten B. Steffen 10

Erste Meilensteine der Computerentwicklung Jahr Entwicklungsschritt 1934 Konrad Zuse (1910-1995) beginnt mit Planung einer programmgesteuerten Rechenmaschine auf Basis des dualen Zahlensystems und Gleitkomma-Zahlendarstellung 1939 Alan M. Turing (1912-1954) entwickelt ein nach ihm benanntes Maschinenmodell, das als Grundlage der Berechenbarkeitstheorie dient 1941 Z3 von Zuse fertiggestellt; sie ist die erste funktionsfähige programmgesteuerte Rechenmaschine; (Telefon-) Relais als Schaltelemente; Programmierung mithilfe von Lochstreifen (Filmrollen), die bei Bedarf zu Schleifen zusammengeklebt werden konnten; Multiplikationszeit: ca. 3 s 1944 Howard Hathaway Aiken (1900-1973) erbaut Mark I, Rechenautomat auf Basis von Dezimalzahlen B. Steffen 11

Erste Meilensteine der Computerentwicklung Jahr Entwicklungsschritt 1946 ENIAC: Erster elektronischer Rechner (18000 Elektronenröhren, 1500 Relais), gebaut von John Presper Eckert (1919*) und John William Mauchly (1907-1980) Multiplikationszeit: ca. 3 ms; John von Neumann (1903-1957) erfindet den Programmspeicher 1949 EDSAC: Erster universeller Digitalrechner mit gespeichertem Programm von Maurice Vincent Wilkes (1913*) 1950 Erster russischer Rechner von S.A. Lebedev fertiggestellt (MESM, mit Röhren als Schaltelementen) ab 1950 Industrielle Serienproduktion von elektronischen Rechenanlagen B. Steffen 12

Hauptquelle: D. Roller Informatik - Grundlagen. Mit einer Einführung in PASCAL. Springer-Verlag, Heidelberg, 1994. Weiterführende Literatur: J.A.N. Lee: Computer Pioneers. IEEE Computer Society Press, 1995. (80 SR 800 L478) K. Zuse. Der Computer - mein Lebenswerk. Springer-Verlag, Heidelberg, 1984. (80 SR 800 Z96(2)) F.L. Bauer. Konrad Zuse - Fakten und Legenden. Informatik Spektrum, Band 19, Heft 6, Dezember 1996, 299-302 R. Rojas. Die Architektur der Rechenmaschinen Z1 und Z3 von Konrad Zuse. Informatik Spektrum, Band 19, Heft 6, Dezember 1996, 302-315 K. Ganzhorn, W. Walter. Die geschichtlicheentwicklung der Datenverarbeitung. IBM Deutschland GmbH, Böblingen, 1975 B. Steffen 13

Computereinteilung in Generationen Generation Merkmale 1 Bis Ende der 50er Jahre Hardware: Elektronenröhren (Schaltzeit 1 ms; störanfällig) und Relais (Schaltzeit 0,1 s; relativ zuverlässig) als Schaltelemente; Drucker und Magnetbänder als Peripheriegeräte Software: Praktisch keine (System-) Software; Programmierung in Maschinencode (Zahlenkolonnen) 2 ab 1957 bis Ende der 60er Jahre Hardware: Transistoren (Schaltzeit 10 µs) als Schaltelemente; Ferritkern-, Band-, Trommel-, Plattenspeicher; Lochstreifen als neues Peripheriegerät Software: Erste Betriebssysteme für Stapelverarbeitung (Batch-Betrieb); erste problemorientierte Programmiersprachen (COBOL, FORTRAN, ALGOL, LISP) B. Steffen 14

Computereinteilung in Generationen Generation Merkmale 3 ab Mitte der 60er Jahre Hardware: Mikromodultechnik (integrierte Schaltkreise): ca. 20 Schaltelemente pro cm 2 (Schaltzeit ca. 10 ns); Kanäle, Magnetplatten und Bildschirme (Terminals) statt Teletypes als typischeperipheriegeräte Software: Betriebssysteme mit Dialogbetrieb, Datenbanken, Programmiersprache ALGOL 68 4 ab Anfang der 70er Jahre Hardware: Überwiegend hochintegrierte Schaltkreise (LSI); kompletter Prozessor auf einem Chip; PCs und Workstations; 8-BitArchitektur Software: Strukturierte Programmierung, Software-Engineering, imperative Programmiersprachen PASCAL, C; funktionale Programmiersprache ML, Betriebssysteme mit Mehrbenutzerbetrieb (Time-sharing) und lokale Netzwerke; Microcomputer und erstes portables Betriebssystem (UNIX) B. Steffen 15

Computereinteilung in Generationen Generation Merkmale 5 seit Anfang der 80er Jahre Hardware: Höchstintegrierte Schaltkreise (VLSI): mehrere Prozessoren auf einem Chip; Homecomputer, PCs und Workstations; 16- und 32-Bit-Architektur Software: Graphik; globale Vernetzung; Künstliche Intelligenz (KI) Logikorientierte Programmiersprachen (PROLOG); objektorientierte Programmiersprachen (Smalltalk) 6 seit Anfang der 90er Jahre Hardware: Hochprogrammierbare Bausteine (Field Programmable Gate Arrays); Embedded Systems Software: Ereignisorientierte Programmierung; Internetprogrammierung, Middleware, Integrationsframeworks. Programmiersprachen: JAVA, Delphi, Erlang und Modellierurng in UML B. Steffen 16

Computereinteilung in Generationen Generation Merkmale 7 seit Anfang 2000 Hardware: SoCs (Systems on a Chip, MEMSs (Micro-electro-mechanical systems) Software: Heterogene, sich dynamisch entwickelnde Netzwerke von Systemen und Endgeräten. Programmiertechnologie zunehmend Model Driven Design. Hauptquelle der historischen Angaben: D. Roller Informatik - Grundlagen. Mit einer Einführung in PASCAL. Springer-Verlag, Heidelberg, 1994. B. Steffen 17

Einteilung der Informatik Theoretische Informatik Theorie der Berechenbarkeit Praktische Informatik Algorithmen und Datenstrukturen Technische Informatik Entwicklung von Hardwarekomponenten (Schaltkreise, -netze, -werke) Angewandte Informatik Automatisierungs- Technik in Konstruktion und Produktion Komplexitätstheorie Programmiersprachen und Übersetzer Rechnerorganisation und -architektur Computergraphik und Simulation Theorie der formalen Sprachen, Automatentheorie Programmiermethoden und -werkzeuge Periphere Geräte und Rechnernetze Kaufmännische Datenverarbeitung u. Büroautomatisation Formale Semantik, Programmverifikation Betriebssysteme, Informationssysteme............ Quelle: D. Roller Informatik - Grundlagen. Mit einer Einführung in PASCAL. Springer-Verlag, Heidelberg, 1994. B. Steffen 18

Inhaltliche Übersicht 1. Motivation 2. Programmieren im Kleinen / Großen 3. Struktur und Invarianz 4. Das WHILE-Fragment von Java 5. Algorithmen, Datenstrukturen und Rekursion 6. Objektorientierte Erweiterungen B. Steffen 19

Programmieren im Großen B. Steffen 20

Programmentwicklungsphasen 1. Analyse 2. Modellierung 3. Design 4. Implementierung 5. Test Organisiert in einem iterativen Prozess B. Steffen 21

Abstraktion & Kompositionalität Modelle Architekturen Konzepte Problemorientiert Problem Plattformorientiert Prozesse getestete Produkte Implementierungen Algorithmen & Datenstrukturen B. Steffen 22

getestete Produkte Implementierungen Algorithmen & Datenstrukturen B. Steffen 23

Programm-Strukturen Schleifen x = n; y = 1; while (x > 1) { y = y x; x = x-1; } Rekursion Fak(n) = if n = 1 then 1 else n Fak(n-1) Fak(n) = 1 2 3... n B. Steffen 24

Programm-Strukturen Schleifen, Rekursion Prozeduren, Module Prog Begin End Proc Fak. : Fak(n) B. Steffen 25

Problem getestete Produkte Implementierungen Algorithmen & Datenstrukturen B. Steffen 26

Analyse B. Steffen 27

Lehrer Schueler Elternteil B. Steffen 28

Modelle Implementierungen Problemorientiert Problem getestete Produkte Algorithmen & Datenstrukturen B. Steffen 29

Assoziation Geschäftsprozeß Szenario Statische Konzepte Dynamische Konzepte Vererbung Paket Botschaft Zustandsautomat Attribut Operation Statisches Modell Basiskonzepte Objekt Klasse Dynamisches Modell B. Steffen 30

Modellierung B. Steffen 31

B. Steffen 32

Modelle Architekturen Implementierungen Plattformorientiert Problem getestete Produkte Problemorientiert Algorithmen & Datenstrukturen B. Steffen 33

Architektur-Design B. Steffen 34

Modelle Architekturen Problemorientiert Problem Plattformorientiert Prozesse getestete Produkte Implementierungen Algorithmen & Datenstrukturen B. Steffen 35

SW-Management 1 Grundlagen SW-Entwicklung 1 Die Planungsphase SW-Qualitätssicherung 1 Grundlagen 2 Planung 2 Die Definitionsphase 2 Qualitätssicherung 3 Organisation 3 Die Entwurfssphase 3 Manuelle Prüf methoden 4 Personal 4 Die Implementierungsphase 4 Prozeßqualität 5 Leitung 5 Die Abnahme und Einführungsphase 5 Produktqualität -Komponenten 6 Kontrolle 6 Die Wartungs- und Pflegephase 6 Produktqualität -Systeme B. Steffen 36

Modelle Architekturen Konzepte Problemorientiert Problem Plattformorientiert Prozesse getestete Produkte Implementierungen Algorithmen & Datenstrukturen B. Steffen 37

Konzeptuelle Strukturen 1 (Sprach-Design) x = 1 x = x + 1 x = x + 1 x =? Granularität? Java: X += ++X + X++? B. Steffen 38

Konzeptuelle Strukturen 2 (Sprach-Design) M M M K T K T Wer entscheidet? B. Steffen 39

Abstraktion & Kompositionalität Modelle Architekturen Konzepte Problemorientiert Problem Plattformorientiert Prozesse getestete Produkte Implementierungen Algorithmen & Datenstrukturen B. Steffen 40

Abstraktion und Kompositionalität Konzentration auf das Wesentliche Konzentration auf spezielle Aspekte Konzentration auf Entscheidbares Ersetzen von Gleichem durch Gleiches Hierarchische (Programm-)Entwicklung Bibliothekskonzepte B. Steffen 41

Inhaltliche Übersicht 1. Motivation 2. Programmieren im Kleinen / Großen 3. Struktur und Invarianz 4. Das WHILE-Fragment von Java 5. Algorithmen, Datenstrukturen und Rekursion 6. Objektorientierte Erweiterungen B. Steffen 42

Programmieren im Kleinem B. Steffen 43

Phasen der Programmentwicklung im Kleinen reale Welt abstrakte Objekte informationsverarb. System Abstraktion Darstellung Realisierung Problem Algorithmus Programm Problemanalyse, funktionale Spezifikation, Algorithmenentwurf Darstellung in formalisierter Sprache zur Ausführung durch Rechner Umsetzung in Elementarschritte einer Maschine Maschine B. Steffen 44

Schlüsselkriterien Korrektheit Effizienz Algorithmik Skalierbarkeit Implementierung Integration B. Steffen 45

Vorgehen bei der Programmentwicklung im Kleinen 1. Problemformulierung 2. Problemanalyse, Problemabstraktion und -formalisierung, Problemspezifikation 3. Algorithmenentwurf 4. Korrektheitsnachweis (Semantikanalyse) 5. Aufwandsanalyse (Komplexitätsanalyse) 6. Programmkonstruktion 7. Verifikation und Test B. Steffen 46

Vorgehen bei der Programmentwicklung im Grossen 1. Analyse 2. Modellierung 3. Design 4. Implementierung 5. Test Organisiert in einem iterativen Prozess B. Steffen 47

Problemformulierung/Analyse 1. Finden einer Zahl in einer Zahlenmenge. 2. Algorithmische Idee: Das Telefonbuchprinzip: Vorsortieren Intervallschachtelung B. Steffen 48

Algorithmenentwurf Umsetzen der algorithmischen Idee in eine abstrakte, eindeutig interpretierbare Beschreibungsform. Klassisch sind die Flußdiagramme. Festlegen konzeptuell günstiger Datenstrukturen, hier sortierte Listen natürlicher Zahlen. Verwenden von Variablen L und R zur Charakterisierung des aktuellen Suchintervalls. B. Steffen 49

Flußdiagramme Start Stop z = 0 Wende Formel (3) an ja nein a<b a>b a==b? Vergleiche a und b a==b Lies x ein Gib x aus B. Steffen 50

Start Flußdiagramm zum Binären Suchen lies x ein L=1 R=n found=false L<=R && found==false? nein gib found aus gib Index m aus ja m=(l+r) / 2 End a[m]==x? ja found=true nein a[m]<x? ja L=m+1 nein vgl. vgl. DAP1-Skript DAP1-Skript Seite Seite6-10 R=m-1 B. Steffen 51

x {n 1, n 2,..., n k }? n 1 n k 1 1 n + 2 n k-1 n k n k + 1 2 2 L Instruktionen: n m = x? nein n m < x? nein! R := m-1 m Hilfsvariablen: L = 1 R = k Found = FALSE m = (k + 1) DIV 2 R B. Steffen 52

x {n 1, n 2,..., n k }? n 1 n k 1 1 n + 2 n k-1 n k n k + 1 2 2 L R m Hilfsvariablen: L = 1 R = m - 1 Found = FALSE m = (k + 1) DIV 2 B. Steffen 53

x {n 1, n 2,..., n k }? n k + 1 2 n 1 n 2 1 n k + 1 2 L R m Instruktionen: m := ( L+ R) DIV 2 Hilfsvariablen: L = 1 R = k Found = FALSE m = (k + 1) DIV 2 B. Steffen 54

x {n 1, n 2,..., n k }? n k + 1 2 n 1 n 2 1 n k + 1 2 L m R Instruktionen: n m = x? nein n m < x? ja! L:= m+1 Hilfsvariablen: L = 1 R = k Found = FALSE m = ( L+ R) DIV 2 B. Steffen 55

x {n 1, n 2,..., n k }? n k + 1 2 n 1 n 2 1 n k + 1 2 m L R Instruktionen: m := ( L+ R) DIV 2 Hilfsvariablen: L = m+1 R = k Found = FALSE m = ( L+ R) DIV 2 B. Steffen 56

x {n 1, n 2,..., n k }? n k + 1 2 n 1 n 2 1 n k + 1 2 L m R Und so weiter... Hilfsvariablen: L = m+1 R = k Found = FALSE m = ( L+ R) DIV 2 B. Steffen 57

10 {1,3,4,7,8,10,11,12,15,16,19,23,33,35,55}? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 3 4 7 8 10 11 12 15 16 19 23 33 35 55 L m R Instruktionen: 12 = 10? nein 12 < 10? nein! R := 7 Hilfsvariablen: L = 1 R = 15 Found = FALSE m = 8 B. Steffen 58

10 {1,3,4,7,8,10,11,12,15,16,19,23,33,35,55}? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 3 4 7 8 10 11 12 15 16 19 23 33 35 55 L R m Instruktionen: m:= 4 Hilfsvariablen: L = 1 R = 7 Found = FALSE m = 8 B. Steffen 59

10 {1,3,4,7,8,10,11,12,15,16,19,23,33,35,55}? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 3 4 7 8 10 11 12 15 16 19 23 33 35 55 L m R Instruktionen: 7 = 10? nein 7 < 10? ja! L:= 5 Hilfsvariablen: L = 1 R = 7 Found = FALSE m = 4 B. Steffen 60

10 {1,3,4,7,8,10,11,12,15,16,19,23,33,35,55}? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 3 4 7 8 10 11 12 15 16 19 23 33 35 55 m L R Instruktionen: m:= 6 Hilfsvariablen: L = 5 R = 7 Found = FALSE m = 4 B. Steffen 61

10 {1,3,4,7,8,10,11,12,15,16,19,23,33,35,55}? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 3 4 7 8 10 11 12 15 16 19 23 33 35 55 L m R Instruktionen: 10 = 10? ja! Found := TRUE Hilfsvariablen: L = 5 R = 7 Found = FALSE m = 6 B. Steffen 62

10 {1,3,4,7,8,10,11,12,15,16,19,23,33,35,55}? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 3 4 7 8 10 11 12 15 16 19 23 33 35 55 L m R Hilfsvariablen: L = 5 R = 7 Found = TRUE m = 6 B. Steffen 63

Korrektheitsnachweis 1. Symbolische Ausführung des Beschreibung 2. Analyse der Randfälle, z.b. R =1 oder L= R 3. Mathematischer Korrektheitsbeweis vgl. vgl. DAP1-Skript DAP1-Skript Seite Seite10-11 B. Steffen 64

Aufwandsanalyse Hierarchische Untersuchung des Aufwandswachstums bei wachsenden Inputparamtern von Elementaroperationen Schleifen- oder Rekursionsrümpfen vgl. vgl. DAP1-Skript DAP1-Skript Seite Seite12-13 Iterationskonstrukten: Wie oft werden sie durchlaufen? Beim binären Suchen beobachten wir bzgl. des Parameters n: Elementaroperationen/Rümpfe haben konstanten Aufwand Die Schleife wird maximal log 2 (n)+1-mal durchlaufen. Man sagt, der Algorithmus hat logarithmische Komplexität. B. Steffen 65

Programmkonstruktion 1. Automatisch, z.b. durch Compilation 2. Halbautomatisch über formale Transformationsregeln 3. Manuell, durch freie Programmierung 4. Gemischt, durch gezielte Computerunterstützung: Extraktion von Schnittstellencode Erzeugung von Klassenstrukturen Generierung von Datenstrukturen vgl. vgl. DAP1-Skript DAP1-Skript Seite Seite13-14 B. Steffen 66

L = 1; R = n; found = false; while (( L<=R) && (found = = false)) { m = (L+R) / 2; if (a[m] = = x) {found = true;} else { if (a[m] < x) {L = m+1;} else { R = m-1; } } } B. Steffen 67

Programmanalyse und Verifikation Verifikation á la Floyd und Hoare Programm- und Datenflußanalyse Type- und Rangechecking Modelchecking B. Steffen 68

Testmethoden Komponententest Integrationstest Funktionale Tests Regressionstest Performancetests B. Steffen 69

Inhaltliche Übersicht 1. Motivation 2. Programmieren im Kleinen / Großen 3. Struktur und Invarianz 4. Das WHILE-Fragment von Java 5. Algorithmen, Datenstrukturen und Rekursion 6. Objektorientierte Erweiterungen B. Steffen 70

Struktur und Invarianz B. Steffen 71

Abstraktionsebenen Objekte der realen Welt Begriffsbildung Abstraktion Verstehen Begreifen Begriffe, Information Darstellung Interpretation Repräsentationen B. Steffen 72

Eine Beispielinstanz ein konkreter Apfel Abstraktion (nicht alle Äpfel sind gleich) Verstehen (sich einen Apfel vorstellen) Begriffe: Apfel, pomme, apple, Boskop Darstellung Interpretation Repräsentationen: Apfel oder A p f e l B. Steffen 73

Semantikschemata Definition (Semantikschemata) Ein Semantikschema ist ein TupelR, I,. mit R: Menge der Repräsentationen oder Nachrichten I: Menge der Begriffe oder Informationen. R I: Semantik(-Relation) oder Interpretation. vgl. vgl. DAP1-Skript DAP1-Skript Seite Seite16-19 B. Steffen 74

Numerierungssysteme 25, 98 Abstraktion (Zahl, statt Objekt) Verstehen fünfundzwanzig, Begriffe: quatrevingtdixhuit, Darstellung Interpretation Repräsentationen:, (Babylonische Notation) XXV, LXXXXVIII oder XCVIII (Römische Notation) B. Steffen 75

Konvention Fallsr, i., so ist i eine Information zur Repräsentation r. Im folgenden schreiben wir oft i r anstelle von r, i.. Also r = df { i I r, i. } Ist r einelementig, so schreiben wir auch i = r. B. Steffen 76

Unärdarstellung natürlicher Zahlen R u = df {,,,...}, I u = df = df {1, 2,...} Natürliche Zahlen (als Begriffe bzw. Informationen, nicht als ihre Darstellung im Dezimalsystem! Siehe auch nächstes Beispiel),. u = df {..., k k }. k Die Semantik einer Nachricht aus k Strichen ist also die natürliche Zahl k. B. Steffen 77

Dezimaldarstellung natürlicher Zahlen R N = df {1, 2,..} Dezimalrepräsentation der natürlichen Zahlen, I N = df = df {1,2,...} Natürliche Zahlen (als Begriffe bzw. Informationen, nicht als ihre Notation im Dezimalsystem!),. N = df { (1,1), (2,2), (3,3),...}. B. Steffen 78

Binärdarstellung natürlicher Zahlen R B = df {(d i ) i n d i {0, 1}, n 0 }. I B = df 0 = df {0,1, 2,...} Natürliche Zahlen (wieder als Begriffe bzw. Informationen, nicht als ihre Notation im Dezimalsystem), n. B = df {(d i ) i n, d i *2 n - i n 0 } i=0 B. Steffen 79

Kardinalzahlen in MODULA-2 R K = df {0,1,...,2 B -1}, I K = df 0 = df {0, 1, 2,...} Natürliche Zahlen (wieder als Begriffe bzw. Informationen, nicht als ihre Notation im Dezimalsystem),. K = df {k, k k R K }. B. Steffen 80

Vervollständigte Kardinalzahlen Achtung: Folie verändert! R uo = df R k {underflow, overflow}, I uo = df, r uo = df {i i > 2 B -1}, falls r = overflow {i i < 0}, falls r = underflow r K, sonst B. Steffen 81

Formale Eigenschaften Ein Semantikschema R, I,. heißt total, falls r R. r. eindeutig gdw.. eine totale Funktion ist, d.h. falls r R. {i r,i. } = 1. Falls. eindeutig ist, so heisst. injektiv gdw.. injektiv ist, d.h. falls r 1,r 2 R. r 1 = r 2 r 1 = r 2. surjektiv gdw.. surjektiv ist, d.h. falls vgl. vgl. DAP1-Skript DAP1-Skript Seite Seite19 19 i I.r R. r = i. B. Steffen 82

Kodierung Äquivalenztransformation r R. r = f (r) 1 2 f R 1 R 2 1 2 Kongruenztransformation I r, r' R. r = r' f (r) = f (r') 1 1 2 2 B. Steffen 83

Kodierung Äquivalenztransformation r R. r = f (r) 1 2 Kongruenztransformation r,r' R. r = r' f (r) = f (r') 1 1 2 2 Zusammenhang vgl. vgl. DAP1-Skript DAP1-Skript Seite Seite19-21 f (r) =r = r' =f (r') 2 1 1 2 qed B. Steffen 84

Kodierung succ mod 2 mod 2 {0,1} Äquivalenztransformation? n. n mod 2 succ(n) mod 2 Insbesondere: 1 mod 2 = 1 0 = 2 mod 2 = succ(1) mod 2 B. Steffen 85

Kodierung succ mod 2 mod 2 {0,1} Kongruenztransformation? n, m. n mod 2 = m mod 2 succ(n) mod 2 = succ(m) mod 2 B. Steffen 86

Kodierung succ mod k mod k {0,,k-1} Kongruenztransformation? n,m. n mod k = m mod k succ(n) mod k = succ(m) mod k B. Steffen 87

Inhaltliche Übersicht 1. Motivation 2. Programmieren im Kleinen 3. Struktur und Invarianz (induktives Vorgehen) 4. Das WHILE-Fragment von Java 5. Algorithmen, Datenstrukturen und Rekursion 6. Objektorientierte Erweiterungen B. Steffen 88

Induktives Definieren Die induktive Definition einer Menge erfolgt durch Angabe 1. einer Menge elementarer Grundobjekte oder atomarer Bausteine und 2. einer Menge von Operatoren, die es erlauben, kleinere Bausteine entsprechend einer Konstruktionsvorschrift zu größeren Einheiten zusammenzusetzen. B. Steffen 89

Syntax Boolescher Terme Sei ID eine Menge von Identifikatoren (Variablen). Die Menge BT aller Booleschen Terme über ID ist wie folgt definiert: 1. true, false und Identifikatoren id aus ID sind Boolesche Terme, sogenannte atomare Boolesche Terme oder kurz Atome. 2. Sind t 1 und t 2 Boolesche Terme, so sind auch ( t 1 ), die Negation von t 1, (t 1 t 2 ), die Konjunktion von t 1 und t 2 und (t 1 t 2 ), die Disjunktion von t 1 und t 2 Boolesche Terme. 3. Weitere Boolesche Terme gibt es nicht. vgl. vgl. DAP1-Skript DAP1-Skript Seite Seite24 24 B. Steffen 90

Backus-Naur-Form (BNF) linke Seite ::= rechte Seite N (N T ) * T die Menge der atomaren syntaktischen Objekte der Sprache, die durch die BNF beschrieben wird (T: Terminale ), N eine Menge von Regelbezeichnern (N: Nichtterminale ), `* der sequentielle Iterator. Solche Beschreibungen nennt man auch kontextfreie Grammatiken. B. Steffen 91

Konvention Man schreibt statt LS ::= RS 1, LS ::= RS 2,... LS ::= RS n oft kurz: LS ::= RS 1... RS n B. Steffen 92

Syntax Boolescher Terme in BNF ABT ::= true false id, BT ::= ABT ( BT) (BT BT) (BT BT) mit id ID, oder alternativ kurz BT ::= true false id ( BT) (BT BT) (BT BT) vgl. vgl. DAP1-Skript DAP1-Skript Seite Seite24 24 B. Steffen 93

BNF als Generatorbeschreibung Erweiterung von ::= N x (N T )* auf Worte durch: (N T )* x (N T )* mit w 1 A w 2 w 1 w w 2 gdw. A ::= w ist BNF-Produktion BT ::= true false id ( BT) (BT BT) (BT BT) Beispiel: ((x y) z) vgl. vgl. DAP1-Skript DAP1-Skript Seite Seite21-22 BT (BT BT) ((BT BT) BT) ((x BT) BT) ((x y) BT) ((x y) z) B. Steffen 94

BNF als Akzeptor durch Reduktion BT ::= true false id ( BT) (BT BT) (BT BT) Beispiel: ( ( x y ) z ) BT BT BT BT vgl. vgl. DAP1-Skript DAP1-Skript Seite Seite21-22 BT B. Steffen 95

Axiomatische Begründung: die Peano-Axiome P1 1 ist eine natürliche Zahl: 1 P2 Jede natürliche Zahl besitzt eine eindeutig bestimmte natürliche Zahl als Nachfolger: n. m. m = succ(n) ( m'. m' = succ(n)m= m') P3 1 ist nicht Nachfolger einer natürlichen Zahl: n. 1 = succ(n) P4 Verschiedene natürliche Zahlen haben verschiedene Nachfolger: m,n. n m succ(n) succ(m) B. Steffen 96

Axiomatische Begründung: die Peano-Axiome P5 Axiom der vollständigen Induktion: Ist eine Aussage über natürliche Zahlen für 1 wahr und läßt sich ihre Gültigkeit für jede größere natürliche Zahl aus der Gültigkeit der Aussage für ihren Vorgänger ableiten, dann ist sie für jede natürliche Zahl wahr. ( A(1) ( n. (A(n) A(succ(n)))) ) n. A(n) Eine Aussage ist eine totale Funktion A : vgl. vgl. DAP1-Skript DAP1-Skript Seite Seite22-24 B. Steffen 97

1. n i= 1 i = n ( n + 1), 2 Summe der ersten n natürlichen Zahlen. 2. n i= 1 2 (2i 1) = n, Summe der ersten n ungeraden Zahlen. 3. n i= 1 2 i = n ( n + 1), Summe der ersten n geraden Zahlen. 4. n i= 1 i 2 = n ( n + 1) (2n + 1), 6 Summe der ersten n Quadratzahlen. B. Steffen 98

5. n i= 1 i 3 = n ( n + 1), 4 2 2 Summe der ersten n Kubikzahlen. 6. Es gibt n! Permutationen über n Objekten. 7. Es gibt 2 n Teilmengen von n-elementigen Mengen. 8. Es gibt 2 n Binärworte der Länge n. B. Steffen 99

Beispielbeweis Beh.: n. {0,1} n = 2 n Beweis durch vollständige Induktion nach n. IA: (n=1): {0,1} 1 = {0,1} = 2 = 2 1 IV: Die Behauptung gelte für n: {0,1} n = 2 n IS: (nn+1): {0,1} n+1 = {w0 w {0,1} n } {w1 w {0,1} n } = 2 n + 2 n = 2 n+1 B. Steffen 100

Kaninchenpopulation B. Steffen 101

B. Steffen 102

Adäquatheit Fibonacci-Funktion fib : 0 fib(0) = fib(1) = 1; fib(n) = fib(n-2) + fib(n-1). Fakt: n 0. fib(n) 2 n. (A(1) ( n. (A(n) A(n + 1))) ) n. A(n) Und nun? B. Steffen 103

Verallgemeinertes Induktionsprinzip Satz Läßt sich eine Aussage über natürliche Zahlen für jede natürliche Zahl aus der Gültigkeit der Aussage für alle kleineren natürlichen Zahlen ableiten, dann ist sie für jede natürliche Zahl wahr. ( n. ( m < n. A(m)) A(n) ) n. A(n) vgl. vgl. DAP1-Skript DAP1-Skript Seite Seite24-25 B. Steffen 104

Überblick Beweisverpflichtungen A'(1) n. ( A'(n) A'(n+1) ) n. A'(n) n. ( m < n. A(m) A(n) ) n. A (n) A'(n) ist definiert durch m < n. A(m) B. Steffen 105

Rückführung verallgemeinerter auf vollständige Induktion vollständige Induktion A'(n) = df ( m < n. A(m)) trans A(n) n. A'(n) adapt n. A(n) verallgemeinerte Induktion B. Steffen 106

Adäquatheit Fibonacci-Funktion fib(0) = fib(1) = 1; fib(n) = fib(n -2) + fib(n-1). Fakt: n 0. fib(n) 2 n. (A(1) ( n. (A(n) A(n + 1))) ) n. A(n) ( n. ( m < n. A(m)) A(n) ) n. A(n) B. Steffen 107

Beh.: n 0. fib(n) 2 n Beweis durch verallgemeinerte Induktion nach n. Sei n 0 und es gelte: ) m < n. fib(m) 2 m zu zeigen: fib(n) 2 n Fallunterscheidung: 1) n=0: fib(0) = 1 2 0 2) n=1: fib(1) = 1 2 1 3) n 2: fib(n) = fib(n-2) + fib(n-1) (nach ) 2 n-2 + 2 n-1 2 n qed. B. Steffen 108

Bäume Ein (endlicher) Baum ist ein Tripel (V, E, r) bestehend aus einer endlichen Knotenmenge V einer endlichen Kantenmenge E VV und einem ausgezeichneten Element r, der Wurzel wobei: B. Steffen 109

Tiefe eines Knotens innerhalb eines Baumes jeder Knoten v V\{r} genau einen Vorgänger hat, d.h. es gibt genau eine Kante, die v als rechte Komponente hat. r keinen Vorgänger hat, d.h. es gibt keine Kante, die r als rechte Komponente hat jeder Knoten v V von r aus erreichbar ist, d.h. es gibt eine Folge von Kanten (einen Weg) der Form (r,v 1 ), (v 1,v 2 ),...,(v k-1,v k ), (v k,v) die Länge des eindeutigen Weges von r nach v nennt man die Tiefe von v. B. Steffen 110

Beispiele von Bäumen Binärer Baum Syntaxbaum Strukturbaum und viele mehr... B. Steffen 111

binärer Baum Tiefe 0 1 2 3 4 B. Steffen 112

Syntax- Baum Tiefe + 0 + * 1 * - + + 2 a b + y x a 5 3 7 b 4 ((a b) + (-(7+b))) + ((y+x) (a+5)) B. Steffen 113

Syntax- Baum Tiefe IN + 0 succ(succ(succ(succ(0)))) + * 1 succ(succ(succ(0))) * - + + 2 succ(succ(0)) a b + y x a 5 3 succ(0) 7 b 4 0 B. Steffen 114

Tiefe eines Baumes Die Tiefe eines Baumes ist die Länge seines längsten Weges. Dieser Weg geht offenbar immer von r zu einem Blatt, d.h. einem Knoten ohne Nachfolger. Wir bezeichnen die Tiefe eines Baumes mit tiefe. B. Steffen 115

Syntax- Baum tiefe IN + + - * * + + + 4 3 2 1 succ(succ(succ(succ(0)))) succ(succ(succ(0))) succ(succ(0)) succ(0) a b 7 b y x a 5 0 0 ((a b) + (-(7+b))) + ((y+x) (a+5)) B. Steffen 116

Strukturelle Induktion Satz vgl. vgl. DAP1-Skript DAP1-Skript Seite Seite27-29 Läßt sich eine Aussage für jedes Element einer induktiv definierten Menge S aus der Gültigkeit der Aussage für alle kleineren Bausteine ableiten, dann ist sie für jedes Element von S wahr. ( s S. ( s' Komp (s). A(s')) A(s)) s S. A(s). Komponenten Komp entsprechen den (echten) Teilstrukturen (Teilbäumen) einer induktiv definierten Baumstruktur. B. Steffen 117

Überblick Beweisverpflichtungen ( n. m < n. A'(m)) A'(n) ) n. A'(n) ( s S. ( s' Komp(s). A(s')) A(s) ) s S. A(s) n. A'(n) = df s S. tiefe(s) = n A(s) B. Steffen 118

Rückführung struktureller auf verallgemeinerte Induktion verallgemeinerte Induktion A'(n) = df l(s) na(s) trans A(s) n. A'(n) adapt s S. A(s) strukturelle Induktion B. Steffen 119

Strukturelle Definition von Funktionen und Eigenschaften Die strukturelle Definition einer Funktion f mit induktiv definiertem Definitionsbereich erfolgt (im elementaren Fall) durch 1. Festlegung von f für die atomaren Bausteine des Definitionsbereichs und 2. Angabe einer Vorschrift, wie sich die Funktionswerte komplexer Bausteine relativ zu den Funktionswerten ihrer Komponenten berechnen. f (s) =df g cons (f (s 1 ),.., f(s k )) Falls s ein durch Konstruktor cons zusammengesetztes Objekt der Form s = cons(s 1,..,s k ), (k0) ist und g cons eine auf dem Wertebereich bekannte Funktion ist. B. Steffen 120

Beispiel: Semantikfuntional. : BT (ENV ) Definition (Wahrheitswert, Belegung, Umgebung) = {tt, ff} Menge der Booleschen Wahrheitswerte β : ID, Belegung oder Umgebung ENV, die Menge der Belegungen Definition neg conj tt ff tt ff tt tt ff ff tt ff ff ff disj tt ff tt tt tt ff tt ff B. Steffen 121