Informatik I Rekursion

Ähnliche Dokumente
Beispiel: Fibonacci-Zahlen

11. Rekursion. 1, falls n 1. n (n 1)!, andernfalls. Mathematische Rekursion. Rekursion in Java: Genauso! Unendliche Rekursion. n!

12. Rekursion. 1, falls n 1. n (n 1)!, andernfalls. Lernziele. Mathematische Rekursion. Rekursion in Java: Genauso! n! =

5. Numerische Differentiation. und Integration

Beispiel: Fibonacci-Zahlen

5. Numerische Differentiation. und Integration

Rekursion. Sie wissen wie man Programme rekursiv entwickelt. Sie kennen typische Beispiele von rekursiven Algorithmen

G. Zachmann Clausthal University, Germany Die wichtigsten Entwurfsverfahren für Algorithmen:

Vorkurs Informatik WiSe 17/18

Vorkurs Informatik WiSe 16/17

Mathematische Rekursion

Rekursion. Dr. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung

FHZ. K13 Rekursion. Lernziele. Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren. Inhalt

2. Algorithmische Methoden 2.1 Rekursion. 18. April 2017

Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Gültigkeitsbereich. T. Neckel Einführung in die wissenschaftliche Programmierung IN8008 Wintersemester 2016/

Software Entwicklung 1

Einführung in die Informatik I

Kapitel 7: Rekursion. Inhalt. Rekursion: Technik Rekursion vs. Iteration

II.3.1 Rekursive Algorithmen - 1 -

Datenstrukturen. Mariano Zelke. Sommersemester 2012

Einführung in die Programmierung

C++ - Kontrollstrukturen Teil 2

Programmieren lernen mit Groovy Rekursion Rekursion und Iteration

9. Rekursion. 1 falls n 1 n (n 1)!, andernfalls. Experiment: Die Türme von Hanoi. Links Mitte Rechts. Mathematische Rekursion

Algorithmen und Datenstrukturen"

Algorithmen und Datenstrukturen"

4 Rekursionen. 4.1 Erstes Beispiel

Beispiel 1: Fakultät

Rekursive Funktionen

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 7. Entrekursivierung

Rekursive Funktionen

Informatik I. Informatik I Iteration vs. Rekursion. Iteration vs. Rekursion Iteration vs. Rekursion. 20. Iteration vs.

Inhalt. 3. Spezielle Algorithmen

Algorithmenbegriff: Berechenbarkeit. Algorithmenanalyse. (Berechnung der Komplexität)

Lösungsblatt zur Vorlesung. Kryptanalyse WS 2009/2010. Blatt 5 / 9. Dezember 2009 / Abgabe bis spätestens 23. Dezember 2009, 10 Uhr (vor der Übung)

JAVA - Rekursion

Datenstrukturen und Algorithmen

Mehrdimensionale Numerische Integration mittels hierarchischer Basen

Inhalt Kapitel 2: Rekursion

Grundlagen der Programmierung in C Funktionen

Auswählen nach Rang (Selektion)

Stack. Seniorenseminar Michael Pohlig

Rekursive Funktionen und ihre programmtechnische Umsetzung

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

5 Numerische Mathematik

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

Das Suchproblem. Gegeben Menge von Datensätzen. Beispiele Telefonverzeichnis, Wörterbuch, Symboltabelle

Informatik I. Jan-Georg Smaus. Iteration vs. Rekursion. Iterativer Algorithmus Beweis der Korrektheit Python- Programm Zusammenfassung

Hallo Welt für Fortgeschrittene

Klausur WS 2013/14 EDV 2 Anwendungen im Bauwesen. Name: Vorname: Matr.-Nr:

Das Suchproblem 4. Suchen Das Auswahlproblem Suche in Array

Übersicht. Datenstrukturen und Algorithmen. Die Teile-und-Beherrsche-Methode. Übersicht. Vorlesung 3: Rekursionsgleichungen (K4)

Einführung in die Informatik I

Inhalt. 3. Spezielle Algorithmen

Das Suchproblem. Gegeben Menge von Datensätzen. Beispiele Telefonverzeichnis, Wörterbuch, Symboltabelle

Das Suchproblem 4. Suchen Das Auswahlproblem Suche in Array

4. Fortgeschrittene Algorithmen 4.1 Rekursion 4.2 Daten und Datenstrukturen 4.3 Bäume

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Average-Case-Komplexität

Diskrete Strukturen Kapitel 5: Algebraische Strukturen (Gruppen)

KAPITEL 10. Numerische Integration

Zahlentheorie, Arithmetik und Algebra I. Katharina Falk Medizintechnik Master

Numerische Verfahren und Grundlagen der Analysis

Student: Alexander Carls Matrikelnummer: Aufgabe: Beschreibung des euklidischen Algorithmus Datum:

ALPII Objektorientierte Programmierung

Komplexität von Algorithmen

INFORMATIK FÜR BIOLOGEN

12. Rekursion Grundlagen der Programmierung 1 (Java)

f 1 (n) = log(n) + n 2 n 5 f 2 (n) = n 3 + n 2 f 3 (n) = log(n 2 ) f 4 (n) = n n f 5 (n) = (log(n)) 2

SFZ FN Sj. 12/13. Python 4 Grundlagen. W.Seyboldt. Python, SFZ FN, Sj 12/13

Kapitel 08: Rekursion und Terminierung Software Entwicklung 1

10. Sortieren III. Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

9 Türme von Hanoi Bewege Stapel von links nach rechts. In jedem Zug darf genau ein Ring bewegt werden. Es darf nie ein größerer auf einen kleine

Nullstellen von algebraischen Gleichungen

11. Rekursion, Komplexität von Algorithmen

Quadtrees und Meshing

Programmieren 1 C Überblick

Quadtrees und Meshing

Quad-trees. Benjamin Niedermann Übung Algorithmische Geometrie

Stabilitätsabschätzungen Vorlesung vom

Informatik für Schüler, Foliensatz 18 Rekursion

3. Suchen. Das Suchproblem. Suche in Array. Lineare Suche. 1 n. i = n Gegeben Menge von Datensätzen.

Transkript:

Informatik I Rekursion G. Zachmann Clausthal University, Germany zach@in.tu-clausthal.de Motivation Neue Denkweise eistungsfähiges Algorithmenschema Divide-and-conquer Viele Berechnungen und Datenstrukturen sind von Haus aus selbst-bezüglich: Ein Verzeichnis enthält Daten und andere Verzeichnisse Euklid's ggt Algorithmus Quicksort Verkettete Datenstrukturen Drawing Hands M. C. Escher, 948 G. Zachmann Informatik - WS 05/06 Rekursion 2

Beispiel: Größter Gemeinsamer Teiler Finde größte ganze Zahl d, die p und q teilt Basisfall (base case) Reduktionsschritt (reduction step, converges to base case) ggt(4032, 272)= ggt(272,26) = ggt(26, 92) = ggt(92, 24) = ggt(24, 0) = 24. 4032 = 2 6 3 2 7 272 = 2 3 3 53 ggt = 2 3 3 = 24 Anwendungen. RSA Verschlüsselung Geschichte von Algorithmen Euklid, 300 v.chr. G. Zachmann Informatik - WS 05/06 Rekursion 3 Beweis für Formel: p q q p % q x x x x x x x x ggt G. Zachmann Informatik - WS 05/06 Rekursion 4

Python Implementierung def gcd( p, q ): if q == 0: return p else: return gcd(q, p%q) base case reduction step Basisfall (base case) Reduktionsschritt (reduction step, converges to base case) G. Zachmann Informatik - WS 05/06 Rekursion 5 Exkurs: Turtle-Grafik Einfache Beschreibung von 2D-Grafiken Idee: Schildkröte auf Blatt Papier zieht Stift hinter sich her Schildkröte kann nur wenige Befehle ausführen: Stift hoch / runter Stiftfarbe wechseln x mm nach vorne krabbeln (und Stift dabei hinter sich herziehen) sich um n Grad nach links/rechts drehen Beispiel: F: cm vorwärts (Stift unten) : inksdrehung um 90 R: Rechtsdrehung um 90 Zeichensequenz: F F F R F vorwärts G. Zachmann Informatik - WS 05/06 Rekursion 6

Koch-Schneeflocke Rekursiver Algo für Koch-Kurve der Ordnung n:. Zeichne die Kurve der Ordnung n- 2. Drehe das Blatt um 60º 3. Zeichne die Kurve der Ordnung n- 4. Drehe um -20º 5. Zeichne die Kurve der Ordnung n- 6. Drehe um 60º 7. Zeichne die Kurve der Ordnung n- n = 0 size n = 2 n = 3 size n = def koch( n, size): if n == 0: Turtle.move(size) else: koch(n-, size) Turtle.rotate(60) koch(n-, size) Turtle.rotate(-20) koch(n-, size) Turtle.rotate(60) koch(n-, size) G. Zachmann Informatik - WS 05/06 Rekursion 7 Rekursions-Baum n 2 R R R R R 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 R R R R R : Rotate 60º R: Rotate -20º G. Zachmann Informatik - WS 05/06 Rekursion 8

Koch-Schneeflocke Rekursiver Algo für "Koch- Schneeflocke der Ordnung n":. Zeichne Koch-Kurve der Ordnung n 2. Drehe um -20º 3. Zeichne Koch-Kurve der Ordnung n 4. Drehe um -20º 5. Zeichne Koch-Kurve der Ordnung n G. Zachmann Informatik - WS 05/06 Rekursion 9 Koch-Schneeflocke in Python def snowflake( N, width ): height = int( width * 2.0 / math.sqrt(3.0) ) size = width / math.pow(3.0, N) // create and init turtle... // draw snowflake x0, y0 = 0, width * math.sqrt(3.0) / 2 turtle.fly( x0, y0 ) koch(n, size) turtle.rotate(-20) koch(n, size) turtle.rotate(-20) koch(n, size) G. Zachmann Informatik - WS 05/06 Rekursion 0

Türme von Hanoi Verschiebe alle Scheiben von linkem Stab zu rechtem Stab Jeweils darf nur eine Schreibe verschoben werden Eine Scheibe darf entweder auf leeren Stab oder auf eine größere Scheibe gesetzt werden, nicht auf kleinere Scheibe Start Towers of Hanoi demo (http://www.mazeworks.com/download/index.htm) Ende Edouard ucas (883) G. Zachmann Informatik - WS 05/06 Rekursion Rekursive ösung A B C Verschieben n- kleinste Scheiben auf Stab B Verschiebe größte Scheibe auf Stab C Verschieben n- kleinste Scheiben auf Stab C G. Zachmann Informatik - WS 05/06 Rekursion 2

Rekursionsbaum n 3, ABC from, temp, to 2, ACB move 3 from A to C 2, BAC move 2 from A to B move 2 from B to C, ABC, CAB, BCA, ABC move from A to C move from C to B move from B to A move from A to C 0, ACB 0, BAC 0, ACB 0, ACB 0, BAC 0, CBA 0, ACB 0, BAC 2 3 2 G. Zachmann Informatik - WS 05/06 Rekursion 3 Eigenschaften der ösung der Türme von Hanoi 2 N - Scheibenbewegungen, um N Scheiben-Problem zu lösen Kleinste Scheibe bewegt sich immer in die gleiche Richtung (bei "kreisförmiger" Anordnung der Stäbe) Es gibt auch nicht-rekursive (iterative) ösungen G. Zachmann Informatik - WS 05/06 Rekursion 4

Divide-and-Conquer Eine Algorithmentechnik (Algorithmenparadigma) Annahme: wir hätten schon eine ösung für Probleme der Größe N-. Teile Problem der Größe N auf in zwei oder mehr kleinere Probleme mit ähnlicher Struktur 2. öse die kleineren Probleme (rekursiv mit der gleichen Methode) 3. Kombiniere die ösungen zur ösung des originalen Problems Historischer Ursprung Julius Caesar (00 v.chr. - 44 v.chr.) "Divide et impera." Für viele Probleme gibt es elegante divide-and-conquer ösung G. Zachmann Informatik - WS 05/06 Rekursion 5 Beispiel: Numerische Integration Aufgabe: Integriere eine glatte Funktion f(x) für x in [a,b] Quadratur: unterteile den Abstand von a bis b in kleine Stücke, approximiere die Fläche jeden Stücks unter der Kurve, und berechne die Summe Rechteck-Regel: approximiere durch konstante Funktionen Trapez-Regel: approximiere durch lineare Funktionen a Rechteck Regel b x 0 x x N Trapez Regel G. Zachmann Informatik - WS 05/06 Rekursion 6

Python-Code für Trapez-Regel def f(x): # zu integrierende Funktion return math.exp(-x*x/3) / math.sqrt(2*math.pi) def trapezoid(a, b, N): h = (b - a) / N sum = 0.5 * h * (f(a) + f(b)) for k in range(, N): sum += h * f(a + h*k) return sum # N = Anzahl der Unterteilungen des Intervals print trapezoid(-3.0, 3.0, 000) G. Zachmann Informatik - WS 05/06 Rekursion 7 Verbesserung: Adaptive Quadratur Problem der Trapez-Regel: festgelegte Anzahl äquidistanter Teilintervalle Adaptive Quadratur: veränderliche Anzahl Teilintervalle, die die Form der Kurve anpassen G. Zachmann Informatik - WS 05/06 Rekursion 8

Rekursive ösung Rekursion: Unterteile das Intervall in zwei gleiche Stücke Berechne die Fläche jedes Stückes rekursiv iefere die Summe zurück Abbruchkriterium (Basisfall): Durch zwei versch. Quadraturverfahren die geg. Fläche approximieren Wenn fast gleich, diese Fläche liefern; sonst: Rekursion weitermachen def adaptive(a, b, eps) : area = trapezoid(a, b, 0) check = trapezoid(a, b, 5) if math.abs(area - check) > eps: m = (a + b) / 2 area = adaptive(a, m) + adaptive(m, b) return area G. Zachmann Informatik - WS 05/06 Rekursion 9 Eine schlechte rekursive Funktion Hier: kein Basis-Fall! Analog zu unendlichen Schleifen mit for- and while- Schleifen. def ulam(x): print x if x % 2 == 0: return ulam(x / 2) else: return ulam(3 * x + ) %./ulam.py 5 6 8 4 2 4 2... Nicht bekannt, ob für belibige Startwerte terminiert G. Zachmann Informatik - WS 05/06 Rekursion 20

Eine zweifelhafte rekursive Funktion Hier: es gibt einen "Anti-Reduktions-Schritt" konvergiert die Folge der Parameter immer zum Basis-Fall?? def ulam(x): if x <= : return else if x % 2 == 0: return ulam(x / 2) else: return ulam(3 * x + ) Anti-Reduktions-Schritt Später: in der Berechenbarkeitstheorie wird genauer untersucht, ob wir immer feststellen können, ob eine Funktion terminiert Halte-Problem G. Zachmann Informatik - WS 05/06 Rekursion 2