160 likes | 492 Views
تهیه کننده : لیلا فلزی استاد مربوطه: استاد توفیقی درس: طراحی الگوریتمها. Tower of hanoi. برج هانوی. مساله برج هانوی یکی از مسائل تاریخی مشهور است که درمباحث طراحی الگوریتم نیز به آن پرداخته می شود. به شکل زیر توجه کنید:.
E N D
تهیه کننده : لیلا فلزیاستاد مربوطه: استاد توفیقیدرس: طراحی الگوریتمها
Tower of hanoi برج هانوی
مساله برج هانوی یکی از مسائل تاریخی مشهور است که درمباحث طراحی الگوریتم نیز به آن پرداخته می شود. به شکل زیر توجه کنید:
سه میله- میله مبدا A, میله کمکی B و میله مقصد c – و تعدادی دیسک در میله مبدا داریم . هدف انتقال تمام دیسک ها از این میله به میله مقصد با رعایت دو شرط زیر است : در هر زماه فقط یک دیسک را می توان جابجا نمود. نباید در هیچ زمانی دیسکی بر روی دیسک با اندازه کوچکتر قرار بگیرد.
1) دیسک 1 را به میله B منتقل می کنیم)(BA:
2) دیسک 2 را به میله C منتقل می کنیم)(CA :
3) دیسک 1 را به میله C منتقل می کنیم)(CB :
حل بازگشتی مساله برج هانوی مرحله یک : n-1 دیسک بالایی میله مبدا با شرایط ذکر شده و به کمک میله C به میله B منتقل می شوند . مرحله دو : بزرگترین دیسک از میله مبدا به میله مقصد منتقل می شود. مرحله سه : n-1 دیسک میله B با کمک گرفتن از میله Aبه میله مقصد منتقل می شوند.
تابع بازگشتی زیر به زبان C++ ترتیب حرکت ها را چاپ می کند : Void hanoi(intnDisk, char start, char temp, char finish ) { If(nDisk== 1) { Cout<<start<<“-->”<<finish<<end; } Else { Hanoi(nDisk-1,start,finish,temp); Cout <<start<<“-->”<<finish<<end; Hanoi(nDisk-1,tempt,start,finish); } }
تحلیل پیچیدگی زمانی مساله برج هانوی T(n)=2T(n-1)+1 T(n) تعداد حرکت های لازم جهت انتقال n دیسک به مقصد T(n-1) حرکت برای انتقال n-1 دیسک به میله کمکی 1-T(n)=2ᴺ یک حرکت برای انتقال بزرگترین دیسک به میله مقصد O(2ᴺ) T(n-1) حرکت برای انتقال n-1 دیسک موجود در میله کمکی به میله مقصد
حل غیر بازگشتی مساله برج هانوی Void hanoi(intnDisk,charstart,chartemp,char finish) { Int max = nDisk; Char dest = finish; Int disk = max; While(true) { While(disk>0) {if(moving disk succeeds) { If(disk== max) { Max - - ;
If (max ==0) { Return; } } Dest=the final place of max ; } Else { Dest=the alternative place between dest and the current place of disk ; } Disk - - ; } P and q =the places different of dest ; Disk=the smaller of the disks on top of p and q ; Dest=the place between p and q with greater disk on top ;
بد نیست بدانید که : معمای حلقه های برج هانوی (Hanoi Tower) بنا بر افسانه ای، در محوطه معبدی در آسیای دور سه میله الماسی قرار داشت که یکی از آنها حاوی تعدادی قرص طلایی بود. کاهنان معبد در تلاش بودند تا قرصهای طلائی را از آن میله به یکی دیگر از میلهها تحت شرایطی انتقال دهند، و باور داشتند که با تمام شدن انتقال قرصها عمر جهان نیز به پایان خواهد رسید! میله اولیه ۶۴ قرص داشت، که بر روی هم به طور نزولی بر اساس اندازهشان چیده شدهبودند.از رابطه 2 n - 1 تعداد حداقل حرکت ممکن برای انتقال n حلقه بدست می آید. با توجه به رابطه فوق و تعداد حلقه های معبد کاهنان، رقمی به دست می آید که شاید بی دلیل نبود کاهنان باور داشتند با انتقال همه حلقه ها عمر جهان نیز به پایان خواهد رسید. این رقم به اندازه های بزرگ است که اگر فرض کنیم کاهنان آن معبد و همه نسل های بعدی آنها بی وقفه هر ثانیه 1 حلقه را انتقال دهند، با انجام تعداد حداقل 18446744073709551616 حرکت و پس از 585،000،000،000 (585 میلیارد) سال تمامی حلقه ها را می توانسنتد به ستون سوم انتقال دهند!