Click here to load reader

Problemlösen mit Rekursion Klaus Becker 2009. 2 Problemlösen mit Rekursion Inhalte: Problemlösen durch Problemreduktion Selbstähnliche Figuren Rekursive

  • View
    146

  • Download
    1

Embed Size (px)

Text of Problemlösen mit Rekursion Klaus Becker 2009. 2 Problemlösen mit Rekursion Inhalte:...

  • Folie 1
  • Problemlsen mit Rekursion Klaus Becker 2009
  • Folie 2
  • 2 Problemlsen mit Rekursion Inhalte: Problemlsen durch Problemreduktion Selbsthnliche Figuren Rekursive Verarbeitung von Listen Rekursive Verarbeitung natrlicher Zahlen Rekursion und Berechnungsaufwand Rekursion und Iteration
  • Folie 3
  • 3 Teil 1 Problemlsen durch Problemreduktion
  • Folie 4
  • 4 Einstieg - Trme von Hanoi Einer Geschichte zufolge soll im Tempel zu Benares - das ist eine "heilige Stadt" in Indien - ein Turm aus 64 goldenen, der Gre nach geordneten Scheiben stehen. Die Mnche des Tempels erhalten die Aufgabe, die Scheiben an einen anderen Ort zu bringen. Dabei mssen sie einige Regeln beachten: Es darf immer nur eine Scheibe transportiert werden. Scheiben knnen auf einem (einzigen) Hilfsstapel zwischenzeitlich abgelegt werden. Auch auf dem (teilweise abgebauten) Ausgangsturm knnen Scheiben zwischenzeitlich abgelegt werden. Es darf aber nie eine grere Scheibe auf eine kleinere gelegt werden. Wenn der neue Turm fertig ist, dann ist das Ende der Zeit erreicht.
  • Folie 5
  • 5 Einstieg - Aufgabe (siehe 9.1.1) Ausgangszustand Versuchen Sie, einen Turm mit 5 Scheiben nach den vorgegebenen Regeln umzustapeln. Wenn das nicht klappt, dann versuchen Sie erst einmal, Trme mit 3 bzw. 4 Scheiben umzustapeln. Zielzustand Benutzen Sie Mnzen unterschiedlicher Gre oder ein Simulationsprogramm. z. B.: http://www.mpg-trier.de/d7/prog/hanoi/hanoi.htm
  • Folie 6
  • 6 Einstieg - Aufgabe (siehe 9.1.1) Ausgangszustand berlegen Sie sich auch eine Strategie, mit der man Trme mit 6, 7,... Scheiben umstapeln kann. Zielzustand
  • Folie 7
  • 7 Lsungsidee transportiere einen 4-Scheiben-Turm von A ber C nach B transportiere eine Scheibe von A nach C transportiere einen 4-Scheiben-Turm von B ber A nach C Ausgangszustand Zielzustand Zwischenzustand transportiere einen 5-Scheiben-Turm von A ber B nach C
  • Folie 8
  • 8 Verallgemeinerung transportiere einen (n-1)-Scheiben-Turm von X ber Z nach Y transportiere eine Scheibe von X nach Z transportiere einen (n-1)-Scheiben-Turm von Y ber X nach Z Ausgangszustand Zielzustand Zwischenzustand transportiere einen n-Scheiben-Turm von X ber Y nach Z
  • Folie 9
  • 9 Algorithmus: transportiere einen n-Scheiben-Turm von X ber Y nach Z wenn n > 1: transportiere einen (n-1)-Scheiben-Turm von X ber Z nach Y transportiere eine Scheibe von X nach Z transportiere einen (n-1)-Scheiben-Turm von Y ber X nach Z sonst: transportiere eine Scheibe von X nach Z Algorithmus
  • Folie 10
  • 10 Rekursive Problemreduktion Rekursive Problemreduktion ist eine Problemlsestrategie, bei der ein Problem auf ein strukturgleiches Problem (in verkleinerter Form) zurckgefhrt wird. Ein rekursiver Algorithmus ruft sich (eventuell ber Umwege) selbst auf und nutzt sich so selbst zur Beschreibung der Lsung des gegebenen Problems. Algorithmus: transportiere einen n-Scheiben-Turm von X ber Y nach Z wenn n > 1: transportiere einen (n-1)-Scheiben-Turm von X ber Z nach Y transportiere eine Scheibe von X nach Z transportiere einen (n-1)-Scheiben-Turm von Y ber X nach Z sonst: transportiere eine Scheibe von X nach Z Um Rekursion als Problemlsestrategie nutzen zu knnen, bentigt man ein Ausfhrsystem, das in der Lage ist, rekursive Algorithmen wiederholt aufzurufen und auf diese Weise die eigentliche Lsung zu generieren.
  • Folie 11
  • 11 Algorithmus: transportiere einen n-Scheiben-Turm von X ber Y nach Z wenn n > 1: transportiere einen (n-1)-Scheiben-Turm von X ber Z nach Y transportiere eine Scheibe von X nach Z transportiere einen (n-1)-Scheiben-Turm von Y ber X nach Z sonst: transportiere eine Scheibe von X nach Z Ausfhrung des Algorithmus transportiere einen 3-Scheiben-Turm von A ber B nach C: transportiere einen 2-Scheiben-Turm von A ber C nach B transportiere eine Scheibe von A nach C transportiere einen 2-Scheiben-Turm von B ber A nach C Ausfhrungstiefe: 1
  • Folie 12
  • 12 Algorithmus: transportiere einen n-Scheiben-Turm von X ber Y nach Z wenn n > 1: transportiere einen (n-1)-Scheiben-Turm von X ber Z nach Y transportiere eine Scheibe von X nach Z transportiere einen (n-1)-Scheiben-Turm von Y ber X nach Z sonst: transportiere eine Scheibe von X nach Z Ausfhrung des Algorithmus transportiere einen 3-Scheiben-Turm von A ber B nach C: transportiere einen 2-Scheiben-Turm von A ber C nach B: transportiere einen 1-Scheiben-Turm von A ber B nach C transportiere eine Scheibe von A nach B transportiere einen 1-Scheiben-Turm von C ber A nach B transportiere eine Scheibe von A nach C transportiere einen 2-Scheiben-Turm von B ber A nach C: transportiere einen 1-Scheiben-Turm von B ber C nach A transportiere eine Scheibe von B nach C transportiere einen 1-Scheiben-Turm von A ber B nach C Ausfhrungstiefe: 2
  • Folie 13
  • 13 Algorithmus: transportiere einen n-Scheiben-Turm von X ber Y nach Z wenn n > 1: transportiere einen (n-1)-Scheiben-Turm von X ber Z nach Y transportiere eine Scheibe von X nach Z transportiere einen (n-1)-Scheiben-Turm von Y ber X nach Z sonst: transportiere eine Scheibe von X nach Z Ausfhrung des Algorithmus transportiere einen 3-Scheiben-Turm von A ber B nach C: transportiere einen 2-Scheiben-Turm von A ber C nach B: transportiere einen 1-Scheiben-Turm von A ber B nach C: transportiere eine Scheibe von A nach C transportiere eine Scheibe von A nach B transportiere einen 1-Scheiben-Turm von C ber A nach B: transportiere eine Scheibe von C nach B transportiere eine Scheibe von A nach C transportiere einen 2-Scheiben-Turm von B ber A nach C: transportiere einen 1-Scheiben-Turm von B ber C nach A: transportiere eine Scheibe von B nach A transportiere eine Scheibe von B nach C transportiere einen 1-Scheiben-Turm von A ber B nach C: transportiere eine Scheibe von A nach C Ausfhrungstiefe: 3
  • Folie 14
  • 14 Ausfhrung des Algorithmus transportiere einen 3-Scheiben-Turm von A ber B nach C: transportiere einen 2-Scheiben-Turm von A ber C nach B: transportiere einen 1-Scheiben-Turm von A ber B nach C: transportiere eine Scheibe von A nach C transportiere eine Scheibe von A nach B transportiere einen 1-Scheiben-Turm von C ber A nach B: transportiere eine Scheibe von C nach B transportiere eine Scheibe von A nach C transportiere einen 2-Scheiben-Turm von B ber A nach C: transportiere einen 1-Scheiben-Turm von B ber C nach A: transportiere eine Scheibe von B nach A transportiere eine Scheibe von B nach C transportiere einen 1-Scheiben-Turm von A ber B nach C: transportiere eine Scheibe von A nach C Basisaktionen
  • Folie 15 1: transportiere einen (n-1)-Scheiben-Turm von X ber Z nach Y transportiere eine Scheibe von X nach Z transportiere einen (n-1)-Scheiben-Turm von Y ber X nach Z sonst: transportiere eine Scheibe von X nach Z Algorithmus Python-Programm"> 1: transportiereTurm(n-1, x, z, y) print "transportiere eine Scheibe von ", x, ">
  • 15 Implementierung in Python def transportiereTurm(n, x, y, z): if n > 1: transportiereTurm(n-1, x, z, y) print "transportiere eine Scheibe von ", x, " nach ", z transportiereTurm(n-1, y, x, z) else: print "transportiere eine Scheibe von ", x, " nach ", z Algorithmus: transportiere einen n-Scheiben-Turm von X ber Y nach Z wenn n > 1: transportiere einen (n-1)-Scheiben-Turm von X ber Z nach Y transportiere eine Scheibe von X nach Z transportiere einen (n-1)-Scheiben-Turm von Y ber X nach Z sonst: transportiere eine Scheibe von X nach Z Algorithmus Python-Programm
  • Folie 16
  • 16 bungen (siehe 9.1.4) Bearbeiten Sie die Aufgaben 1, 2.
  • Folie 17
  • 17 Teil 2 Selbsthnliche Figuren
  • Folie 18
  • 18 Einstieg - Selbsthnliche Figur Eine Figur ist selbsthnlich, wenn sie sich in Teile zerlegen lsst, die zur ihr hnlich sind.
  • Folie 19
  • 19 Einstieg - Selbsthnliche Figur Eine Figur ist selbsthnlich, wenn sie sich in Teile zerlegen lsst, die zur ihr hnlich sind. zeichne_Baum(200): gehe_vorwaerts(200) drehe_dich_nach_rechts(45) zeichne_Baum(100) drehe_dich_nach_links(90) zeichne_Baum(100) drehe_dich_nach_rechts(45) gehe_rueckwaerts(200) ALG zeichne_Baum(x): wenn x >-> 2: gehe_vorwaerts(x) drehe_dich_nach_rechts(45) zeichne_Baum(x/2) drehe_dich_nach_links(90) zeichne_Baum(x/2) drehe_dich_nach_rechts(45) gehe_rueckwaerts(x) rekursive Problemreduktion rekursiver Algorithmus
  • Folie 20
  • 20 Exkurs - Turtle-Grafik Turtle-Grafik basiert auf der Vorstellung, dass eine Schildkrte mit bestimmten Anweisungen auf einer Zeichenflche bewegt wird und dass die Schildkrte dabei eine Spur hinterlsst. zeichne_Quadrat(laenge): wiederhole 4 mal: gehe_vorwaerts(laenge) drehe_dich_nach_links(90) stift_hoch stift_runter gehe_vorwaerts(betrag) gehe_rueckwaerts(betrag) drehe_dich_nach_links(winkel) drehe_dich_nach_rechts(winkel) gehe_zu_punkt(punkt)... Turtle-Algorithmus Turtle-Befehle vorwaerts(100)
  • Folie 21
  • 21 Exkurs - Turtle-Grafik in Python Turtle-Grafik basiert auf der Vorstellung, dass eine Schildkrte mit bestimmten Anweisungen auf einer Zeichenflche bewegt wird und dass die Schildkrte dabei eine Spur hinterlsst. zeichne_Quadrat(laenge): wiederhole 4 mal: gehe_vorwaerts(laenge) drehe_dich_nach_links(90) stift_hoch stift_runter gehe_vorwaerts(betrag) gehe_rueckwaerts(betrag) drehe_dich_nach_links(winkel) drehe_dich_nach_rechts(winkel) gehe_zu_punkt(punkt)... Turtle-Programm Turtle-Klasse # -*- coding: iso-8859-1 -*- from turtle import * # Deklaration einer Zeichenprozedur def quadrat(laenge): for i in range(4): t.