مساله برج هانوی یکی از مسائل جذاب، قدیمی و مشهور است که به یک مساله کلاسیک در علوم رایانه تبدیل شدهاست.
تاریخچه
در محوطه معبدی در آسیای دور سه میله الماسی قرار داشت که یکی از آنها حاوی تعدادی قرص طلایی بود. کاهنان معبد در تلاش بودند تا قرصهای طلائی را از آن میله به یکی دیگر از میلهها تحت شرایطی انتقال دهند، و باور داشتند که با تمام شدن انتقال قرصها عمر جهان نیز به پایان خواهد رسید! میله اولیه ۶۴ قرص داشت، که بر روی هم به طور نزولی بر اساس اندازهشان چیده شدهبودند. آنها اعتقاد دارند وقتی آخرین قرص را به میله سوم برسانند خود کاهنان میله ها و بطرو کلی جهان بیکباره خاکستر خوهد شد و همه چیز از بین خواهد رفت باصطلاح جهان به پایان می رسد
نمونهای از برج هانوی همانند شکل سه میله داریم. یکی از میلهها میله مبدا (A)، دیگری میله کمکی (B) و دیگری میله مقصد (C) است. هدف انتقال تمام دیسکها از میله مبدا به میله مقصد با رعایت شرایط زیر است:
در هر زمان فقط یک دیسک را میتوان جابجا نمود. نباید در هیچ زمانی دیسکی بر روی دیسک با اندازه کوچکتر قرار بگیرد.
حل مساله
هدف ما ارائه الگوریتمی است که کمترین توالی حرکتها را برای انتقال دیسکها به ما بدهد. مثلا اگر n=۲ باشد، توالی حرکت به صورت زیر است:
حل مساله برج هانویدیسک ۱ را به میله B منتقل میکنیم
دیسک ۲ را به میله C منتقل میکنیم
دیسک ۱ را به میله C منتقل میکنیم
حل مساله برج هانوی
توجه داشته باشید که بر اساس قانون اول نمیتوان به غیر از بالاترین دیسک هر میله، به دیسک دیگری از آن دسترسی پیدا کرد.
حال سوال این است که آیا این مساله به کمک تکنیک بازگشت قابل حل است؟ اصولا چه مسائلی را میتوان بازگشتی حل نمود؟
برای اینکه مسالهای بتواند با روش بازگشتی حل شود باید یک ویژگی اساسی داشته باشد. مساله اصلی (مسالهای که به ما داده میشود) قابل خرد شدن به زیر مسالههایی از همان نوع مساله اصلی باشد، به شرطی که اندازه زیر مسالههای ایجاد شده کمتر باشد. آنگاه میتوان امیدوار بود که آن را به طور بازگشتی حل کرد! این ویژگی در مورد مساله برج هانوی صدق میکند. ایده اصلی این است که توجهمان را به جای حرکت بالاترین دیسک، روی پایین ترین دیسک میله متمرکز کرده، و مراحل زیر را طی میکنیم:
n - ۱ دیسک بالایی را با شرایط ذکر شده و به کمک میله C به میله B منتقل میکنیم. بزرگترین دیسک را از میله مبدا به میله مقصد حرکت میدهیم. n - ۱ دیسک را که هم اکنون در میله B هستند با شرایط داده شده به میله مقصد انتقال میدهیم. میبینیم که توانستیم عملیات جابجا کردن n دیسک را به دو عملیات مشابه ولی با اندازه کمتر و یک عملیات ساده تقسیم کنیم. واضح است که جابجا کردن n - ۱ قرص راحتتر از جابجا نمودن n قرص است.
ترتیب فراخوانیها برای اجرا شدن دستوربرای مثال فراخوانی تابع به شکل ('hanoi(۳, ‘A’, ‘B’, ‘C مساله برج هانوی را با سه دیسک که در میله A قرار دارند و با کمک میله B به میله C منتقل خواهد شد، حل میکند.
درختی که ترتیب اجرای دستورها را نشان میدهدبرای این که به کاهنان کمک کنیم، باید دستور ('hanoi(۶۴, ‘A’, ‘B’, ‘C را اجرا کنیم. ولی چه زمانی طول میکشد تا این دستور اجرا شود؟ در حالت کلی میخواهیم بدانیم اگر تعداد دیسکها n باشد، کمترین تعداد حرکت برای جابجا نمودن دیسکها چقدر است؟
در ابتدا باید بررسی کنیم که آیا تابع بازگشتی فوق کمترین تعداد حرکت را چاپ میکند؟ جواب مثبت است. زیرا واضح است که برای جابجا کردن بزرگترین دیسک از پایین میله A، بقیه دیسکها باید در میله B باشند. فقط در این صورت این دیسک جابجا میشود. در فراخونیهای بعدی دیسک دوم از نظر بزرگی جابجا میشود و الی آخر. پس در این فراخوانیها جابجایی بیهودهای صورت نمیگیرد. همچنین توالی حرکتها برای هر n منحصر بفرد است. یعنی برای یک n دو توالی متمایز از جابجاییها وجود ندارد که تعداد جابجایی آنها کمتر یا مساوی این حالت باشد.
اگر فرض کنیم کاهنان با سرعت عمل زیاد توانسته باشند به صورت شبانه روزی و نسل به نسل در هر دو ثانیه یک قرص را جابجا کنند، برای انتقال تمامی ۶۴ قرص به میله مقصد، در حدود ۱٫۱۶۹ ترلیون (میلیون میلیون) سال زمان لازم دارند!
در واقع ما از روش Divide and Conquer یا حل و تقسیم برای ارائه راه حل استفاده نمودهایم. اما چون در تقسیم مساله اصلی به دو زیر مساله، اندازه ورودیهای زیر مسالهها نزدیک به اندازه ورودی اصلی هستند، کارایی الگوریتم مطلوب نیست.
برج هانوی - نظر شما چیه
-
عضویت : سهشنبه ۱۳۸۸/۶/۳ - ۱۶:۰۱
پست: 379-
سپاس: 13
Re: برج هانوی - نظر شما چیه
خیلی ممنون که این مقاله رو گذاشتی
من باورش دارم ولی اینکه وقتی تموم بشه و اونم اشتباه نکنیم دنیا تموم میشه بنظر من بدلیل بزرگی مقدار زمان انجام دادنش رو نشون میده و چیزی جز غلو نیست
این عدد همون در داستان خواسته ی مخترع شطرنج از پادشاه هم اومده.
من باورش دارم ولی اینکه وقتی تموم بشه و اونم اشتباه نکنیم دنیا تموم میشه بنظر من بدلیل بزرگی مقدار زمان انجام دادنش رو نشون میده و چیزی جز غلو نیست
این عدد همون در داستان خواسته ی مخترع شطرنج از پادشاه هم اومده.