Hanojské věže (původně Hanojská věž ) je logická hra, kterou si představil francouzský matematik Édouard Lucas a která spočívá v přemísťování disků různých průměrů z „odletové“ věže do „příletové věže“. věž, a to v minimu tahů, při respektování následujících pravidel:
Předpokládá se, že toto poslední pravidlo je respektováno také ve výchozí konfiguraci.
Matematický problém věží Hanoje vynalezl Édouard Lucas . Je vydáván ve svazku 3 jeho Récréations mathiques , publikovaném posmrtně v roce 1892 . Oznámil, že tento problém je způsoben jedním z jeho přátel, N. Clausem de Siamem ( anagramem Lucase d'Amiensa, jehož rodištěm je Amiens), údajným profesorem na vysoké škole Li-Sou-Stian (anagramem Saint Louis , střední škola, kde Lucas učil).
Pod názvem „ Brahmové padají “ Lucas vypráví, že „N. Claus ze Siamu viděl na svých cestách za vydáním spisů proslulého Fer-Fer-Tam-Tama ve velkém chrámu v Benares , au pod kopulí, která označuje střed světa, tři diamantové jehly, zasazené do měděné desky, vysoké loket a velké jako tělo včely. Na jednu z těchto jehel navlékl Bůh na začátku století 64 kotoučů z čistého zlata, největší spočívající na mosazi, a ostatní, stále více úzké, navrstvené na vrchol. Je to posvátná věž Brahmâ . Ve dne v noci se kněží navzájem sledovali po schodech oltáře, zaneprázdněni přepravou věže z první jehly na třetí, aniž by se odchýlili od pevných pravidel, která jsme právě naznačili a která stanovila Brahma. Až bude po všem, věž a bráhmani padnou a bude to konec světů! " .
Jak je ukázáno níže, hra na 64 discích vyžaduje minimálně 264 -1 tahů. Za předpokladu, že přesunutí disku trvá 1 sekundu, což činí 86 400 tahů denně, by hra skončila přibližně po 213 bilionech dní, což je zhruba ekvivalent 584,5 miliardy let, což je 43násobek odhadovaného stáří vesmíru (13,7 miliardy podle některých zdrojů).
Je snadné demonstrovat indukcí, že pokud n je počet disků, k dosažení jeho konců je zapotřebí nejméně 2 n - 1 tahů, což je množství, které se s n velmi rychle zvyšuje . Nechť A, B a C jsou tři místa věží; označte x n počet přemístění disků potřebných k přemístění celé věže. Chcete-li přesunout věž n disků z A do C, provedeme tyto tři kroky:
Počet přemístění disků tak ověřuje vztah opakování:
což dává dobře
Můžeme ukázat, že zde popsaná metoda poskytuje optimální posloupnost (ta, která vyžaduje nejméně tahů) a že tato je jedinečná. Ve skutečnosti, abychom přesunuli věž n disků z A do C, musíme nutně najednou nebo později přesunout největší disk z A do C, abychom to mohli udělat, musíme mít naskládaných prvních záznamů n -1 v B .
Problém věží Hanoji je vidět v algoritmické ( programování ), kde se nabízí příklad síly a čitelnosti rekurzivně definovaných programů (dalším příkladem toho, že strom třídění ). Metoda rozlišení, která byla vidět dříve, skutečně vede k rekurzivnímu algoritmu popsanému níže. Parametry postupu v Hanoji jsou:
Můžeme zobecnit rekurzivní rozlišení v případě, že jsou disky zpočátku uspořádány náhodně na třech místech, spíše než naskládány na první (počáteční poloha je libovolná). Cílem bude seskupit n disků v cílovém umístění A. Číslujeme n disků od 1 do n v pořadí zvětšující se velikosti a označíme P k pozici disku očíslovaného k . Začneme z následujícího pozorování: v určitém okamžiku bude nutně nutné přesunout největší disk z P n na A. Rekurzivní uvažování je pak podobné jako u předchozího:
Na rozdíl od výše popsaného konkrétního případu závisí výchozí umístění na uspořádání disků. Musíme také rozlišit případ, kdy je disk n již na správném místě (P n = A). V tomto případě by sledování předchozí metody nebylo optimální: druhý krok je zbytečný a první a třetí krok můžeme sloučit přímým seskupením prvních n -1 disků v A.
Zobecněný algoritmus se proto stává:
procédure Hanoï-généralisé(n, A) si n ≠ 0 si Pn = A Hanoï-généralisé(n-1, A) sinon Hanoï-généralisé(n-1, I) Déplacer le disque de Pn vers A Hanoï-généralisé(n-1, A) fin-si fin-si fin-procédureVšimněte si, že poslední rekurzivní volání může být nahrazeno voláním Hanojské procedury konkrétního případu viděného dříve, protože všechny první disky n -1 jsou poté naskládány na I.
Se stejným uvažováním jako výše ukážeme, že tento algoritmus poskytuje jedinečnou optimální sekvenci. Počet zásahů můžeme vyjádřit jako funkci počtu n disků, jejich uspořádání a umístění A příjezdu: označíme to y n (A).
Proto máme následující relaci opakování:
Můžeme pak vyjádřit y n (A) jako součet mocnin 2, kde je termín přidán právě tehdy, když je odpovídající disk ztracen:
kde b k je 0, pokud je disk k dobře umístěn, 1 jinak.
V nejhorším případě jsou všechny disky ztraceny. Máme tedy . Je zajímavé poznamenat, že obvyklá počáteční situace je jedním z těch nejhorších případů.
Existuje také iterační postup, jak optimálně vyřešit problém věží v Hanoji. Spočívá v postupném provádění následujících dvou pohybů a označení tří zatáček (zleva doprava) A, B, C:
a pokračovat v těchto dvou přemístěních iteračně, dokud není přemístěna celá věž, přičemž poslední přemístění je pak omezeno na nejmenší disk v horní části věže. Akce „přesunout další disk“ je jednoznačná, protože kromě nejmenšího disku je možný pouze jeden pohyb disku.
Na rozdíl od rekurzivního postupu iterativní postup nepoužívá žádné zapamatování stromu posunů, které má být provedeno, a vyžaduje pouze zapamatování, zda musíme pohybovat nejmenším diskem nebo ne, a ve kterém směru se provádějí posuny malého disku ... Rovněž umožňuje kdykoli se vrátit do původní situace: stačí obrátit směr, ve kterém se pohybuje nejmenší disk. Důvody, proč tento algoritmus řeší problém, jsou však méně zjevné než u rekurzivního algoritmu.
Můžeme to vysvětlit tím, že si všimneme, že v optimálním řešení nutně přesuneme nejmenší disk přesně jednou za dva, protože pohybovat dvakrát za sebou by nebylo optimální, a pohybovat také druhým diskem dvakrát za sebou. Jak přesuneme tento menší disk, zbývá určit.
Předpokládejme, že věž n disků je zpočátku na místě A a že ji chceme přesunout na místo C. Indukcí na n ukážeme , že iterace dvou výše popsaných pohybů produkuje optimální sekvenci, pokud směr, ve kterém menší disk je přesunut je A → B → C → A (zleva doprava) pro sudé n , nebo A → C → B → A (zprava doleva) pro liché n . Vskutku :
Předpokládejme věže očíslované 1, 2 a 3.
Posun z věže č. I do věže č. J je zaznamenán i + j.
Posun 3 tedy označuje jak posun věže 1 směrem k věži 2, tak věže 2 směrem k věži 1, ale není zde žádná dvojznačnost: nejmenší disk bude umístěn na největší.
Podobně posun 4 označuje jak posun věže 1 směrem k věži 3, tak věže 3 směrem k věži 1.
A nakonec posun 5 označuje jak posun věže 2 směrem k věži 3, tak věže 3 směrem k věži 2.
Když je počet disků sudý, pohyby, které mají být provedeny, jsou 3,4,5,3,4,5,3,4,5 ... tolikrát, kolikrát je potřeba (posloupnost 3,4,5 se opakuje krát).
Pokud je počet disků lichý, je třeba provést posunutí 4,3,5,4,3,5, ... tolikrát, kolikrát je potřeba (sekvence 4,3,5 se opakuje, pak končí posunutí z věže 1 do věže 3).
Předpokládejme, že disky jsou střídavě zbarveny černě do bílé. Pro větší pohodlí se také předpokládá, že základny tří prutů jsou zbarveny černě nebo bíle. Základna, která podporuje počáteční věž, je zbarvena jinou barvou, než je barva největšího disku, aby respektovala střídání barev. Další dvě základny jsou jedna černá, druhá bílá. Disky jsou iterativně přesunuty podle následujících dvou pravidel:
Můžeme reprezentovat hru Hanojských věží abstraktním grafem , přičemž každý vrchol grafu představuje možné uspořádání N disků na třech otáčkách, hrana spojující dva vrcholy, pokud existuje pohyb disku umožňující průchod z uspořádání, představované jedním z vrcholů, k druhému. Označení vrcholů je založeno na poloze disků v uspořádání, které představuje: čteme zleva doprava, do které věže každý disk patří, počínaje pozicí největšího disku.
Diagram ukazuje herní strom se třemi disky. Počáteční pozice je umístěna na jednom vrcholu trojúhelníku, například AAA, konečná poloha je na jiném vrcholu, BBB nebo CCC. Barva okrajů označuje disk, který se má pohybovat: červená pro nejmenší disk, žlutá pro mezilehlý disk a modrá pro velký disk.
Ukazujeme, že pro všechna N je graf věží Hanoje s N disky totožný s grafem získaným z Pascalského trojúhelníku řádu 2 N , kde spojíme liché binomické koeficienty hranou.
Úkol věže v Hanoji se používá ve výzkumu psychologie , zejména při řešení problémů . Používá se také jako neuropsychologický test .
Tento úkol je citlivý na frontální a prefrontální dysfunkce .
Tento test tedy umožňuje vyhodnocení výkonných funkcí , jako je plánování , pracovní paměť a inhibice .
Výkon na Hanojské věži závisí na schopnostech inhibice , pracovní paměti , procedurální paměti a inteligenční tekutině.
Avšak inhibice vyžaduje potlačení aktivity v primární motorické kůry , z na pravé dolní frontální mozkové kůry a motorového prostoru dodatečně. Pracovní paměť znamená dorso-boční část frontální mozkové kůry , která umožňuje účinnou manipulační a kontrolní informace. Stejně tak plánování koreluje s aktivací dorzální části prefrontální kůry , parietální a premotorické kůry a mozečku.
Chápeme, proč je Hanojská věž citlivá na frontální a prefrontální dysfunkce.
Tento test je blízký testu testu Tower of London i testu Toronto Towers.