630 likes | 1.03k Views
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. Was ist ein Programm?.
E N D
Algorithmen und algorithmische SprachkonzepteProgramme 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 • EndlicheBeschreibung: 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 wichtigePrinzipien, 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 • Korrektheitbeweisbar? • 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 FolgeeinzelnerBearbeitungsschritte 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 einfacherenProblemstellung („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 ra 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-iterativeBeschreibungsform 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 vongoto 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 Pfeilenverbunden • 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
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üngeein: • 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 strukturiertenSprüngenim Gegensatz zu freienSprü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 Spaghetti-Code Strukturiert-iterativ Elementar-iterativ 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 gleichmä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 Vorbereitungsschrittwird so lange die Arbeitf(V) verrichtet, wie die SchleifenbedingungC(V) wahr ist • Danach wird ein Nachbearbeitungsschrittausgefü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=EHA • Eist Menge der Eingabevariablen • Eingabeparameter der Berechnung • Aist Menge der Ausgabevariablen • Werte zum Schluss zeigen Ergebnis der Berechnung an • Hist 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 BerechnungssequenzSchritt 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