![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
Co to robi? Rozwiazuje "Wieze Hanoi", uzywa minimalnej liczby ruchow i pokazuje je kolejno.
PHP5 REQUIRED
Ten post edytował dr_bonzo 2.06.2005, 17:47:06 -------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 566 Pomógł: 18 Dołączył: 23.08.2003 Skąd: Łomża Ostrzeżenie: (0%) ![]() ![]() |
mozna jakis exampel?
-------------------- *Note: No animals were killed durning the construction of this post.
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
Ehhh... a chociarz uruchomiles ten skrypt?
Wystarczy go skopiowac i uruchomic -- wyswietli ci kolejne ruchy i kolejne stany wiez. -------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 566 Pomógł: 18 Dołączył: 23.08.2003 Skąd: Łomża Ostrzeżenie: (0%) ![]() ![]() |
a wogole co to wierze hanoi??
-------------------- *Note: No animals were killed durning the construction of this post.
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
WieZe -- google wiedzialo ale nie powiedzialo?
http://en.wikipedia.org/wiki/Tower_of_Hanoi -------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 127 Pomógł: 0 Dołączył: 21.09.2003 Skąd: Truskaw Ostrzeżenie: (0%) ![]() ![]() |
Sam algorytm rozwiązywania Hanoi wygląda tak:
Przyklad pzepisany z ksiazki Helionu "Algorytmy, struktury danych i techniki programowania", sprawdzalem pieknie dziala. Nie przygladalem sie za bardzo Twojemu skryptowi, ale mysle ze mozna bylo zrobic to krocej -------------------- ![]() |
|
|
![]()
Post
#7
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
Twoj algorytm jest rekurencyjny, a moj nie. Oba opisane sa w wikipedii:
Cytat Alternately move disc 1 and one of the larger discs. If two of the larger discs are available, always move the smaller one onto the larger. When you move an odd-numbered disc, always move it one peg clockwise; when you move an even-numbered disc, always move it one peg counterclockwise. An even easier way to remember this solution is to notice that the smallest disk gets every second move, and always moves in the same direction. In between smallest disk moves, there is only one legal move that does does not involve moving the smallest disk again. ---- Cytat Nie przygladalem sie za bardzo Twojemu skryptowi, ale mysle ze mozna bylo zrobic to krocej No pewnie, w ogole porzucic klasy, obsluge bledow, skrocic printTowers(), itd. -------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 127 Pomógł: 0 Dołączył: 21.09.2003 Skąd: Truskaw Ostrzeżenie: (0%) ![]() ![]() |
to co ja napisalem to jest tylko algorytm, a nie caly skrypt. Po dodaniu do niego obslugi bledow i przerobieniu na wersje obiektowa, bylby chyba krotszy od Twojego, ale rozumiem tez uzycie wersji nerekurencyjnej
-------------------- ![]() |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 188 Pomógł: 0 Dołączył: 23.05.2005 Ostrzeżenie: (0%) ![]() ![]() |
A mi nawet nie chce sie czytac i probowac zrozumiec wersje iteracyjna, bo po co? Wersja rekurencyjna jest tak intuicyjna i zrozumiala, ze nie trzeba nic wiecej. To niesamowite, ze te kilka linijek jest poprawnym rozwiazaniem [i najoptymalniejszym] podanego problemu. Ale braw nie bije bo znalem juz wczesniej to rozwiazanie
![]() |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 135 Pomógł: 0 Dołączył: 28.09.2003 Skąd: Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
Najoptymalniejszym? Dla mnie najoptymalniejsze to najszybsze, a rekurencyjne takie napewno nie jest.
|
|
|
![]()
Post
#11
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
Cytat Ale braw nie bije bo znalem juz wczesniej to rozwiazanie Prawda jest taka ze nudzilo mi sie tamtej nocy i napisalem ten algorytm. A wpadlem na niego (rozwiazujac na papierze dziesiatki razy WH) dawno temu. Cytat Wersja rekurencyjna jest tak intuicyjna i zrozumiala A sprobuj go zastosowac w praktyce w realu... -------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#12
|
|
![]() Administrator serwera Grupa: Przyjaciele php.pl Postów: 909 Pomógł: 0 Dołączył: 12.08.2003 Skąd: /var/www/wroclaw.php Ostrzeżenie: (0%) ![]() ![]() |
@Bielo: Jeżeli masz pomysł, to go rozwiń, napisz skrypt i umieść w osobnym temacie.
-------------------- Powrót do przeszłości :)
![]() |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 188 Pomógł: 0 Dołączył: 23.05.2005 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Najoptymalniejszym? Dla mnie najoptymalniejsze to najszybsze, a rekurencyjne takie napewno nie jest. Dlaczego nie? ![]() Cytat Prawda jest taka ze nudzilo mi sie tamtej nocy i napisalem ten algorytm. A wpadlem na niego (rozwiazujac na papierze dziesiatki razy WH) dawno temu. Przyznam ci sie, ze ja tez kiedys wpadlem na to rozwiazanie, ale mniejsza z tym. Cytat A sprobuj go zastosowac w praktyce w realu... Hm.. jesli pisze program to po to zeby robil cos za mnie. Np. program sortujacy za pomoca quicksorta lub heapsorta. Sprobuj zrobic to w praktyce. Bez sensu gadanie... ![]() |
|
|
![]()
Post
#14
|
|
Administrator PHPedia.pl Grupa: Developerzy Postów: 1 102 Pomógł: 2 Dołączył: 14.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
Cytat(Radarek @ 2005-05-29 15:38:41) Cytat Najoptymalniejszym? Dla mnie najoptymalniejsze to najszybsze, a rekurencyjne takie napewno nie jest. Dlaczego nie? ![]() Udowodnij, że jest najoptymalniejsze ![]() -------------------- |
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 188 Pomógł: 0 Dołączył: 23.05.2005 Ostrzeżenie: (0%) ![]() ![]() |
Cytat(bela_666 @ 2005-05-29 15:12:29) Cytat(Radarek @ 2005-05-29 15:38:41) Cytat Najoptymalniejszym? Dla mnie najoptymalniejsze to najszybsze, a rekurencyjne takie napewno nie jest. Dlaczego nie? ![]() Udowodnij, że jest najoptymalniejsze ![]() Hm.. ilosc ruchow potrzebnych do przeniesienia N krazkow wynosci 2^(n-1) i taka jest zlozonosc programu. Szybciej sie nie da. Zakladajac, ze wersja iteracyjna wykonuje taka sama ilosc ruchow to i tak jest mniej optymalna. Czemu? Bo zawiera wiecej instrukcji ![]() |
|
|
![]()
Post
#16
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
Ale wez tez pod uwage wielokrotne wywolywanie funkcji, co takze zajmuje zasoby i cpu (trzeba utworzyc zmienne lokalne, odlozyc je na stos, wywolac funkcje, zdjac zmienne z powrotem, itd). Ale nie wiem, ktora z metod bedzie szybsza.
-------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 188 Pomógł: 0 Dołączył: 23.05.2005 Ostrzeżenie: (0%) ![]() ![]() |
Cytat(dr_bonzo @ 2005-05-29 16:50:27) Ale wez tez pod uwage wielokrotne wywolywanie funkcji, co takze zajmuje zasoby i cpu (trzeba utworzyc zmienne lokalne, odlozyc je na stos, wywolac funkcje, zdjac zmienne z powrotem, itd). Ale nie wiem, ktora z metod bedzie szybsza. Tak wzialem to pod uwage. Rekurencyjne wywolanie funkcji to odlozenie na stos zmiennych lokalnych funkcji oraz adresu powrotu. Nie wierzysz chyba zeby wersja rekurencyjna bedzie dluzsza? ![]() |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 119 Pomógł: 0 Dołączył: 15.07.2003 Skąd: Grajewo Ostrzeżenie: (0%) ![]() ![]() |
A mi wyrzuciło taki błąd w tym pierszym skrypcie:
Kod Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in D:\usr\test\hanoi.php on line 4
|
|
|
![]()
Post
#19
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
Bo musisz miec PHP5.
PS. Uzupelniony 1szy post o to info -------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 0 Dołączył: 28.09.2005 Ostrzeżenie: (0%) ![]() ![]() |
A wzial ktos pod uwage fakt ze w wersji rekurencyjnej skonczy sie baaardzo szybko pamiec?
![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 25.07.2025 - 10:15 |