Rekursion vs. Iteration

Slides:



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

Christian Scheideler SS 2009
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
6. Regelbasierte Systeme
Christian Schindelhauer
Informatik II – Kapitel 11
Invariante und Algorithmenentwurf
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
WS Prof. Dr. Th. Ottmann Algorithmentheorie 09 - Suche in Texten KMP, BM.
Foliensatz von A. Weber zur Vorlesung Informatik I, Bonn, 2002/03
Lineare Suche Divide-and-Conquer-Suche Kombinationssuche
Suche in Texten (Stringsuche )
Kapitel 6. Suchverfahren
Lösung 6.3 Denksportaufgabe
Terminierung und Deadlocks Enkhbat Daginaa Betreuerin Prof. Heike Wehrheim Totale Korrektheit.
Ü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.
REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.
WS Algorithmentheorie 13 - Kürzeste (billigste) Wege Prof. Dr. Th. Ottmann.
Dynamische Programmierung (2) Matrixkettenprodukt
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (13 – Offenes Hashing) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (10 - Suchverfahren) T. Lauer.
Bestimmung des Next-Arrays im KMP-Algorithmus
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
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 (21 – Kürzeste Wege) T. Lauer.
Kapitel 1 Die natürlichen und die ganze Zahlen. Kapitel 1: Die natürlichen und die ganzen Zahlen © Beutelspacher/Zschiegner April 2005 Seite 2 Inhalt.
Kapitel 6 Differenzierbarkeit. Kapitel 6: Differenzierbarkeit © Beutelspacher Juni 2005 Seite 2 Inhalt 6.1 Die Definition 6.2 Die Eigenschaften 6.3 Extremwerte.
Eduard Sauerbrei Formale Techniken Eduard Sauerbrei
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Effiziente Algorithmen
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Chromatische Zahl.
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Black Box Algorithmen Hartmut Klauck Universität Frankfurt SS
Hartmut Klauck Universität Frankfurt WS 06/
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.
Christian Mansky Design - Fallstudien Christian Mansky
Auswahlanweisungen, Iterationsanweisungen, Blöcke, Sprunganweisungen
2.4 Rekursion Klassifikation und Beispiele
Writing Correct Programs (Programme korrekt erstellen) Vortrag zum Oberseminar Softwareentwicklung von Jörg Winkler (01IN-PI)
Algorithmen und Datenstrukturen Übungsmodul 8
Automaten, formale Sprachen und Berechenbarkeit II SoSe 2004 Prof. W. Brauer Teil 1: Wiederholung (Vor allem Folien von Priv.-Doz. Dr. Kindler vom WS 2001/02.
Algorithmen und Datenstrukturen Übungsmodul 3
Vorlesung 3. if else Anweisung if (Ausdruck) Anweisung1 else Anweisung2 Ausdruck hat einen von 0 verschiedenen Wert, so wird Anweisung 1 ausgeführt. Bei.
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
Korrektheit von Programmen – Testen
SFZ FN Sj. 13/14 Python 3 Rekursion Inf K1/2 Sj 13/14
A) Erklären Sie den Datentyp char. b) Erklären Sie den Datentyp Struct c) Erklären Sie die Wirkungsweise des Operators & bei Anwendung im Zusammenhang.
Wozu Maple? Symbolische Algebra Manche Sachen soll man besser nicht von Hand machen –kleine Rechnungs Fehler können mehrere Millionen werden – am besten.
Prüfungsbesprechung Barbara Scheuner Vorlesung: Programmieren und Problemlösen Prof. Hans Hinterberger.
Diskrete Mathe Diskrete Mathematik I Listen Vorlesung 4.
Algorithmen und Datenstrukturen Prof. Dr. Ralf Möller Universität zu Lübeck Institut für Informationssysteme Stefan Werner (Übungen) sowie viele Tutoren.
Tabellen im Word Als erstes müsst ihr das Microsoft Word starten.
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
Deterministische Kellerautomaten und das Wortproblem
Wiederholung Größte gemeinsame Teiler Satz von Bezout:
Writing Correct Programs
REKURSION + ITERATION.
 Präsentation transkript:

Rekursion vs. Iteration Anhand einer Beispielfunktion werden das Konzept der Rekursion und das der Iteration, sowie Korrektheitsbeweis-verfahren (Induktion, Floyd) erläutert. 28.11.2003

Rekursion vs. Iteration Anforderung: Zusicherung: Das Ergebnis ist sum_rek(n){ if (n == 0) then return 0; fi return ( n + summe_rek( n-1 ) ); } sum_iter(n){ k := n; erg := 0; while ( k >= 0 ) do { erg := k + erg; k := k - 1; } od return erg; }

Betrachten wir den Ablauf der Rekursion bei Eingabe n=3: sum_rek(n){ if (n == 0) then return 0; fi return ( n + summe_rek( n-1 ) ); } return: In Folge eines Aufrufs des return-statements wird der Rest des Codes nicht mehr ausgeführt. Betrachten wir den Ablauf der Rekursion bei Eingabe n=3: sum_rek( 3 ) => return ( 3 + sum_rek( 2 ) ) => return ( 3 + (return ( 2 + sum_rek( 1 ) ) ) ) => return ( 3 + (return ( 2 + (return (1 + sum_rek( 0 ) ) ) ) ) ) => return ( 3 + (return ( 2 + (return (1 + (return 0) ) ) ) ) ) => return ( 3 + (return ( 2 + (return (1 + 0 ) ) ) ) ) => return ( 3 + (return ( 2 + 1 ) ) ) => return ( 3 + 3 ) => 6

Betrachten wir den Ablauf der Iteration bei Eingabe n=3: sum_iter(n){ k := n; erg := 0; while ( k >= 0 ) do { erg := k + erg; k := k - 1; } od return erg; } Betrachten wir den Ablauf der Iteration bei Eingabe n=3: sum_iter( 3 ) => [erg = 0; k = 3;] => < (k >= 0)? > Ja =>=> [erg = 3; k =2;] => < (k >= 0)? > Ja =>=> [erg = 5; k =1;] => < (k >= 0)? > Ja =>=> [erg = 6; k =0;] => < (k >= 0)? > Ja =>=> [erg = 6; k =-1;] => < (k >= 0)? > Nein => return erg; => 6

¨ Korrektheitsbeweis der Rekursion (vollst. Induktion) sum_rek(n){ if (n == 0) then return 0; fi return ( n + summe_rek( n-1 ) ); } Vollständige Induktion: InduktionsAnfang: InduktionsVoraussetzung: InduktionsSchritt: ¨ Mit n > (n-1) > ... > 0 folgt die Terminierung des Verfahrens.

... ... Was haben wir mit der Induktion gezeigt? n-1 n ... ... n-1 n Es gibt ein Element am Anfang, für welches die Behauptung gilt (InduktionsAnfang). Wenn die Behauptung für irgendein Element gilt (InduktionsVoraussetzung), so folgt daraus, dass sie auch für das Nachfolgeelement gilt (InduktionsSchritt; zu zeigen!). Daraus folgt, das die Behauptung für alle Elemente gilt, denn: Aus dem ersten Element kann ich mit der Behauptung das zweite bestimmen und daraus das dritte u.s.w. Dass die Behauptung für das Nachfolgeelement gilt haben wir bewiesen!

erg Korrektheitsbeweis der Iteration (Floyd) sum_iter(n){ k := n; erg := 0; while ( k >= 0 ) do { erg := k + erg; k := k - 1; } od return erg; } Finden der Invarianten, die hier gelten muss: „Was wollen wir?“ = „getan“ + „zu tun“ erg

erg Korrektheitsbeweis der Iteration (Floyd) Invariante: Beispiel: (n-k gibt an, wie oft die Schleife schon durchlaufen worden ist) Beispiel: Wir suchen sum_iter(3) und haben die Schleife genau einmal durch-laufen:

Korrektheitsbeweis der Iteration (Floyd) Invariante: erg [=INV( (erg, k) )] Gilt die Invariante vor dem ersten Schleifendurchlauf? Gilt die Invariante auch nach einem beliebigen Schleifendurchlauf noch?

Korrektheitsbeweis der Iteration (Floyd) 2. Gilt die Invariante auch nach einem beliebigen Schleifendurchlauf noch? Vorher: Nachher: Invariante:

Korrektheitsbeweis der Iteration (Floyd) Invariante: erg [=INV( (erg, k) )] Gilt die Invariante vor dem ersten Schleifendurchlauf? Gilt die Invariante auch nach einem beliebigen Schleifendurchlauf noch? Stimmt das Ergebnis, wenn die Invariante nach dem letzten Schleifendurch- lauf gilt? Die Terminierung folgt wieder aus n > n-1 > 0 > -1.