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

Ähnliche Dokumente
UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 5. Asymptotische Laufzeitkomplexität Definition Regeln Beispiele

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 3

Datenstrukturen und Algorithmen

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

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

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 5. Asymptotische Laufzeitkomplexität Definition Regeln Beispiele

Programmieren 1 C Überblick

1.4 Die Ackermannfunktion

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 9. Sortieren

Technische Informatik I Übung 3: Assembler

Tutoraufgabe 1 (Sortieren): Lösung: Datenstrukturen und Algorithmen SS14 Lösung - Übung 4

Elementare Konzepte von

8 Anwendung: Suchen. Folge a ganzer Zahlen; Element x. Wo kommt x in a vor?

7. Einführung in C++ Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

Einführung in die Informatik I

1. Die rekursive Datenstruktur Liste

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

Übung Algorithmen und Datenstrukturen

Technische Informatik 1 Übung 2 Assembler (Rechenübung) Georgia Giannopoulou (ggeorgia@tik.ee.ethz.ch) 22./23. Oktober 2015

Algorithmen & Programmierung. Rekursive Funktionen (1)

Übung Algorithmen und Datenstrukturen

Rekursive Funktionen (1)

Informatik II Übung 4 Gruppe 7

Rekursive Funktionen (1)

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

Institut für Programmierung und Reaktive Systeme 25. Januar Programmieren I. Übungsklausur

Informatik II Übung, Woche 14

Institut für Programmierung und Reaktive Systeme 2. Februar Programmieren I. Übungsklausur

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

Stack. Seniorenseminar Michael Pohlig

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 10. Exhaustion / Wiederholung Beispiele Klausurvorbereitung

Informatik II Übung 4 Gruppe 7

Datenstrukturen. Mariano Zelke. Sommersemester 2012

Algorithmen und Datenstrukturen 04

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

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

Herzlich willkommen!

99 - Struktogramme - 2. Sequenz I

Schnittstellen, Stack und Queue

Wiederholung Wozu Methoden? Methoden Schreiben Methoden Benutzen Rekursion?! Methoden. Javakurs 2012, 3. Vorlesung

Kapitel 5: Dynamisches Programmieren Gliederung

Vorkurs Informatik WiSe 17/18

Informatik I: Einführung in die Programmierung

Theoretische Informatik SS 03 Übung 5

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

Software Entwicklung 1

Algorithmen und Datenstrukturen

1. Die rekursive Datenstruktur Liste

II.3.1 Rekursive Algorithmen - 1 -

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Definition Algorithmus. Wie beschreibt man Algorithmen?

Informatik I (D-ITET)

Kapitel 5: Abstrakte Algorithmen und Sprachkonzepte. Elementare Schritte

Algorithmen und Datenstrukturen (für ET/IT)

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

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

Heapsort. 1. Erstelle aus dem gegebenen Array einen Max-Heap (DownHeap) 2. Tausche erstes und letztes Element des Arrays

Informatik für Schüler, Foliensatz 18 Rekursion

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

Einführung in die Programmierung Wintersemester 2017/18

Einführung in die Programmierung Wintersemester 2010/11

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

Übung zu Einführung in die Informatik # 11

Algorithmen und Datenstrukturen 1. EINLEITUNG. Algorithmen und Datenstrukturen - Ma5hias Thimm 1

Girls Day 2017 Programmierung

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

Programmieren I. Methoden-Special Heusch --- Ratz 6.1, Institut für Angewandte Informatik

Lösungsvorschlag Serie 2 Rekursion

1 Abstrakte Datentypen

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

PK-Einstufungstest. 1. Allgemeine Multiple-Choice-Aufgaben

Vorkurs Informatik WiSe 16/17

PK-Einstufungstest. 1. Allgemeine Multiple-Choice-Aufgaben. Aufgabe 1.1. Alle Aufgaben beziehen sich auf Java.

3AA. Prozeduren und Rekursion Prof. Dr. Wolfgang P. Kowalk Universität Oldenburg WS 2005/2006

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

Vorlesung Programmieren

Technische Universität München WiSe 2018/19 Fakultät für Informatik Übungsblatt 6 Dr. Ch. Herzog 26. November 2018

4 Rekursionen. 4.1 Erstes Beispiel

Brückenkurs Programmieren

Fakultät IV Elektrotechnik/Informatik

Stack. Queue. pop() liefert zuletzt auf den Stack gelegtes Element und löscht es push( X ) legt ein Element X auf den Stack

Übung Algorithmen und Datenstrukturen

Computersysteme. Stacks Anwendung in der Assembler-Programmierung

WS2018/ Oktober 2018

Counting - Sort [ [ ] [ [ ] 1. SS 2008 Datenstrukturen und Algorithmen Sortieren in linearer Zeit

Klausur Kompaktkurs Einführung in die Programmierung Dr. T. Weinzierl & M. Sedlacek 25. März 2011

Übersicht. Datenstrukturen und Algorithmen. Übersicht. Heaps. Vorlesung 8: Heapsort (K6) Joost-Pieter Katoen. 7. Mai 2015

PK-Einstufungstest. 1. Allgemeine Multiple-Choice-Aufgaben. Alle Aufgaben beziehen sich auf Java.

Programmierung für Mathematik (HS13)

C++ - Kontrollstrukturen Teil 2

4.4 Imperative Algorithmen Prozeduren

To know recursion, you must first know recursion. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel 17 1

Programmieren I. Methoden-Spezial Heusch --- Ratz 6.1, Institut für Angewandte Informatik

Transkript:

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1 Übung 7 Entrekursivierung Institut für Pervasive Computing Johannes Kepler Universität Linz Altenberger Straße 69, A-4040 Linz

Rekursive Algorithmen Vorteile Elegant Prägnant Kurz Nachteile (Schwerer nachvollziehbar) Schlechtere Effizienz Laufzeit Speicherbedarf In der Praxis oft nicht vertretbar Konsequenz: Rekursionen vermeiden oder beseitigen < 2 >

Entrekursivierung ::Vorgehensweise Rekursives Programm 1. Vorbereitung nur ein rekursiver Aufruf pro Zeile direkte Return-Anweisungen beseitigen 2. Automatenstruktur Schritte getrennt durch rekursive Aufrufe Schleife einbauen 3. Entrekursivieren noch mit Textanweisungen vollständiges entrekursiviertes Programm < 3 >

Entrekursivierung :: Beispiel Schritt 1 Folgender Algorithmus soll entrekursiviert werden: int W( int m int n) { if (m == 1 n == 1) { return m + n return W( m-1 n) + W( m n-1) < 4 >

Entrekursivierung :: Beispiel Schritt 2.1 1. Nur ein rekursiver Aufruf pro Zeile return m + n return W( m-1 n) + W( m n-1) return m + n w1 = W( m-1 n) w2 = W( m n-1) return w1 + w2 < 6 >

Entrekursivierung :: Beispiel Schritt 2.2 2. Direkte Return- Anweisung beseitigen return m + n w1 = W( m-1 n) w2 = W( m n-1) return w1 + w2 else { w1 = W( m-1 n) w2 = W( m n-1) < 7 >

Entrekursivierung :: Beispiel Schritt 3.1 Automatenstruktur: else { 1 W( m-1 n) w1= W( m n-1) 2 w2= 3 < 8 >

Entrekursivierung :: Beispiel Schritt 3.2 Automatenstruktur + Loop: int state = 1 while (state!=0) { switch(state) { case 1: state = 0 else { result = W( m-1 n) state = 2 Ist noch rekursiv! case 2: w1 = result result = W( m n-1) state = 3 case 3: w2 = result state = 0 // switch // while < 9 >

Entrekursivierung :: Beispiel Schritt 4.1 Entrekursiviert (noch textuell): int state = 1 while (state!= 0) { switch(state) { case 1: else { case 2: w1 = result case 3: w2 = result // switch // while < 10 >

Entrekursivierung :: Beispiel Schritt 4.1 Entrekursiviert (noch textuell): int state = 1 Kellerspeicher einrichten while (state!= 0) { switch(state) { case 1: else { case 2: w1 = result case 3: w2 = result // switch // while < 11 >

Entrekursivierung :: Beispiel Schritt 4.1 Entrekursiviert (noch textuell): int state = 1 Kellerspeicher einrichten while (state!= 0) { switch(state) { case 1: Abbruchbedingung erreicht -> Ende else { case 2: w1 = result case 3: w2 = result // switch // while < 12 >

Entrekursivierung :: Beispiel Schritt 4.1 Entrekursiviert (noch textuell): int state = 1 Kellerspeicher einrichten while (state!= 0) { switch(state) { case 1: Abbruchbedingung erreicht -> Ende else { relevante Variablen und nächsten Zustand einkellern Parameter einstellen state = 1 -> zum Start case 2: w1 = result case 3: w2 = result // switch // while < 13 >

Entrekursivierung :: Beispiel Schritt 4.1 Entrekursiviert (noch textuell): int state = 1 Kellerspeicher einrichten while (state!= 0) { switch(state) { case 1: Abbruchbedingung erreicht -> Ende else { relevante Variablen und nächsten Zustand einkellern Parameter einstellen state = 1 -> zum Start case 2: rel. Var. auskellern w1 = result rel. Var. und nächsten Zustand einkellern Parameter einstellen state = 1 -> gehe zum Start case 3: w2 = result // switch // while < 14 >

Entrekursivierung :: Beispiel Schritt 4.1 Entrekursiviert (noch textuell): int state = 1 Kellerspeicher einrichten while (state!= 0) { switch(state) { case 1: Abbruchbedingung erreicht -> Ende else { relevante Variablen und nächsten Zustand einkellern Parameter einstellen state = 1 -> zum Start case 2: rel. Var. auskellern w1 = result rel. Var. und nächsten Zustand einkellern Parameter einstellen state = 1 -> gehe zum Start case 3: rel. Var. auskellern w2 = result state = 0 -> Ende // switch // while < 15 >

Entrekursivierung :: Beispiel Schritt 4.1 Entrekursiviert (noch textuell): int state = 1 Kellerspeicher einrichten while (state!= 0) { switch(state) { case 1: Abbruchbedingung erreicht -> Ende else { relevante Variablen und nächsten Zustand einkellern Parameter einstellen state = 1 -> zum Start case 2: rel. Var. auskellern w1 = result rel. Var. und nächsten Zustand einkellern Parameter einstellen state = 1 -> gehe zum Start case 3: rel. Var. auskellern w2 = result state = 0 -> Ende // switch if (state ==0 && Keller nicht leer){ Folgezustand nach Rekursion auskellern // while < 16 >

Entrekursivierung :: Beispiel Schritt 4.2 Entrekursiviert (vollständiger Algorithmus): int state = 1 initstack() while (state!= 0) { switch(state) { case 1: state = 0 else { push( m); push( n) push( 2) m = m-1 state = 1 case 2: pop( n); pop( m) w1 = result push( w1) push( 3) n = n-1 state = 1 case 3: pop( w1) w2 = result state = 0 // switch if ((state == 0 &&!emptystack()) pop( state) // while < 17 >

Entrekursivierung :: Schreibtischtest State m n w1 w2 result Stack < 18 >

Entrekursivierung :: Schreibtischtest int state = 1 initstack() while (state!= 0) { switch(state) { case 1: state = 0 else { push( m); push( n) push( 2) m = m-1 state = 1 case 2: pop( n); pop( m) w1 = result push( w1) push( 3) n = n-1 state = 1 case 3: pop( w1) w2 = result state = 0 // switch if ((state == 0 &&!emptystack()) pop( state) // while < 19 >

Entrekursivierung :: Schreibtischtest State m n w1 w2 result Stack 1 2 3 < 20 >

Entrekursivierung :: Schreibtischtest int state = 1 initstack() while (state!= 0) { switch(state) { case 1: state = 0 else { push( m); push( n) push( 2) m = m-1 state = 1 case 2: pop( n); pop( m) w1 = result push( w1) push( 3) n = n-1 state = 1 case 3: pop( w1) w2 = result state = 0 // switch if ((state == 0 &&!emptystack()) pop( state) // while < 21 >

Entrekursivierung :: Schreibtischtest State m n w1 w2 result Stack 1 2 3 1 1 3 2,3,2 < 22 >

Entrekursivierung :: Schreibtischtest int state = 1 initstack() while (state!= 0) { switch(state) { case 1: state = 0 else { push( m); push( n) push( 2) m = m-1 state = 1 case 2: pop( n); pop( m) w1 = result push( w1) push( 3) n = n-1 state = 1 case 3: pop( w1) w2 = result state = 0 // switch if ((state == 0 &&!emptystack()) pop( state) // while < 23 >

Entrekursivierung :: Schreibtischtest State m n w1 w2 result Stack 1 2 3 1 1 3 2,3,2 0 1 3 4 2,3,2 < 24 >

Entrekursivierung :: Schreibtischtest int state = 1 initstack() while (state!= 0) { switch(state) { case 1: state = 0 else { push( m); push( n) push( 2) m = m-1 state = 1 case 2: pop( n); pop( m) w1 = result push( w1) push( 3) n = n-1 state = 1 case 3: pop( w1) w2 = result state = 0 // switch if ((state == 0 &&!emptystack()) pop( state) // while < 25 >

Entrekursivierung :: Schreibtischtest State m n w1 w2 result Stack 1 2 3 1 1 3 2,3,2 0 1 3 4 2,3,2 2 1 3 4 2,3 1 2 2 4 4 4,3 1 1 2 4 4 4,3,2,2,2 0 1 2 4 3 4,3,2,2,2 2 1 2 4 3 4,3,2,2 1 2 1 3 3 4,3,3,3 0 2 1 3 3 4,3,3,3 3 2 1 3 3 4,3,3 0 2 1 3 3 6 4,3 3 2 1 3 3 6 4 0 2 1 4 6 10 < 26 >

Entrekursivierung :: Schreibtischtest int state = 1 initstack() while (state!= 0) { switch(state) { case 1: state = 0 else { push( m); push( n) push( 2) m = m-1 state = 1 case 2: pop( n); pop( m) w1 = result push( w1) push( 3) n = n-1 state = 1 case 3: pop( w1) w2 = result state = 0 // switch if ((state == 0 &&!emptystack()) pop( state) // while < 27 >

Entrekursivierung :: Schreibtischtest State m n w1 w2 result Stack 1 2 3 1 1 3 2,3,2 0 1 3 4 2,3,2 2 1 3 4 2,3 1 2 2 4 4 4,3 1 1 2 4 4 4,3,2,2,2 0 1 2 4 3 4,3,2,2,2 2 1 2 4 3 4,3,2,2 1 2 1 3 3 4,3,3,3 0 2 1 3 3 4,3,3,3 3 2 1 3 3 4,3,3 0 2 1 3 3 6 4,3 3 2 1 3 3 6 4 0 2 1 4 6 10 < 28 >

Entrekursivierung :: Zusammenfassung Rekursives Programm 1. Vorbereitung nur ein rekursiver Aufruf pro Zeile direkte Return-Anweisungen beseitigen 2. Automatenstruktur Schritte getrennt durch rekursive Aufrufe Schleife einbauen 3. Entrekursivieren noch mit Textanweisungen vollständiges entrekursiviertes Programm < 29 >