Foliensatz von A. Weber zur Vorlesung Informatik I, Bonn, 2002/03

Slides:



Advertisements
Ähnliche Präsentationen
Kurzwiederholung Informatik I, Teil I: Grundkonzepte
Advertisements

Hash-Tabellen und -Funktionen Hash-Tabellen in Java
Informatik II: Algorithmen und Datenstrukturen SS 2013
Rekursion: Rekurrenz: Algorithmen rufen sich selbst (rekursiv) auf.
Falls Algorithmen sich selbst rekursiv aufrufen, so kann ihr Laufzeitverhalten bzw. ihr Speicherplatzbedarf in der Regel durch eine Rekursionsformel (recurrence,
Programmierung 1 - Repetitorium
Polynomial Root Isolation
Informatik II – Kapitel 11
Vorlesung: 1 Betriebliche Informationssysteme 2003 Prof. Dr. G. Hellberg Studiengang Informatik FHDW Vorlesung: Betriebliche Informationssysteme Teil3.
Invariante und Algorithmenentwurf
Rekursion vs. Iteration
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Frame-Logik Eine Einführung Andreas Glausch.
Lineare Suche Divide-and-Conquer-Suche Kombinationssuche
„Such-Algorithmen“ Zusammenfassung des Kapitels 11
3. Kapitel: Komplexität und Komplexitätsklassen
Grundlagen der Informatik
Kapitel 5Der Algorithmus In den vorangeggangenen Kapiteln wurde, aufbauend auf dem Begriff der Information, beschrieben, wie die statischen Objekte der.
Kapitel 5 Der Algorithmus
Einführung in Berechenbarkeit und Formale Sprachen
Friedhelm Meyer auf der Heide 1 HEINZ NIXDORF INSTITUT Universität Paderborn Algorithmen und Komplexität Notationen A = ist eine endliche, nichtleere menge,
Terminierung und Deadlocks Enkhbat Daginaa Betreuerin Prof. Heike Wehrheim Totale Korrektheit.
Christian Schindelhauer
1 HEINZ NIXDORF INSTITUT Universität Paderborn Algorithmen und Komplexität Einführung in Berechenbarkeit, Formale Sprachen und Komplexitätstheorie Wintersemester.
Übung 6.1Turing-Maschine 1.Machen Sie sich mit der Funktionsweise des Busy Beaver-Programms vertraut Vollziehen sie die 11 Schritte der ersten Turing-Tabelle.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen Halbzeit: Was haben wir bisher gelernt? Prof. Th. Ottmann.
WS Algorithmentheorie 08 – Dynamische Programmierung (2) Matrixkettenprodukt Prof. Dr. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 4 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 2 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 3 Einführung in die Theoretische Informatik (17 –Turingmaschinen) Prof. Dr. Th. Ottmann.
Kapitel 5 Stetigkeit.
Algorithmen und Komplexität Teil 1: Grundlegende Algorithmen
Christian Schindelhauer
Christian Schindelhauer
Christian Schindelhauer
Christian Schindelhauer
(Ron Rivest, Adi Shamit, Leonard Adleman , 1977)
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Beweissysteme Hartmut Klauck Universität Frankfurt WS 06/
Effiziente Algorithmen
grundlagen der Wirtschafts- informatik
Effiziente Algorithmen
Dateien Datei = File (engl.) Mögliche Inhalte einer Datei
Vorbereitung zur Reife- und Diplomprüfung Statistik
Effiziente Algorithmen
Black Box Algorithmen Hartmut Klauck Universität Frankfurt SS
Quantum Computing Hartmut Klauck Universität Frankfurt WS 05/
Information und Kommunikation Hartmut Klauck Universität Frankfurt SS
Beweissysteme Hartmut Klauck Universität Frankfurt WS 06/
Hartmut Klauck Universität Frankfurt WS 06/
Folie 1 Kapitel IV. Matrizen Inhalt: Matrizen als eigenständige mathematische Objekte Zusammenhang zwischen Matrizen und linearen Abbildungen Produkt von.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Programmierung Wintersemester 2013/14 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
2.4 Rekursion Klassifikation und Beispiele
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
Christian Schindelhauer Wintersemester 2006/07 3. Vorlesung
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
SFZ FN Sj. 13/14 Python 3 Rekursion Inf K1/2 Sj 13/14
Sortieralgorithmen Greedy Sortieren: Sortieren durch Auswahl, Einfügen und Austauschen Divide-and-Conquer-Sortieren: Quicksort und merge sort Foliensatz.
Wann ist eine Funktion (über den natürlichen Zahlen) berechenbar?
Programmiersprachen II Vorbesprechung Klausur Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Dr. Wolfram Amme, Semantik funktionaler Programme, Informatik II, FSU Jena, SS Semantik funktionaler Programme.
REKURSION + ITERATION.
 Präsentation transkript:

Foliensatz von A. Weber zur Vorlesung Informatik I, Bonn, 2002/03 Algorithmen und algorithmische Sprachkonzepte Programme und Algorithmen Foliensatz von A. Weber zur Vorlesung Informatik I, Bonn, 2002/03 Überarbeitet und ergänzt von W. Küchlin zu Informatik I, Tübingen 2003/04 W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag, ISBN 3-540-20958-1

Was ist ein Programm? Deutliche Diskrepanz zwischen beiden Begriffserklärungen im Lexikon! 'Programm': sehr allgemein (umgangssprachlich) aufgefasst 'Programmierung': spezifische Deutung des Begriffs 'Programm' 'Programm' im allgemeinen: z.B. Fernsehprogramm, Konferenzprogramm, Parteiprogramm 'Programm' im speziellen: nicht notwendig nur auf Computer bezogen Programm einer Waschmaschine, eines Videorecorders Programm einer Waschmaschine, eines Videorecorders Nach R. Manthey, Vorlesung Informatik I, Universität Bonn, WS 2001/2002 W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -2- Springer-Verlag, ISBN 3-540-20958-1

Was ist ein Programm? Nach R. Manthey, Vorlesung Informatik I, Universität Bonn, WS 2001/2002 W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -3- Springer-Verlag, ISBN 3-540-20958-1

Was ist ein Programm? Nach R. Manthey, Vorlesung Informatik I, Universität Bonn, WS 2001/2002 W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -4- Springer-Verlag, ISBN 3-540-20958-1

Begriff des Algorithmus Begriffsdefinition Ein Algorithmus (algorithm) ist die Beschreibung eines Verfahrens, um aus gewissen Eingabegrößen bestimmte Ausgabegrößen zu berechnen. Dabei müssen folgende Bedingungen erfüllt sein Spezifikation Durchführbarkeit Korrektheit W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -5- Springer-Verlag, ISBN 3-540-20958-1

Begriff des Algorithmus Spezifikation Eingabespezifikation: Es muss genau spezifiziert sein, welche Eingabegrößen erforderlich sind und welchen Anforderungen diese Größen genügen müssen, damit das Verfahren funktioniert Ausgabespezifikation: Es muss genau spezifiziert sein, welche Ausgabegrößen (Resultate) mit welchen Eigenschaften berechnet werden W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -6- Springer-Verlag, ISBN 3-540-20958-1

Begriff des Algorithmus Durchführbarkeit Endliche Beschreibung: das Verfahren muss in einem endlichen Text vollständig beschrieben sein Effektivität: Jeder Schritt des Verfahrens muss effektiv (d.h. tatsächlich) „mechanisch“ ausführbar sein Bem.: „Effektivität“ ist nicht zu verwechseln mit „Effizienz“ („Wirtschaftlichkeit“) Determiniertheit: Der Verfahrensablauf ist zu jedem Zeitpunkt fest vorgeschrieben W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -7- Springer-Verlag, ISBN 3-540-20958-1

Begriff des Algorithmus Korrektheit partielle Korrektheit: Jedes berechnete Ergebnis genügt der Ausgabespezifikation, sofern die Eingaben der Eingabespezifikation genügt haben Terminierung: Der Algorithmus hält nach endlich vielen Schritten mit einem Ergebnis an, sofern die Eingaben der Eingabespezifikation genügt haben W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -8- Springer-Verlag, ISBN 3-540-20958-1

Begriff des Algorithmus Bemerkung: Nach unserer Begriffsbestimmung gäbe es also keine nicht-deterministische, nicht-terminierende ... Algorithmen Diese Begriffe werden aber durchaus verwendet! Methode erfüllt alle Anforderungen an einen Algorithmus, bis auf die mit „nicht“ gekennzeichnete W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -9- Springer-Verlag, ISBN 3-540-20958-1

Ein "Algorithmus" aus dem täglichen Leben Nach R. Manthey, Vorlesung Informatik I, Universität Bonn, WS 2001/2002 W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -10- Springer-Verlag, ISBN 3-540-20958-1

Eine sehr alte Beschreibung eines Algorithmus Zitiert nach R. Manthey, Vorlesung Informatik I, WS 2001/2002 W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -11- Springer-Verlag, ISBN 3-540-20958-1

Herkunft des Wortes „Algorithmus“ nach R. Manthey, Vorlesung Informatik I, WS 2001/2002 W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -12- Springer-Verlag, ISBN 3-540-20958-1

Algorithmen und Programme nach R. Manthey, Vorlesung Informatik I, WS 2001/2002 W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -13- Springer-Verlag, ISBN 3-540-20958-1

Problem – Algorithmus - Programm Nach R. Manthey, Vorlesung Informatik I, Universität Bonn, WS 2001/2002 W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -14- Springer-Verlag, ISBN 3-540-20958-1

Prinzipien des Algorithmenentwurfs Neben den Bedingungen, die schon in die Begriffsdefinition eingegangen sind, gibt es weitere wichtige Prinzipien, die beim Entwurf zu beachten sind Effizienz Der Algorithmus soll möglichst wenig Aufwand verursachen Das Ergebnis mit möglichst wenig Rechenschritten (oder mit möglichst wenig Speicherbedarf) erzielen Frage der Komplexität von Algorithmen wichtiges Thema in der Informatik III und Informatik IV Korrektheit beweisbar? Ein nicht-korrekter Algorithmus ist nach unserer Definition kein Algorithmus! Trotzdem sind nicht-korrekte Verfahren eher die Regel als die Ausnahme W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -15- Springer-Verlag, ISBN 3-540-20958-1

Beschreibung von Algorithmen Für die Beschreibung von Algorithmen gibt es viele Möglichkeiten Alltagssprache Konkrete Programmiersprache Dazwischen gibt es eine Vielzahl von Notationen, die den Übergang zwischen Problembeschreibung und Programm erleichtern sollen Flussdiagramme Pseudocode W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -16- Springer-Verlag, ISBN 3-540-20958-1

Beschreibung von Algorithmen Wir stellen Algorithmen als Folge einzelner Bearbeitungsschritte dar Diese können ggf. wiederholt werden, bis das gewünschte Ergebnis erzielt ist Wiederholungen geschehen entweder innerhalb der Schrittfolge durch Anweisungen wie: weiter mit Schritt (2) („Iteration“), oder durch erneutes Aufrufen des Algorithmus mit einer einfacheren Problemstellung („Rekursion“) Jeder Schritt sollte wie ein Buchkapitel einem Thema folgen W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -17- Springer-Verlag, ISBN 3-540-20958-1

Grundschema des Algorithmenaufbaus Folgendes Grundschema wird uns bei vielen Algorithmen begegnen W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -18- Springer-Verlag, ISBN 3-540-20958-1

Grundschema des Algorithmenaufbaus: Beispiel Beispiel: Man finde ein Verfahren zur Berechnung des Rests r der Ganzzahldivision a/b, also für cb+r=a und r<b, wobei 0≤a und 0≤b Diese Funktion wird meist „Modulus-Funktion“ genannt, da ra mod b W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -19- Springer-Verlag, ISBN 3-540-20958-1

Steuerungsverlauf Die Anordnung der Anweisungen eines Algorithmus, die bestimmt, in welcher Reihenfolge Dinge geschehen, heißt Steuerungsverlauf (control flow) des Algorithmus Wird auch Kontrollfluss (flow of control) genannt Manchmal wird auch der Programmablauf oder Kontrollfaden (thread of control), also die tatsächlich abgespulten Schritte und Anweisungen so bezeichnet W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -20- Springer-Verlag, ISBN 3-540-20958-1

Steuerungsverlauf Die Konstruktion „fahre fort mit Schritt 2“ stellt einen Sprung (jump) im Steuerungsverlauf dar Dies ist die elementarste Form, eine Wiederholung oder sonstige Verzweigung im Ablauf auszudrücken Dadurch erhalten wir die elementar-iterative Beschreibungsform von Algorithmen W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -21- Springer-Verlag, ISBN 3-540-20958-1

Elementar-iterative Beschreibungsform Die elementar-iterative Beschreibungsform hat die nützliche und angenehme Eigenschaft: Wir können über einzelne Schritte des Verfahrens sprechen Die „fahre fort“-Konstruktion entspricht unmittelbar der goto-Anweisung im Programmieren Zur Anwendung von goto werden Schritte mit einer Marke (Label) versehen, um das Ziel des Sprunges zu kennzeichnen Anwendung von goto ist aber sehr gefährlich! Strukturiert komplexe Programm nicht ausreichend Steuerungsverlauf kann verworren und unübersichtlich sein W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -22- Springer-Verlag, ISBN 3-540-20958-1

Flussdiagramme Der Steuerungsverlauf kann mit der Notation der Flussdiagramme (flow chart) graphisch dargestellt werden Die Sprache der Flussdiagramme benutzt folgende Symbole Werden mit Pfeilen verbunden Die Ausführung solcher Ablaufpläne folgt den Pfeilen zwischen den Kästchen W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -23- Springer-Verlag, ISBN 3-540-20958-1

Beispiel: Grundschema des Algorithmenaufbaus als Flussdiagramm Flussdiagramme Beispiel: Grundschema des Algorithmenaufbaus als Flussdiagramm W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -24- Springer-Verlag, ISBN 3-540-20958-1

Modulus-Funktion als Flussdiagramm Beispiel: Flussdiagramm für iterative Beschreibung der Modulus-Funktion W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -25- Springer-Verlag, ISBN 3-540-20958-1

Strukturiert-iterative Beschreibungsform Um den Steuerungsverlauf auch bei komplexen Algorithmen übersichtlich zu halten, schränkt man die Sprünge ein: Schleifen der Flussdiagramme sind höchstens ineinander geschachtelt Schleifen überkreuzen sich nicht! Im Arbeitsschritt des Grundschemas würde man z. B. nur wieder eine geschlossene Schleife oder einen (vorzeitigen) Sprung zurück zum Test des Trivialfalls erlauben Wir sprechen in diesem Fall von strukturierten Sprüngen im Gegensatz zu freien Sprüngen, die prinzipiell beliebige Ziele haben können W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -26- Springer-Verlag, ISBN 3-540-20958-1

Strukturiert-iterative versus elemantar-iterative Beschreibungsform Beispiel: Schemata einiger Kontrollflüsse Strukturiert-iterativ Elementar-iterativ Spaghetti-Code W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -27- Springer-Verlag, ISBN 3-540-20958-1

Strukturiert-iterative Beschreibungsform Sprünge kommen zunächst nur noch implizit bei der Ausführung höherer Iterationsstrukturen vor Dieses sind Fallunterscheidungen wie if-then-else Oder insbesondere bei Schleifenkonstrukten (loop), wie etwa while Diese bewirken, dass der Programmfluss in einer Schleife von einem Test zu einem Bearbeitungsschritt und wieder zurück zum Test geht W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -28- Springer-Verlag, ISBN 3-540-20958-1

Strukturiert-iterative Beschreibungsform: while Schleifenkonstrukte: while Die klassische while-Schleife lautet wie folgt: Bei Eintritt in die while-Schleife wird zunächst die Bedingung (ein Boolescher Ausdruck) ausgewertet Beim Wert true wird die Anweisungssequenz einmal ausgeführt und danach erneut zur Bedingung verzweigt Beim Wert false wird die Schleife (ohne Ausführung der Anweisungssequenz) beendet W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -29- Springer-Verlag, ISBN 3-540-20958-1

Strukturiert-iterative Beschreibungsform: while Die while-Schleife entspricht also der Konstruktion . W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -30- Springer-Verlag, ISBN 3-540-20958-1

Rekursive Beschreibungsform Im rekursiven Ansatz versucht man, ein vorgelegtes Problem P(X) nach folgendem Schema in zwei Teilen zu lösen: Bem.: Rekursive und iterative Beschreibungsformen sind gleich mächtig Nach einer Formalisierung des Algorithmenbegriffs kann dies auch bewiesen werden! Etwa in der Vorlesung Informatik IV W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -31- Springer-Verlag, ISBN 3-540-20958-1

Rekursive Beschreibungsform: Beispiel Beispiel: In gängiger mathematischer Notation könnte ein Verfahren zur Berechnung der Modulus-Funktion a mod b wie folgt aussehen: W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -32- Springer-Verlag, ISBN 3-540-20958-1

Rekursive Beschreibungsform: Beispiel Beispiel (Forts.): Um festzustellen, ob diese Berechnungsvorschrift einen Algorithmus darstellt, müssen wir folgende Fragen beantworten: Spezifikation Eingabe Ausgabe Durchführbarkeit Endliche Beschreibung Effektivität Determiniertheit Korrektheit Partielle Korrektheit Terminierung W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -33- Springer-Verlag, ISBN 3-540-20958-1

Rekursive Beschreibungsform: Korrektheitsbeweis des Beispiels Beispiel (Forts.): Spezifikation W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -34- Springer-Verlag, ISBN 3-540-20958-1

Rekursive Beschreibungsform: Korrektheitsbeweis des Beispiels Beispiel (Forts.): W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -35- Springer-Verlag, ISBN 3-540-20958-1

Rekursive Beschreibungsform: Korrektheitsbeweis des Beispiels Beispiel (Forts.): W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -36- Springer-Verlag, ISBN 3-540-20958-1

Rekursive Beschreibungsform: Korrektheitsbeweis des Beispiels Beispiel (Forts.): Korrektheit Bemerkungen: Diese Überlegungen stellen einen Korrektheitsbeweis dar Die Termination konnte bei diesem Algorithmus also bewiesen werden; es gibt aber kein mechanisches Verfahren das bei einem beliebigen Algorithmus entscheiden kann, ob dieser terminiert oder nicht („Halte-Problem“) W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -37- Springer-Verlag, ISBN 3-540-20958-1

Rekursive Beschreibungsform: Beispiel in Java Das rekursive Verfahren in mathematischer Notation können wir mit minimalen Änderungen nach Java umsetzen Wir definieren dazu eine Java-Funktion mod, die zwei ganze Zahlen a und b als Parameter hat und eine ganze Zahl als Ergebnis liefert W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -38- Springer-Verlag, ISBN 3-540-20958-1

Rekursive Beschreibungsform: Beispiel in Java Zur Illustration stellen wir nun noch eine etwas ausführlichere (aber gleichwertige) Version dieser Funktion vor Kommentarzeilen Zum Vergleich: Rekursionsgleichung W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -39- Springer-Verlag, ISBN 3-540-20958-1

Euklidischer Algorithmus zur ggT-Berechung Als weiteres Beispiel für die rekursive Beschreibungsform nehmen wir den Euklidischen Algorithmus zu Berechnung des größten gemeinsamen Teilers (ggT) zweier ganzer Zahlen W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -40- Springer-Verlag, ISBN 3-540-20958-1

Euklidischer Algorithmus zur ggT-Berechung Beschreibung in einem Pseudo-Code Zum Vergleich: Rekursionsgleichung W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -41- Springer-Verlag, ISBN 3-540-20958-1

Euklidischer Algorithmus zur ggT-Berechung Beschreibung in Java Andere Art eines Kommentars, ein „Dokumentationskommentar“ Modulus-Funktion ist in Java eingebaut; wird durch das Symbol % beschrieben; könnten auch die selbst definierte Funktion mod aufrufen W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -42- Springer-Verlag, ISBN 3-540-20958-1

Rekursion und funktionale Programmierung Der rekursive Ansatz zur Problemlösung ist die Hauptdenkweise, die die funktionalen Programmiersprachen unterstützen Etwa LISP, Scheme, ML, Haskell Vorzug liegt in der großen Eleganz und Kompaktheit gerade bei kleinen Lehrbuchbeispielen Dieser Ansatz erfordert nur sehr wenige syntaktische Konstrukte der Programmiersprache (kein while, for, repeat, ...) W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -43- Springer-Verlag, ISBN 3-540-20958-1

Rekursion und funktionale Programmierung Funktionale Denkweise: kein Begriff des Zustands (state) einer Berechnung. manchmal beträchtliche Eleganz, erleichtert auch Korrektheitsbeweise Alle Daten sind global, alle Funktionen können auf allen Daten operieren Objektorientierte Denkweise: Funktionen sind mit ihren Daten zu Objekten gekapselt Objekte interagieren durch Fenster mit anderen Objekten Objekte haben Zustände (gegeben durch die Daten) Zustände werden durch Berechnung weiterentwickelt In der objektorientierten Welt ist daher das (ebenfalls klassische) zustandsorientierte iterative Konzept zur Konstruktion von algorithmischen Problemlösungen am weitesten verbreitet Wie wir gesehen haben, kann auch in einer objektorientierten Sprache wie Java rekursiv programmiert werden! W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -44- Springer-Verlag, ISBN 3-540-20958-1

Konstruktion und Verifikation iterativer Algorithmen Bei der Verwendung von imperativen (Anweisungs orientiert) Programmiersprachen wie Java stellt die Konstruktion korrekter iterativer Algorithmen den Kern des Programmierens dar Hat man diese nicht verstanden, kann man auch nicht programmieren Wir betrachten deshalb den Grundaufbau iterativer Algorithmen nochmals in vertiefter Form Besonders auch unter dem Aspekt, dass wir strukturiert-iterative Algorithmen entwickeln und als korrekt beweisen wollen W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -45- Springer-Verlag, ISBN 3-540-20958-1

Konstruktion und Verifikation iterativer Algorithmen Betrachten Grundschema des Algorithmenaufbaus in einer Variante, die einem strukturiert-iterativen Ansatz entspricht Der Algorithmus operiert dabei auf einer Menge V von Variablen (Name mit wechselndem Wert) Diese Zustandsvariablen haben veränderliche Werte und können somit bearbeitet werden, und unter ihnen befindet sich schlußendlich das Resultat Nach einem Vorbereitungsschritt wird so lange die Arbeit f(V) verrichtet, wie die Schleifenbedingung C(V) wahr ist Danach wird ein Nachbearbeitungsschritt ausgeführt und der Algorithmus beendet W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -46- Springer-Verlag, ISBN 3-540-20958-1

Konstruktion und Verifikation iterativer Algorithmen Zur Verifikation werden Zustandsvariablen partitioniert in V=EHA E ist Menge der Eingabevariablen Eingabeparameter der Berechnung A ist Menge der Ausgabevariablen Werte zum Schluss zeigen Ergebnis der Berechnung an H ist Menge der Hilfsvariablen Die Werte der Variablen spiegeln zu jedem Zeitpunkt den Zustand (state) der Berechnung wider W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -47- Springer-Verlag, ISBN 3-540-20958-1

Konstruktion und Verifikation iterativer Algorithmen Problemlösung durch den Algorithmus findet also dadurch statt, dass der Anfangszustand V0, in dem nur die Variablen in E relevante Werte haben, durch eine Berechnungssequenz Schritt für Schritt („iterativ“) in einen Endzustand transformiert wird In dem die Werte der Variablen in A das gewünschte Gesamtresultat darstellen Oft gibt es nur ein einziges Resultat, das wir üblicherweise mit r oder res bezeichnen W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -48- Springer-Verlag, ISBN 3-540-20958-1

Konstruktion und Verifikation iterativer Algorithmen Ein elementarer Berechnungsschritt eines Algorithmus ändert im Allgemeinen den Wert von Variablen Variablen können Werte zugewiesen werden Zuweisungsoperator in imperativen Sprachen von fundamentaler Bedeutung In Pascal heißt Zuweisungsoperator := Benutzen := für Zuweisungsoperator in Pseudocode In C, C++, Java heißt Zuweisungsoperator = W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -49- Springer-Verlag, ISBN 3-540-20958-1

Konstruktion und Verifikation iterativer Algorithmen Erfolgt Reduktion mithilfe strukturierter Iteration, so kann i.A. Korrektheit durch Finden einer geeigneten Schleifeninvariante bewiesen werden Schleifeninvariante: Prädikatenlogische Formel INV(V), die an bestimmter Stelle einer Schleife bei allen Schleifendurchgängen stets gilt F(V) ist Schleifeninvariante falls F(V) gilt vor dem ersten Durchgang F(V) => F(V ´); F gilt nachher, falls F vorher gegolten hat W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -50- Springer-Verlag, ISBN 3-540-20958-1

Konstruktion und Verifikation iterativer Algorithmen Grundschema der strukturierten Iteration mit Schleifeninvariante als UML activity chart Schleifeninvariante INV(V) geeignete Formel, die bei allen Schleifendurchgängen gilt W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -51- Springer-Verlag, ISBN 3-540-20958-1

Konstruktion und Verifikation iterativer Algorithmen Grundschema der strukturierten Iteration mit Schleifeninvariante Schleifeninvariante INV(V) geeignete Formel, die bei allen Schleifendurchgängen gilt Verifikation nach Floyd: INV(V) ʌ C(V) => nach Arbeit f(V) gilt INV(V) Anforderung => nach Vorbereitung gilt INV(V) INV(V) ʌ ¬C(V) => nach Nachbereitung gilt Zusicherung W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -52- Springer-Verlag, ISBN 3-540-20958-1

Verifikationsmethode von Floyd Die Verifikationsmethode von Floyd für das Grundschema iterativer Algorithmen ist Finde eine geeignete Formel F(V) und zeige, dass sie eine Schleifen-Invariante an der im Flußdiagramm auf voriger Seite angegebenen Stelle ist; bezeichne F(V) nachfolgend mit INV(V) Zeige, dass aus der Eingabespezifikation folgt, dass INV(V) vor dem ersten Schleifendurchgang gültig ist Zeige, dass nach dem letzten Schleifendurchgang aus INV(V) und aus der Negation der Schleifenbedingung C(V), also aus INV(V)   C(V) die Gültigkeit der Ausgabespezifikation folgt Zeige, dass die Schleife terminiert W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -53- Springer-Verlag, ISBN 3-540-20958-1

Verifikationsmethode von Floyd W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -54- Springer-Verlag, ISBN 3-540-20958-1

Konstruktion und Verifikation iterativer Algorithmen Algorithmus für die Fakultätsfunktion mit Schleifeninvariante Schleifeninvariante F(n,r,i)= [n! = r*i!] W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -55- Springer-Verlag, ISBN 3-540-20958-1

Konstruktion und Verifikation iterativer Algorithmen Fakultätsfunktion als UML activity chart W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -56- Springer-Verlag, ISBN 3-540-20958-1

Konstruktion und Verifikation iterativer Algorithmen W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -57- Springer-Verlag, ISBN 3-540-20958-1

Konstruktion und Verifikation iterativer Algorithmen Beispiel: Modulus-Funktion (iterativ) W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -58- Springer-Verlag, ISBN 3-540-20958-1

Konstruktion und Verifikation iterativer Algorithmen Beispiel: Modulus-Funktion (iterativ) W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -59- Springer-Verlag, ISBN 3-540-20958-1

Konstruktion und Verifikation iterativer Algorithmen Beispiel: Modulus-Funktion (iterativ) als UML activity chart W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -60- Springer-Verlag, ISBN 3-540-20958-1

Konstruktion und Verifikation iterativer Algorithmen Beispiel: Verifikation der Modulus-Funktion (iterativ) nach Floyd Verifikation nach Floyd: Aus [a-(a/b)*b = r-(r/b)*b] und (r>=b) und {r := r-b;} folgt [a-(a/b)*b = r-(r/b)*b] Aus (a >= 0, b > 0) und {r := a;} Aus [a-(a/b)*b = r-(r/b)*b] und (r < b) und {return( r );} folgt (r = a – (a/b)*b) W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -61- Springer-Verlag, ISBN 3-540-20958-1

Konstruktion und Verifikation iterativer Algorithmen Verifikations-Beispiel: Modulus-Funktion (iterativ) W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -62- Springer-Verlag, ISBN 3-540-20958-1

Konstruktion und Verifikation iterativer Algorithmen Finden von Schleifen-Invarianten Invariante für fac(n) : [n! = r * i!] Invariante für mod(a,b): [(a mod b) = r – (r/b)*b] Gemeinsame Struktur Links von = steht die Aufgabe Rechts steht getane Arbeit und noch zu tuende Arbeit r steht für getane Arbeit (akkumuliertes Ergebnis) Schleifen-Index i repräsentiert noch zu tuende Arbeit Bei fac ist i! der Wert, den man noch zu r multiplizieren muß, bis r = n! Bei mod ist (r/b)*b der Wert, den man noch von r abziehen muß, bis r = (a mod b). W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -63- Springer-Verlag, ISBN 3-540-20958-1