Tower of Hanoi (Savin és
Mi ez egy puzzle, amely néha a „torony Brahmanák, és E. Ignatieff hív” Gyermek piramis? " Ha az előírtnál gyermekek piramis (lemezek vannak elhelyezve, emelkedő sorrendben: a felső - a legkisebb, és az alsó - a legnagyobb), és két szár ugyanazon gyermek piramisok, a puzzle már a kezedben.
Felsorolni rudak: az egyik, amikor a lemezek kap szoba 1, a másik - a 2. és a 3. A feladat az, hogy mozog a kerekek a tengely rúd 1-3, egy 2 rúd, köztes. Ebben az esetben az alábbi két feltétel:
- egy lépés csak egy lemez lehet mozgatni,
- nem tudod nagyobb lemez a kisebb.
Van egy legenda, hogy az indiai város Benares, az isten Brahma helyezzük az egyik a templomok a bronz emeleten három gyémánt rúd a test vastagsága méh egyikük tette 64 aranylemez, és mivel a világ teremtése fáradhatatlanul helyett egymást, papok hordozzák CD-k egy bottal, hogy a másik szerint a fenti szabályokat. Amikor a pap viszi az összes lemezt, az elsőtől a harmadik rúd - mondja legenda.- véget.
Lássuk, hogyan kell mozogni lemezeket az első bár a harmadik, és az egyik megtudja, ha van hamarosan eljön az ígért a világ végét.
Ha csak egy lemez volt a piramis, a megoldás nyilvánvaló - akkor lép be a harmadik terminál és tenni vele. Mi már teljesítette az előírt feladatot egyetlen körben. És ha két lemez? Ezután az első, hogy a második, kisebb működtető rúd, majd állítsa be a második lemezt a harmadik rudat, majd egy kisebb prenesem, és a harmadik hajtótengely, elhelyezi azt a másik tetején. Minden. Három lépésben tudtunk átadni a két meghajtót a harmadik rúd. Megjegyezzük, hogy 1 = 2 ^ 1 - 1, és 3 = 2 ^ 2 - 1. Most tegyük fel, hogy képesek vagyunk, hogy elmozdulás a harmadik rúd piramis n lemezek a 2 ^ n-1-hatást. Megmutatjuk, hogy ebben az esetben át lehet vinni egy harmadik rudat és egy piramis az n + 1 lemezek, sőt, 2 ^ (n + 1) - 1 akció.
Sőt, még a piramis n + 1 lemezek. A Vromi újraszámozásához rudak: A második az úgynevezett harmadik, a harmadik - a második. Most tudjuk mozgatni a felső n lemezeket az első a harmadik rúd, ami a 2 ^ n - 1 akció. Az első bár csak egy lemezt. Transzfer, hogy megszabaduljon a második rúd. Ismét újraszámozásához rúd: ez utóbbi tengely száma három, ad az első két szám, a harmadik - az első számú. Most már az első rúd n lemezek, a második - ingyenes, a harmadik pedig a legnagyobb lemezt. Meg kell még át az első bár a harmadik n lemezek, mit tehetünk 2 ^ n - 1 működését. Minden. Mi gyűlt össze a harmadik rúd n + 1 lemezek, miután készített 2 ^ (n + 1) - 1 akció.
Ennélfogva, a elvével összhangban indukció, ebből következik, hogy bármely pozitív egész k lehetnek, amelyek egy piramis k meghajtók mozgatni őket az elsőtől a harmadik rúd, következő szabályok 2 ^ k - 1 akció.
Ez a bizonyíték nem nehéz, hogy az intézkedés formáját algoritmus. Ez az algoritmus kínál programozók ezekben a könyvekben rögzíteni azt egy adott programozási nyelv.
Könnyen azt mutatják, hogy kevesebb, mint 2 ^ k - 1 k, hogy mozog a cselekvés az első hajtótengely a harmadik lehetetlen. Ezért legendás papok kell 2 ^ 64-1 akció teljesíteni a feladatot. Ha költeni minden tevékenység csak egy másodpercig, akkor lesz 18 446 744 073 709 551 615 t. E., több mint 500 milliárd év.
Nézzük közelebbről a lemez átviteli folyamat. Ahhoz, hogy ezt elérjük, számozza őket, hogy a: .. Az első - a legkisebb, stb Most kezdenek át lemezek összhangban az algoritmus és rögzíti számú hordozható meghajtók:
Érdekes, hogy minden páratlan átutalás - az átadása az első lemez. Egy másik megfigyelés: rendezni a rudak a sarkokban egy egyenlő oldalú háromszög, és figyeljük a mozgását az első lemez. Kiderült, hogy mozog egy kört az ugyanazon az oldalon; Ebben az esetben, ha az eredeti lemezek száma, páros, akkor az óramutató járásával megegyező, és ha páratlan - ellen. Ezek a megfigyelések lehetővé tette számunkra, hogy fogalmazza meg a következő algoritmus meghajtók átviteli 1961:
először át az első lemezen, majd nem az első, majd ismét az első, akkor nem az első, és így tovább az első lemez át egy irányban .. óramutató járásával megegyező irányban az esetében páros számú lemezek és óramutató járásával ellentétes esetén páratlan szám.
Megjegyezzük, hogy a nyilatkozat „nem kerül át az első lemez” teljesen meghatározza, hogy melyik meghajtót, és amelyet át kell tenni abban a pillanatban, mert a kisebb lemez mindig helyezzük egy nagyobb.
Nemrégiben tanulót Perm Mischa Fedorov javasolt másik algoritmust hajt végre a fentiekben leírt, a transzfer K hajtja az első rúd a harmadik 2 ^ k - 1 akció.
Michael bevezeti a „üres torony”. Rúd lemezek felfűzve őket, felhívja a tornyok és a tornyot, amely nem vesz részt a lemez átviteli művelet ezen a ponton, az úgynevezett üres. M. Fedorov algoritmus fogalmazott nagyon röviden:
a folyamat halad az üres torony kell mozgatni egy kört ugyanabba az irányba, az óramutató járásával megegyező, ha a lemezek számát páratlan, vagy az óramutató járásával ellentétes, ha a szám páros.
Munkája Misha Fedorov sikeresen jelentve az All-Union Tudományos és Műszaki Konferencia iskola. Megjegyezzük, hogy ha az első algoritmus vezet a kívánt eredményt, az építőipar, az érvényességét a második és a harmadik bizonyítania kell, és ez nem túl könnyű. Míg valójában mindhárom algoritmus csak különböző felvételek ugyanazon a lemezen átviteli folyamat.
Jelentősen eltérő folyamat játszódik le, ha tovább bonyolítja az átigazolási szabályok. A leolvasó Tarasenko kínál találni egy olyan algoritmust, hogy készítsen lemezeket az első bár a harmadik, amelyben az első meghajtó nem találta volna magát a második rúd. Azt állítja, hogy egy ilyen eljárás áll rendelkezésre 2 * 3 ^ (k-1) - 1 akció. Általában, ha a tilalmat második korong kialakítva a második rúd, száma átrendeződések válik 2 * 3 * 2 ^ (k-2) -1. És általában, ha a tilalmat fel a második rúd n-edik meghajtó, akkor lesz 2 ^ n * 3 ^ (k-n) -1 lépéseket.
Körülbelül egy másik módosítása a puzzle írtunk az előző számában a magazin (4 fedél). B. Panaev javasolja, hogy fontolja meg a kérdést: ez mindig lehet mozgatni lemezeket az első és a harmadik rúd, ha kezdetben ők voltak az első bár véletlenszerű sorrendben. Itt a bizonyíték, hogy az ilyen váltás mindig lehetséges.
Annak bizonyítására, a lehetőséget az ilyen változó, először nézzük foglalkozik az egyszerűbb feladat. Tegyük fel, hogy szükség van rá, hogy összeállít egy piramis ki lemezeket felfűzve két rúd, ingyenes harmadik és a kerekek találhatók a rudak emelkedő átmérőjű. Ezen kívül azt feltételezzük, hogy egy ilyen probléma már tudjuk, hogyan lehet megoldani az esetleges kevesebb meghajtók.
Hagyja, hogy a legnagyobb lemez az első sorban, majd gyűjteni egy piramis a harmadik rúd, meg kell három dolgot:
- összegyűjti a második rúd piramis nélkül a legnagyobb lemez;
- mozgatni a legnagyobb lemez a harmadik rúd;
- piramis lépés a második a harmadik rúd.