Wpisany przez Piotr Łabudziński,
17 listopada 2005 20:38
Wieże Hanoi – dane mamy krążki o różnych średnicach, ułożonych na sobie od najmniejszego do największego. Problem polega na odbudowaniu (przeniesieniu wszystkich klocków wieży na ostatni palik), z zachowaniem kształtu, wieży składającej się z kolistych klocków o różnych średnicach. Na raz można przenosić tylko jeden krążek. Podczas przekładania wolno się posługiwać buforem, reprezentowanym przez dodatkową podstawkę na klocki, przy ogólnym założeniu, że nie można kłaść klocka o większej średnicy na mniejszy.
Zagadka ta wywodzi się z Tybetańskiej legendy, według której mnisi rozwiązują tą łamigłówkę dla 64 krążków. Legenda mówi, że gdy mnisi zakończą zadanie, nastąpi koniec świata.
Na początek proponuje zapoznać się z algorytmem dla 1,2 i 3-ch krążków, aby następnie można było wyprowadzić sobie algorytm na N ilość krążków.
Jak widać problem wież hanoi jest problemem, w którym liczba kroków rośnie wykładniczo w zależności od liczby krążków do przełożenia.
Zagadka ta wywodzi się z Tybetańskiej legendy, według której mnisi rozwiązują tą łamigłówkę dla 64 krążków. Legenda mówi, że gdy mnisi zakończą zadanie, nastąpi koniec świata.
Na początek proponuje zapoznać się z algorytmem dla 1,2 i 3-ch krążków, aby następnie można było wyprowadzić sobie algorytm na N ilość krążków.
- Problem dla 1 krążka:
- Dla 2 krążków:
- Dla 3 krążków:
rozwiązanie dla 3 krążków składa się z 7 ruchów:
kolejne etapy to:- przenieś krążek o najmniejszej średnicy na palik docelowy,
- krążek o średnicy większej przenieś na palik pomocniczy,
- krążek najmniejszy przenieś na palik pomocniczy,
- następnie krążek największy przenieś na palik docelowy a najmniejszy na źródłowy,
- na największym połóż średni i potem najmniejszy,
- koniec
- Rozwiązanie dla N elementów:
Cały problem przeniesienia krążków hanoi przy uzyciu 3 palików składa się z trzech podstawowych "kawałków":- przenieś N-1 górnych krążków z palika początkowego na palik pomocniczy,
- przenieś N-ty krążek na palik docelowy,
- przenieś N-1 górnych krążków z palika pomocniczego na docelowy.
Jak widać problem wież hanoi jest problemem, w którym liczba kroków rośnie wykładniczo w zależności od liczby krążków do przełożenia.
Implementacje
Autor | Język programowania | Komentarz | Otwórz | Pobierz | Ocena |
Tomasz Lubiński | C/C++ | .cpp | .cpp | ***** / 28 | |
Tomasz Lubiński | Delphi/Pascal | .pas | .pas | ***** / 8 | |
Tomasz Lubiński | Java | .java | .java | ***** / 7 | |
Łukasz Kominek | Python | .py | .py | ***** / 9 | |
Łukasz Kominek | Python | Krótsza wersja. | .py | .py | ***** / 2 |
Poprawiony: 09 czerwca 2011 21:09
Legenda ta została zmyślona o ile się nie mylę przez Lucas`a.
Cytat:
No tak. Najmniejsza liczba wymaganych ruchów wynosi 2 do potęgi n-1 [2^(n-1)], przy czym n jest liczbą krążków.
Cytat:
Brakuje mi tu informacji o zastosowaniach problemu, ale ogólnie ciekawie przedstawiony zarys problemu ;) . Ode mnie dorzucam implementację w Python ;) .
Raczej 2 do potęgi n minus 1 tzn. (2^n)-1