vrijdag 1 mei 2009

De slimme abt van Hanoi


"Lang geleden, bij het begin der schepping, toen de wereld net ontstaan was, sprak de oppergod Brahma tegen de monniken van Zijn klooster in de stad Hanoi:
'Aanschouw de binnenplaats'
Tot de verbazing van de monniken waren er op de binnenplaats, die net nog leeg was geweest op wat gras en stof na, drie palen te zien. Op de eerste paal zat een groot aantal gouden schijven, een enorme gouden schijf omringde de onderkant van de paal, een iets kleinere gouden schijf lag daarbovenop, een nog iets kleinere lag daar weer bovenop, totdat er uiteindelijk net onder de top van de eerste paal een piepklein gouden schijfje lag.
'Zoals iedere dag anders moet zijn en alles wat ontstaan is weer moet vergaan, zo zullen jullie Mijn klok bijhouden. Het is jullie taak elke dag een schijf te verplaatsen van de ene naar de andere paal, totdat alle 64 gouden schijven van de eerste naar de laatste paal zullen zijn overgebracht, wat de Laatste Dag zal zijn. Volgens de wetten van de kosmische harmonie mag er nooit een grotere schijf op een kleinere schijf liggen. En maak geen fout in de verplaatsing, of riskeer mijn toorn. Morgen, bij het ochtendgloren, moet de eerste schijf verplaatst zijn."

Ineens was Brahma verdwenen, maar de drie palen met hun gouden schijven stonden nog steeds op de binnenplaats. Alle monniken keken naar de abt, die van de eerste naar de tweede naar de derde paal keek.

"Wat moeten we doen, o abt?"

De abt lachte zenuwachtig.

"Maak jullie geen zorgen. Ik heb alles onder controle." En hij liep snel naar zijn kamer om te mediteren.

Tot diep in de nacht konden de monniken de abt horen ijsberen in zijn kamer. De abt was geen wiskundige (aan het begin van de wereld was de wiskunde namelijk nog niet uitgevonden) en hij had kennelijk veel moeite met het vinden van de juiste eerste stap. Alle monniken waren dan ook al in slaap gevallen toen de prior (de onder-abt) wakker werd van een gebons op zijn deur.

"Opstaan, broeder" - het was de abt. "Ik heb een taak voor je."

Slaapdronken opende de prior de deur, waarna zijn superieur de strategie uitlegde.

"Na veel nadenken, broeder, is het mij duidelijk dat ik als abt veel te belangrijk ben om elke dag met gouden schijven te sjouwen. Zoals ik de belangrijkste persoon hier ben, zo zal ik alleen de belangrijkste en grootste gouden schijf verplaatsen. Jij hebt de opdracht de bovenste 63 schijven naar de tweede paal te plaatsen, daarna zal ik de grootste schijf naar de derde paal verplaatsen, en dan mag jij het werk afronden door de 63 kleinere schijven allemaal keurig daar weer op te stapelen. O ja, en je moet de eerste schijf vóór de komende ochtend geplaatst hebben. Slaap lekker."

De prior was te slaperig om goed te realiseren wat er gebeurd was, maar nadat de abt was vertrokken en luid in zijn cel ernaast lag te snurken, besefte de prior dat hij een probleem had. Drie-en-zestig gouden schijven verplaatsen was veel ingewikkelder dan hij kon oplossen. Maar omdat hij een belangrijke broeder was, waarom kon hij dan niet het trucje van de abt toepassen? Zo werd drie minuten later de kloosteroudste gewekt, met de opdracht de 62 bovenste schijven naar de laatste paal te verplaatsen, zodat de prior de 63e schijf naar de 2e paal kon verplaatsen, waarna de kloosteroudste weer die 62 schijven naar de middelste paal moest verplaatsen zodat alle schijven klaar zouden zijn voor het verplaatsen van de grootste gouden schijf door de abt.

De kloosteroudtse vond dat echter ook te ingewikkeld, en gaf de op één na oudste monnik de opdracht de 61 bovenste schijven naar de middelste paal te verplaatsen, zodat de oudste monnik de 62e schijf naar de derde paal kon verplaatsen, zodat... En omdat er precies 64 monniken in het klooster waren verplaatste de jongste novice de volgende ochtend de eerste gouden schijf, op een manier die Brahma behaagde.

-----------------------------------------------------------------------------------------

Je beseft misschien dat dit maar een sprookje is, en ook nog dat dit een sprookje is dat waarschijnlijk is verzonnen door een wiskundige (immers, wiskunde gaat er gemakkelijk van uit dat de wereld volgens wiskundige regels geregeerd wordt, en bovendien dat alles onveranderlijk is). Het verhaal van de torens van Hanoi is officieel bedacht door de Franse wiskundige Edouard Lucas, hoewel volgens sommigen de echte uitvinder Harrison Heath was, die dol was op schijfpuzzels en aan wie we ook "vier-op-een-rij" te danken hebben.

Maar interessanter dan de ontstaansgeschiedenis van de puzzel is zijn oplossing. De abt lijkt erg flauw doordat hij zijn werk afschuift op zijn ondergeschikten. Maar in werkelijkheid is dat een erg slimme oplossing omdat de abt het probleem kleiner maakt. Een probleem met 64 schijven wordt een probleem met 63 schijven wordt een probleem met 62 schijven... tot het uiteindelijk een doodeenvoudig probleem met één schijf is.

Zo'n aanpak van problemen wordt "recursie" genoemd. Een standaardvoorbeeld van recursie is het berekenen van faculteiten (1! = 1, 2! = 2x1=2, 3!=3x2x1=6, 4!=4x3x2x1=24, 5!=...) die kan worden samengevat tot de volgende twee regels.

Als n=1, dan n! = 1
Als n>1, dan n! = n x (n-1)!

Als je dus 3! wilt berekenen werkt de eerste regel niet, volgens de tweede regel moet je 3 vermenigvuldigen met 2!. Dat weet je ook niet, de eerste regel geldt ook niet voor 2!, maar de tweede regel zegt dat 2!=2x1!. 1! weet je (dat is 1), dus 2! wordt 2x1 = 2, en 3! wordt 3x2=6, wat inderdaad het juiste antwoord is.

De oplossing van de Hanoi-puzzel ziet er zo uit:

Verplaats (n schijven, van bron_toren, via hulp_toren, naar doel_toren)
Als n>=2 schijven:
Verplaats(n-1 schijven, van bron_toren, via doel_toren, naar hulp_toren)
Verplaats schijf van bron_toren naar doel_toren
Als n>=2 schijven:
Verplaats(n-1 schijven, van hulp_toren, via bron_toren, naar doel_toren)

Dit klinkt heel ingewikkeld, maar probeer het eens met 2 schijven. De intuitieve oplossing is de bovenste schijf naar de middelste toren te verplaatsen, de onderste schijf direct naar de doeltoren, en dan de bovenste schijf daarbovenop te plaatsen. En dat klopt ook met het algoritme: als je twee schijven van toren 1 via toren 2 naar toren 3 verplaatst, moet je eerst 1 schijf verplaatsen van toren 1 'via toren 3' naar toren 2. Via toren 3 is hier niet nodig, omdat het er maar eentje is, dus direct van 1 naar 2. Dan de onderste schijf van 1 naar 3, tenslotte de kleinste schijf van de hulptoren 2 naar de doeltoren 3!

De meeste studenten die ik over recursie heb verteld worden in het begin heel erg duizelig, en zelfs verward van het begrip. Recursie is echt iets dat je moet bestuderen, voorbeelden bekijken, en als je dat een paar avonden hebt gedaan voor het slapen gaan begrijp je het ineens. En dat is al snel een "Eureka"-moment waarna het ineens lijkt alsof je veel meer van de wereld begrijpt en een stuk slimmer bent geworden. Bovendien heb je dan ineens een slimme extra methode om sommige ingewikkelde problemen eenvoudig op te lossen, van het ontdekken van het juiste pad in een doolhof tot het vinden van een woord in een woordenboek. Daar vertel ik misschien een volgende keer over, want recursie is verrassend veelzijdig. Maar laten we het nu nog even eenvoudig houden. Als je denkt dat je recursie begrijpt, probeer dan eens te voorspellen naar welke paal de jongste novice de eerste schijf verplaatste. Als je dàt weet, dan zou je alvast een zeer goede indruk maken mocht je ooit solliciteren voor het abt-schap van een door de oppergod aangewezen wereldklok-bijhoudend klooster...

17 opmerkingen:

  1. Touche. Оutstаndіng aгguments. Keep up the greаt work.


    mу site :: Suggested Web page

    BeantwoordenVerwijderen
  2. I νisit day-tο-day a feω web рageѕ anԁ sites to гead artiсles, ехcept
    this ωebsitе offeгs feаtuге bаѕed аrtіcles.



    My homepage - Wikipedia.fsw.leidenuniv.nl:8080
    My webpage: please click the following internet site

    BeantwoordenVerwijderen
  3. Very niсe pοst. I just ѕtumbleԁ upon
    уοur blog and wantеd to say that Ι've truly enjoyed surfing around your blog posts. In any case I will be subscribing to your rss feed and I hope you write again soon!

    Look into my homepage: www.theopenhub.org

    BeantwoordenVerwijderen
  4. Yοuг style is unique cοmρared to other fοlks I haνe reaԁ
    stuff from. Thank you foг posting when уοu've got the opportunity, Guess I will just bookmark this site.

    Feel free to visit my web-site ... Ampleshare.com

    BeantwoordenVerwijderen
  5. I just lіke the vаluаble info you suрply in
    youг articles. I'll bookmark your blog and check again right here regularly. I'm moderately sure
    I will leаrn plentу of new stuff right here! Bеst of luck for the
    next!

    Look intο my site: V2 cigs Review

    BeantwoordenVerwijderen
  6. Hеy! I гealizе this is kinԁ
    of off-tоpiс but I neеded to
    aѕk. Doeѕ oρeгating a well-estаbliѕhed ωebѕite
    ѕuch as уouгs requiгe a massiѵе amount wоrk?
    I am brаnd neω tο opеratіng a blog but I dо write in mу journаl on а daily baѕis.
    I'd like to start a blog so I will be able to share my own experience and views online. Please let me know if you have any ideas or tips for new aspiring blog owners. Appreciate it!

    my webpage; www.Sfgate.com

    BeantwoordenVerwijderen
  7. I'm amazed, I must say. Seldom do I encounter a blog that'ѕ
    both equally educative and engaging, and without a ԁоubt, you haѵe hit thе nail on the head.
    The problem іs ѕomething that not enough fοlκѕ аre ѕρeaking іntelligently about.
    Now i'm very happy that I stumbled across this during my search for something relating to this.

    Here is my blog Prweb.Com

    BeantwoordenVerwijderen
  8. Τhis iѕ my first timе go to see at hеre and i am in
    fact imprеssed to read eveгthing at single place.


    Also visіt my webpage :: sarasehan.com

    BeantwoordenVerwijderen
  9. It's actually a nice and useful piece of info. I'm glaԁ that you shaгeԁ this useful іnformatіοn wіth us.
    Pleаse keep us infοгmed lіke this.
    Thanκs for sharing.

    Take а look at my wеbрagе
    simply Click the following post

    BeantwoordenVerwijderen
  10. Hi there! Dο you use Tωіtter? ӏ'd like to follow you if that would be ok. I'm absolutely enjοying youг blog
    and look forwaгd to new updates.

    Hеre іs my blog ... Sensepil Reviews

    BeantwoordenVerwijderen
  11. The state of the аrt Flex belt, attempt it you ωill not regret it.

    BeantwoordenVerwijderen
  12. Thanks to my father ωhо tolԁ me concerning
    thіs webpage, thіs web ѕite іs
    truly awesome.

    Alѕо vіsit mу sіte; Blu Cigs review

    BeantwoordenVerwijderen
  13. It's really a great and useful piece of info. I'm ѕatisfied
    that you ѕhareԁ thіs useful infοrmation with uѕ.
    Рleаse stay us uρ to date like this.
    Thаnk you for shаring.

    Feel free to surf to mу blog post; v2 cigs review

    BeantwoordenVerwijderen
  14. According to v2 cigs critique you can quicκly сhеck οn net
    about electrοnic cigаrette brands.


    Look аt my website - v2 cig coupon codes

    BeantwoordenVerwijderen
  15. I just couldn't depart your web site prior to suggesting that I extremely enjoyed the usual information a person supply on your visitors? Is gonna be again steadily in order to check out new posts

    Feel free to surf to my web site ... wiki.feuerwache.net

    BeantwoordenVerwijderen
  16. ӏn terms of easy breathing, the smoker normаlly rewards from smokіng these glyсerin ρrimarily baseԁ cigaгettes, and is rarely nеgatiѵely impaсted by this
    light and quick smoke.

    Feel free to surf tо my web-site ... v2 cigs 15 off coupon code

    BeantwoordenVerwijderen