Torens van Hanoi ● Uitgevonden door Franse Wiskundige Edouard Lucas in 1883. ● Beschreven in zijn wiskundig “spelletjesboek” Récréations Mathématiques.

Slides:



Advertisements
Verwante presentaties
Sudoku puzzels: hoe los je ze op en hoe maak je ze?
Advertisements

Les 2 : MODULE 1 STARRE LICHAMEN
LRP PASTORALE EENHEID release 2.1 Koos Willemse.
Aflezen van analoge en digitale meetinstrumenten
Stijg- en zakleidingen
De wisselschakeling..
Staafdiagram Strookdiagram
Opwekken van een sinusvormige wisselspanning
Goethals Frederik Vakdidactiek 17 – Goethals Frederik
Recursie: De torens van Hanoi
Hoofdstuk 8: Recursie.
Practica Computerlinguistiek Tekst en uitleg:
HTML Les 1: Introductie HTML
uit: Wiskunde in beweging – Theo de Haan
1 Datastructuren Sorteren: alleen of niet alleen vergelijkingen College 5.
1 Datastructuren Zoekbomen II Invoegen en weglaten.
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
Recursie: De Torens van Hanoi
Tekenen van een draaiende molen in LOGO
Logo : Stapsgewijze verfijning Les Wouter Rogiers.
MSWLogo Kite (verder afwerken) If – functie Recursie Een gokspel.
LOGO Recursie - Vlieger 6/12/2004 Dieter Verslype.
Hogeschool HZ Zeeland 19 augustus 2003augustus 2003 Data Structuren & Algoritmen Week 3.
Werkverslag. Inhoudsopgave Pag.1 wat hebben we gedaan in deze lessen?
1 Datastructuren Een informele inleiding tot Skiplists Onderwerp 13.
Logo Stapsgewijze verfijning: tekenen van een huis. Uitbreiding naar meerdere huizen, variabele afmetingen, coördinaten en kleuren Opdracht voor het vak.
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.
PHP & MYSQL LES 02 PHP & FORMULIEREN. PHP & MYSQL 01 PHP BASICS 02 PHP & FORMULIEREN 03 PHP & DATABASES 04 CMS: BEST PRACTICE.
Algoritme Inhoud: Definitie algoritme Recursieve algoritmes Opgaven
Programmeren met If This Then That (IFTTT)
Ieder zijn leerstijl Voor we over leerstijl spreken moeten we duidelijk weten wat leren is. ‘Leren is het verwerven van nieuwe competenties’. Dit leren.
Ik doe mijn presentatie over…
Joep Lobée 31 oktober 2013 De 7 principes en mijn ervaring.
Instructie Programmeren Task 7
Steve Dewanckele Recursie Steve Dewanckele
hoe kun je krachten grafisch ontbinden?
Gecijferdheid 2 (Meten 1 – ME144X) week 3
WAT IS ER NIET BEHANDELD IN Van BIOS naar UEFI, een zegening of een vloek. WAT IS ER NIET BESPROKEN IN Hoe ziet er een harde schijf uit, de indeling. EN.
Welkom! maandag 16 November 2015 Les B-2.
Codetuts Academy Les 6 Module 2a Php Fundamentals 1.
Les 3 - Operators Workshop Php Basic. ICT Academy Php Basic Content Operators Wiskundig Toewijzing Vergelijking.
Codetuts Academy Les 2 Module 2a Php Fundamentals 1.
Woordjes leren.
C++ Les 1: introductie. Programmeren Programma’s scripts Websites libraries (Sound, GUI, netwerking…)
RoboCup Junior Bouwen van een robot voor de RCJr lessen Versie
Absolute aantallen en relatieve aantallen
Programmeren met Reeksen
Biolgie voor Jou. VMBO-BK.
Gameprogrammeren: Lists en interfaces
Havo-4 Les 1 Wie ben ik? Keuzebegeleiding.
Wij zijn FLEX Finn Megan Anouk Nina
Significante cijfers © Johan Driesse © 2013 – Johan Driesse.
KLIK VOOR ELK VOLGEND SCHERM !!!!!!!!!
Slim tellen.
3 vmbo-KGT Samenvatting Hoofdstuk 10
Rekenen in andere vakken
Small Basic Console deel 2
Tellen met kaarten.
Slim tellen.
Tellen met kaarten.
Leren programmeren met Scratch
Software Development fundamentals
Python – For loop + strings
Transcript van de presentatie:

Torens van Hanoi ● Uitgevonden door Franse Wiskundige Edouard Lucas in ● Beschreven in zijn wiskundig “spelletjesboek” Récréations Mathématiques ● De Legende: een Hindoe-tempel met priesters (de Brahmanen)

Torens van Hanoi ● Drie staven. Op één staaf zaten 64 gouden schijven van verschillende grootte, de grootste vanonder, de kleinste vanboven. ● Verplaatsen van de ene naar de andere. ● Eén schijf per stap verplaatsen ● Er mag nooit een grotere op een kleinere liggen ● De wereld komt tot een einde als het werk af is.

Torens van Hanoi ● Eén stap per seconde: jaar werk ● Ruwweg veertig maal zoveel de geschatte leeftijd van het heelal!

Torens van Hanoi ● Kleine versie: 8 schijven (verkocht als speelgoed) ● Programmeren: willekeurig aantal staven

Torens van Hanoi ● Hoe aanpakken???

Torens van Hanoi

● Hoe aanpakken??? ● We beginnen met kleinste schijf te verplaatsen

Torens van Hanoi

● Hoe aanpakken??? ● We beginnen met kleinste schijf te verplaatsen ● We nemen volgende schijf en zetten ze op een lege staaf. ● We zetten kleinste schijf erop, we hebben nu een klein torentje van twee schijven verplaatst.

Torens van Hanoi

● Hoe aanpakken??? ● We beginnen met kleinste schijf te verplaatsen ● We nemen volgende schijf en zetten ze op een lege staaf. ● We zetten kleinste schijf erop, we hebben nu een klein torentje van twee schijven verplaatst. ● We zetten de volgende schijf op de lege staaf.

Torens van Hanoi ???

Torens van Hanoi ● Hoe aanpakken??? ● We beginnen met kleinste schijf te verplaatsen ● We nemen volgende schijf en zetten ze op een lege staaf. ● We zetten kleinste schijf erop, we hebben nu een klein torentje van twee schijven verplaatst. ● We zetten de volgende schijf op de lege staaf. ● PROBLEEM: deze schijf moet ONDER het kleine torentje geraken.

Torens van Hanoi

● Hoe aanpakken??? ● We beginnen met kleinste schijf te verplaatsen ● We nemen volgende schijf en zetten ze op een lege staaf. ● We zetten kleinste schijf erop, we hebben nu een klein torentje van twee verplaatst. ● We zetten de volgende schijf op de lege staaf. ● PROBLEEM: deze schijf moet ONDER het kleine torentje geraken. ● OPLOSSING: we verplaatsen het kleine torentje nog eens op dezelfde manier, maar nu gebruiken we de “bronstaaf” als “hulpstaaf”.

Torens van Hanoi

● We hebben terug hetzelfde probleem: ● We hebben een toren van drie schijven gemaakt. ● Er moet een grotere schijf onder.

Torens van Hanoi ● Oplossing: we doen nóg eens alles opnieuw: we verplaatsen de driedelige toren bovenop de grotere schijf.

Torens van Hanoi

● Oplossing: we doen nóg eens alles opnieuw: we verplaatsen de driedelige toren bovenop de grotere schijf. ● We plaatsen eerst het tweedelige torentje op de lege staaf. Hiervoor gebruiken we de “doelstaaf” als hulpstaaf.

Torens van Hanoi

● Oplossing: we doen nóg eens alles opnieuw: we verplaatsen de driedelige toren bovenop de grotere schijf. ● We plaatsen eerst het tweedelige torentje op de lege staaf. Hiervoor gebruiken we de “doelstaaf” als hulpstaaf. ● We plaatsen de onderste schijf van de driedelige toren op de grotere staaf

Torens van Hanoi

● Oplossing: we doen nóg eens alles opnieuw: we verplaatsen de driedelige toren bovenop de grotere schijf. ● We plaatsen eerst het tweedelige torentje op de lege staaf. Hiervoor gebruiken we de “doelstaaf” als hulpstaaf. ● We plaatsen de onderste schijf van de driedelige toren op de grotere staaf. ● We verplaatsen het tweedelige torentje nóg eens, nu op de doelstaaf. De lege staaf kan nu als hulpstaaf gebruikt worden.

Torens van Hanoi

Om een toren van vier te verplaatsen hebben we tweemaal een toren van drie verplaatst. Om een toren van drie te verplaatsen moesten we telkens twee keer een toren van twee verplaatsen. VerplaatsToren 4 VerplaatsToren 3 X2 VerplaatsToren 2 X2

Torens van Hanoi Het probleem is een deelprobleem van zichzelf - -> recursie. VerplaatsToren :n VerplaatsToren :n-1 X2

Torens van Hanoi Als we weten hoe we een toren van hoogte n-1 moeten verplaatsen, hoe verplaatsen we dan een toren van hoogte n (n>1)? Beschrijf het algoritme om dit te doen.

Torens van Hanoi To VerplaatsToren :n VerplaatsToren :n-1 naar hulpstaaf Verplaats onderste schijf naar doelstaaf VerplaatsToren :n-1 van hulpstaaf naar doelstaaf end Het verplaatsen van een toren duurt dus ongeveer dubbel zo lang als het verplaatsen van een toren van één schijf minder! Vandaar dat de priesters zo lang werk hebben aan 64...

Hanoi in LOGO Probleem: we willen een grafische voorstelling maken van de toren van hanoi in LOGO. Schrijf een procedure to hanoi :n die een demonstratie geeft van hanoi voor een toren van n schijven. Verdeel eerst in deelproblemen!!!

Hanoi in LOGO ● We willen de staven en schijven op het scherm tekenen. (De beginsituatie) ● We willen een willekeurig aantal schijven kunnen verplaatsen. ● We willen één schijf kunnen verplaatsen. Hiervoor moeten we ze kunnen tekenen, maar ook uitwissen.

Hanoi in LOGO Hanoi Beginsituatie VerplaatsSchijven VerplaatsSchijf Staaf VoegtoeSchijf VerwijderSchijf

Opmerking Voor het practische gemak maken we gebruik van devolgende procedure die we reeds in een andere les hebben geprogrammeerd: to positie :x :y pu setxy :x :y pd end

Hanoi in LOGO 1) Maak een procedure To Staaf :staaf :aantalschijven :staaf is een waarde 1,2 of 3 (bepaalt de positie), :aantalschijven bepaalt de hoogte van de staaf.

Hanoi in LOGO

Hanoi in LOGO to staaf :staaf :aantalschijven setpc [ ] setfc [ ] positie 300*(:staaf-2) 0 repeat 2 [fd 20+:aantalschijven*20 rt 90 fd 30 rt 90] rt 10 fd 5 fill lt 10 end

Toevoegen van een Schijf ● To voegtoeSchijf :staaf :schijf ● :staaf: De procedure moet weten op welke staaf de schijf moet geplaatst worden! ● :schijf: De procedure moet weten welke schijf (=grootte) er moet geplaatst worden. 1 is de kleinste, 2 is groter, enz... ● De procedure moet nóg iets weten. WAT??? Toch kunnen we deze niet meegeven met een parameter. WAAROM???

Toevoegen van een Schijf ● Oplossing ● We moeten ook weten op welke positie de schijf moet getekend worden. ● We moeten dus weten hoe hoog de toren op de staaf al is, want de volgende schijf moet daar bovenop getekend worden. ● Als we een procedure schrijven om een schijf te verplaatsen, dan moet die werken op ieder moment, voor om het even welk aantal schijven op de staven zitten. ● We moeten de hoogtes van de torens dus bijhouden in variabelen.

Toevoegen van een Schijf ● Er zijn drie staven. We hebben dus drie variabelen nodig! ● Wanneer we een schijf bij een staaf “:staaf” toevoegen, moeten we drie IF-structuren schrijven om de juiste variabele op te vragen! ● Als we de waarde veranderen, moeten we weer drie if-structuren gebruiken! ● Er moet een betere manier zijn... Eén variabele: een “array”.

Toevoegen van een Schijf Make “staaf1 0 Make “staaf2 0 Make “staaf3 0 ;Bijvoorbeeld: er is een schijf toegevoegd if (:staaf=1) make “staaf1 :staaf1+1 if(:staaf=2) make “staaf2 :staaf2+1 if (:staaf=3) make “staaf3 : staaf3+1

Arrays in LOGO ● Een array ● Is één variabele die verschillende items bevat. Iedere item heeft een waarde. ● De items staan in een bepaalde volgorde. Het is dus een rij van waarden. ● De positie van iedere item in die rij noemen we de index.

Arrays in LOGO index items In LOGO heeft de eerste item van de array standaard index 1.

Arrays in LOGO ● Notatie ● Zo maken we een array: – Make “array1 { } ;vier bepaalde elementen – Make “array2 (array 100) ;honderd onbepaalde elementen ● Zo vragen we de waarde van een item op (item 3 array1) ;geeft item met index 3 (=5) ● Zo veranderen we de waarde van een item setItem 50 array2 100 ;zet item 50 op 100

Arrays in LOGO Make “staven {0 0 0} ;Bijvoorbeeld: er is een schijf toegevoegd: setItem :staaf :staven (item :staaf :staven)+1

Toevoegen van een schijf ● Schrijf de procedure voegtoeSchijf. ● Maak eerst manueel een array “Staven” aan, en teken drie staven. ● Zorg dat de procedure in elke toestand werkt ● Schrijf de procedure beginSituatie. Deze doet hetvolgende: ● Tekent 3 staven ● Maakt de array “Staven” ● Voegt :aantalschijven schijven toe

Hanoi in LOGO 10 x volgnummer