Recursie: De Torens van Hanoi

Slides:



Advertisements
Verwante presentaties
Presentatie Vlakke figuren Theorie Rekenvoorbeelden
Advertisements


Een vreemd verschijnsel
Instructie Programmeren Task 1 5JJ70. Task 1.1: Hello World •Klik naast de laatste accolade in de grijze kantlijn om een breakpoint neer te zetten, anders.
Spreekbeurt Animatiefilms
Programmeren met Alice
Staafdiagram Strookdiagram
BELANGRIJK: √ Om de presentatie correct weer te geven, gelieve enkel gebruik te maken van muisklikken aub.!! √ Op verschillende dia’s ziet u “klik hier”
Opwekken van een sinusvormige wisselspanning
Goethals Frederik Vakdidactiek 17 – Goethals Frederik
Recursie: De torens van Hanoi
Hoofdstuk 8: Recursie.
Instructie Programmeren Task 8 5JJ70. PAGE 2 Task 8: Double Linked List Het doel van deze opdracht is: Het opbouwen van een tweetal klassen, die samen.
Practica Computerlinguistiek Tekst en uitleg:
Datastructuren Analyse van Algoritmen en O
Tel de zwarte stippen!. Tel de zwarte stippen!
Instructie Programmeren Task 1 5JJ70. Task 1.1: Hello World Klik naast de laatste accolade in de grijze kantlijn om een breakpoint neer te zetten, anders.

Computervaardigheden Hoofdstuk 4 — Scripting (Let op: dit is enkel voor studenten Biologie.)
Hoofdstuk 6: Controle structuren
Les 2 Basisbouwstenen (deel 1)
Ontspan je even, het is nog vroeg…
Parallelle Algoritmen String matching. 1 Beter algoritme patroonanalyse Bottleneck in eenvoudig algoritme: WITNESS(j) (j = kandidaat in eerste i-blok)
Assenstelsels en het plotten van Functies in LOGO
Tekenen van een draaiende molen in LOGO
Tegengestelden / Synoniemen
Logo : Stapsgewijze verfijning Les Wouter Rogiers.
MSWLogo Kite (verder afwerken) If – functie Recursie Een gokspel.
LOGO Recursie - Vlieger 6/12/2004 Dieter Verslype.
KLIK NU MET JE MUISKNOP OP: -VOORSTELLING WEERGEVEN!
Hogeschool HZ Zeeland 19 augustus 2003augustus 2003 Data Structuren & Algoritmen Week 4.
2.1 Vergrotingsfactor Vergrotingsfactor cm : 40 cm = 787,5
Sorteeralgoritmen. Sorteren: aanpak 1 Hoe ga je een rij getallen sorteren met PC? Sorteren door selectie (= selection sort): Zoek de kleinste waarde Sorteer.
WEBBUILDING 07/03/2005 Saartje De Geyter.
Logo Stapsgewijze verfijning: tekenen van een huis. Uitbreiding naar meerdere huizen, variabele afmetingen, coördinaten en kleuren Opdracht voor het vak.
Vakdidactiek Informatica bij vragen: het gebruikte materiaal: Tijl De Backer.
Pen- & kleuropdrachten
Haiku-Generator Les 1 – 12/02/2003 Jan De Bock.
Inleiding tot recursie1 door Maarten Lemmens. Inleiding tot recursie2 Wat is recursie ?  Een procedure die zichzelf oproept.  Vb. in echte leven: Radio.
, 17h30Recursie 1 Inleiding tot recursie Karel Popelier.
Vakdidactiek 9/12/2002 Leen Depré
24/11/2003LOGO - recursie - vliegers1 Recursie: Vliegers in vliegers Dieter Beheydt 24/11/2003.
1 Syntax JavaLogo. 2 Hoofdstuk 1 Tekenen in Java.
Eindproject programmeren “Monster”
Algoritme Inhoud: Definitie algoritme Recursieve algoritmes Opgaven
Ladders Sport voor sport. Ladders Sport voor sport.
Animatie nAnimatie: “tekenfilm” programma toont automatisch veranderende beelden nGemakkelijk te programmeren met gebruik van de klasse Thread “draadje”
LOGO Vincent Naessens
Torens van Hanoi ● Uitgevonden door Franse Wiskundige Edouard Lucas in ● Beschreven in zijn wiskundig “spelletjesboek” Récréations Mathématiques.
Steve Dewanckele Recursie Steve Dewanckele
Assenstelsel tekenen.
De O-notatie Algemene lijn: Broncode analyseren Herhalingsfrequentie bepalen O-notatie afleiden.
Welkom! maandag 16 November 2015 Les B-2.
Woordjes leren.
How to use a Imac.
Recursie in de wiskunde
# Datum : Teamfunctie : Aanvallen Doelstelling technisch
DE 10 PROVINCIES VAN BELGIE
KLIK VOOR ELK VOLGEND SCHERM !!!!!!!!!
Kiezen met Kaarten.
Uitleg Toverdoos 2007 via deze presentatie, D. van Hunnik
volgende bladzijde terug
Hoe maak ik een goede mindmap?
Kiezen met Kaarten.
DE 10 PROVINCIES VAN BELGIE
Kiezen met Kaarten.
Leren programmeren met Scratch
DE 10 PROVINCIES VAN BELGIE
Software Development fundamentals
DE 10 PROVINCIES VAN BELGIE
Transcript van de presentatie:

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 IF (persoon = Abrahams’ vrouw) [PRINT ( SE :persoon is joods) STOP] isJood :moeder_van_persoon end Pseudocode !

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

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

De Torens van Hanoi (historiek) 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

(2) Geen grotere schijf boven een kleinere 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

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

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

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?

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

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

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

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.

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

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

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

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

Verplaats 4 schijven BD 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

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

Hanoi algoritme to hanoitext :aantal :bron :doel :hulp ;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 Om een zin te printen : print (SE “woord :variabele) 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

Gevaar bij elk recursief algoritme 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Tekenen van een schijf Idem aan het verwijderen van een schijf

tekent de schijf in het zwart 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

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)

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 stopconditie verplaats deeltoren verplaats onderste schijf verplaats deeltoren Waarom juist hier?

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

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