1 / 43

Recursie: De Torens van Hanoi

Recursie: De Torens van Hanoi. David Joseph Koen Mahieu. Recursie?. Een recursieve procedure roept zichzelf telkens op om zijn resultaat te bekomen vb. Iemand is een Jood zijn of haar moeder een Jood is zij de vrouw is van Abraham to isJood:persoon

latoya
Download Presentation

Recursie: De Torens van Hanoi

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Recursie: De Torens van Hanoi David Joseph Koen Mahieu

  2. Recursie? • Een recursieve procedure roept zichzelf telkens op om zijn resultaat te bekomen • vb. Iemand is een Jood zijn of haar moeder een Jood is zij de vrouw is van Abraham to isJood:persoon IF (persoon = Abrahams’ vrouw) [PRINT ( SE :persoon is joods) STOP] isJood :moeder_van_persoon end Pseudocode !

  3. Recursie • bepaalde recursieve eigenschap van het probleem maakt probleem plots veel simpeler • moeilijkste taak: deze eigenschap ontdekken • oplossingsprocedure (argument n) keert terug roept op oplossingsprocedure (argument n - 1) keert terug roept op oplossingsprocedure (argument n - 2) keert terug …. stopconditie

  4. Uitgevonden door een Franse wiskundige, Edouard Lucas en als spel op de markt gebracht in 1883 De Torens van Hanoi(historiek) Speldoos : “ De Toren van Hanoi”

  5. Inspiratie door een mythe over een hindoetempel met een koepel op 3 diamanten zuilen Op 1 zuil : 64 gouden schijven van steeds kleinere diameter Schijven verplaatsen volgens bepaalde regels De Torens van Hanoi (historiek)

  6. Hanoi Spel verplaats alle schijven van 1ste zuil naar de 2de met behulp van de 3de Regels (1) Slecht 1 schijf per keer verplaatsen (2) Geen grotere schijf boven een kleinere

  7. Hanoi Test • Probeer zelf het probleem op te lossen met 4 à 5 schijven. • http://www.hallofscience.nl/old/kidscorner/nl/cool/Towers/Tower.htm

  8. Recursieve eigenschap van Hanoi ? • Oplossing : • stap voor stap: http://chemeng.p.lodz.pl/zylla/games/hanoi6e.html • automatisch: http://schoolweb.gemeenschapsonderwijs.be/bs/kruibeke/reyn/spel/Hanoi/Hanoi.html

  9. Recursieve eigenschap van Hanoi ? • Welke van deze 4 schijven is de belangrijkste om eerst op de doel staaf te verplaatsen ? (vergeet even de regels) doel hulp bron Hoe kunnen we dit bereiken?

  10. Recursieve stap • Stap 1 : bovenste schijven naar de hulp staaf verplaatsen doel hulp bron

  11. Recursieve stap • Stap 2 : grootste schijf naar de “doel” staaf verplaatsen doel hulp bron

  12. Recursieve stap • Stap 3 : bovenste 3 schijven er terug op plaatsen doel hulp bron

  13. Recursieve stappen • Welke problemen blijven nog over? Stap 1 Het verplaatsen van de bovenste 3 schijven van de bron staaf naar de hulp staaf. Stap 3 Het verplaatsen van deze 3 schijven van de hulp naar de doel staaf.

  14. Recursieve stappen Stap 1 Het verplaatsen van de bovenste 3 schijven van de bron staaf naar de hulp staaf. doel hulp bron

  15. Recursieve stappen Stap 1 Het verplaatsen van de bovenste 3 schijven van de bron staaf naar de hulp staaf. doel hulp bron

  16. Recursieve stappen Stap 3 Het verplaatsen van deze 3 schijven van de hulp naar de doel staaf. doel hulp bron

  17. Recursieve stappen Stap 3 Het verplaatsen van deze 3 schijven van de hulp naar de doel staaf. doel hulp bron

  18. Recursieve stap • Probleem van het verplaatsen van een toren van 4 schijven gereduceerd tot het verplaatsen van 3 schijven  RECURSIVITEIT Verplaats 4 schijven BD Verplaats bovenste 3 schijven BH Verplaats onderste schijf BD Verplaats bovenste 3 schijven HD Verplaats ond.schijf BH Verplaats ond.schijf HD Verplaats 2 schijven BD Verplaats 2 schijven DH Verplaats 2 schijven HB Verplaats 2 schijven BD Verplaats bovenste schijf HD Verplaats bovenste schijf DB Verplaats bovenste schijf BH Verplaats bovenste schijf HD Verplaats bovenste schijf DB Verplaats bovenste schijf BH Verplaats bovenste schijf BH Verplaats bovenste schijf HD Verplaats onderste schijf HB Verplaats onderste schijf BD Verplaats onderste schijf DH Verplaats onderste schijf BD

  19. Hanoi algoritme • Schrijf in logo een programma dat de volgende uitvoer geeft:

  20. Hanoi algoritme ;verplaats een :aantal schijven van :bron naar :doel m.b.v :hulp to hanoitext :aantal :bron :doel :hulp verplaatsen van (aantal - 1) schijven van bron naar hulp m.b.v doel verplaatsen van een onderste schijf van bron naar doel verplaatsen van (aantal - 1) schijven van hulp naar doel m.b.v bron end to hanoitext :aantal :bron :doel :hulp hanoitext (:aantal-1) :bron :hulp :doel print (SE "verplaats "schijf "van :bron "naar :doel) hanoitext (:aantal-1) :hulp :doel :bron end

  21. Hanoi: algoritme • Probleem? to hanoitext :aantal :bron :doel :hulp hanoitext (:aantal-1) :bron :hulp :doel print (SE "verplaats "schijf "van :bron "naar :doel) hanoitext (:aantal-1) :hulp :doel :bron end stopt niet ! Gevaar bij elk recursief algoritme

  22. Hanoi: algoritme • Stopconditie nodig stopconditie to hanoitext :aantal :bron :doel :hulp if (:aantal = 0)[STOP] hanoitext (:aantal-1) :bron :hulp :doel print (SE "verplaats "schijf "van :bron "naar :doel) hanoitext (:aantal-1) :hulp :doel :bron end

  23. Tekenen Hanoi met LOGO • Opgave : Maak een visuele voorstelling van de Torens van Hanoi. Demonstratie…

  24. Deelproblemen • Wat moeten we tekenen? • Staven + grondlijn • Schijven • Verplaatsen van een schijf • Daarna : + Hanoi algoritme

  25. Afmetingen van de staven 150 (0,0) 0 -300 -200 0 200 300 x,y 100 200

  26. Implementatie van staven to staven pu setxy -300 0 pd setxy 300 0 pu for [i -200 200 200] [ setxy :i 0 pd setxy :i 150 pu] end Teken van de grondlijn Teken van een staaf (3x)

  27. Tekenen van een schijf • Wat hebben we nodig? • Welke staaf? • Welke laag? • Welke grootte?

  28. Afmetingen van de schijf laag 3 laag 2 laag 1 10 9 laag 0 bitblock :grootte 9 ps: de grootte van de schijf wordt meegegeven

  29. Implementatie van schijf to schijf :staaf :laag :grootte pu if :staaf = 1 [setxy -200 0] if :staaf = 2 [setxy 0 0] if :staaf = 3 [setxy 200 0] sety ((:laag)*10) setx xcor - ((:grootte)/2) bitblock :grootte 9 end positionering aan de voet van de juiste staaf positionering op de juiste hoogte tekenen van de schijf in het midden van de staaf

  30. vb procedure schijf vb oproep: “schijf 3 5 80” 80 40 9 50 (200,0)

  31. Tekenen van de beginsituatie Teken een aantal meegegeven schijven op de eerste staaf. Wat gaan we gebruiken? Opmerking: grootte van de onderste schijf is “aantal” * 10. De volgende schijf is 10 kleiner enz… • procedure staven • procedure schijf

  32. Implementatie van beginfase to begin :aantal staven for [laag 0 (:aantal-1) 1] [ make "schijfgrootte ( (:aantal*10) - (:laag*10) ) schijf 1 :laag :schijfgrootte] end tekenen van de schijven

  33. Verplaatsen van een schijf • 3 deelproblemen • verwijderen van een schijf • teken van een schijf • opnieuw tekenen van de staven • wat hebben we nodig? • van • naar • grootte • laag ‘van’ en laag ‘naar’ Meegeven als attribuut Opslaan als variabele

  34. Aantal schijven op de staven We gaan het aantal schijven op de staven bijhouden dmv variabelen to begin :aantal staven for [laag 0 (:aantal-1) 1] [ make "schijfgrootte (:aantal*10-(:laag)*10) schijf 1 :laag :schijfgrootte] make "toren1laag :aantal make "toren2laag 0 make "toren3laag 0 end

  35. Implementatie van verplaats to verplaats :grootte :van :naar verwijder :grootte :van teken :grootte :naar staven end

  36. Verwijderen van een schijf Wat hebben we nodig? Overtekenen van de zwarte schijf met een witte schijf • staaf (gegeven) • grootte (gegeven) • laag van staaf

  37. Implementatie verwijder to verwijder :grootte :van setfc [255 255 255] if (:van = 1) [make "toren1laag (:toren1laag - 1) schijf :van :toren1laag :grootte] if (:van = 2) [make "toren2laag (:toren2laag - 1) schijf :van :toren2laag :grootte] if (:van = 3) [make "toren3laag (:toren3laag - 1) schijf :van :toren3laag :grootte] end Zet kleur op wit tekent de schijf over in het wit

  38. Tekenen van een schijf Idem aan het verwijderen van een schijf

  39. Implementatie teken to teken :grootte :naar setfc [0 0 0] if (:naar = 1) [ schijf :naar :toren1laag :grootte make "toren1laag (:toren1laag + 1)] if (:naar = 2) [ schijf :naar :toren2laag :grootte make "toren2laag (:toren2laag + 1)] if (:naar = 3) [ schijf :naar :toren3laag :grootte make "toren3laag (:toren3laag + 1)] end Zet kleur op zwart tekent de schijf in het zwart

  40. Maken van de animatie • Wat hebben we nodig? • beginsituatie tekenen • verplaatsen van toren (=stapel schijven) van staaf 1 naar staaf 2. Hoe? Algoritme van Hanoi • gebruik maken van recursie ! • gebruik maken van de procedure verplaats (1 schijf)

  41. Implementatie van hanoi to hanoi :aantal begin :aantal verplaats_toren :aantal 1 2 3 end to verplaats_toren :aantal :van :naar :hulp if(:aantal = 0) [STOP] verplaats_toren (:aantal-1) :van :hulp :naar wait 50 verplaats :aantal*10 :van :naar verplaats_toren (:aantal-1) :hulp :naar :van end stopconditie verplaats deeltoren verplaats onderste schijf verplaats deeltoren Waarom juist hier?

  42. Verklaring wait-probleem verplaats_toren 7 … verplaats_toren 6 … … verplaats_toren 1… verplaats_toren 0 … STOP verplaats (schijf) verplaats_toren 0 … STOP … … …

  43. Torens van Hanoi: mooiere versie Demonstratie torenhanoi :aantal :van :naar :andere Thuis eens proberen?

More Related