سنعيد كتابة العلم بأبجدية عربية

  • الرئيسية
  • الفئات
  • الباحثون السوريون TV
  • من نحن
  • اتصل بنا
  • About Us
x
جارِ تحميل الفئات

أبراج هانوي

المعلوماتية >>>> عام


تم حفظ حجم الخط المختار

يمكنك الاستماع للمقالة عوضاً عن القراءة

إذا كنتَ أحدَ طلابِ علومِ الحاسوب، فلا بد أنكَ سمعتَ بلعبةِ أبراج هانوي ضمن الفقرةِ أو المادةِ الخاصةِ بالخوارزميات العَوديةِ والتكرارية، وحتى إن لم تكن طالباً لعلوم الحاسوب سنتعرفُ أكثرَ في هذا المقال عن هذه الأحجية.
أبراج هانوي هي أحجيةٌ وضعها العالم لوكاس عام 1883 وتنصُّ على ما يلي:
لدينا عدد n من الأقراص، متوضعّةٌ على عمودٍ بترتيبٍ منتَظَمٍ بناءً على أحجامِها، بحيثُ يتوضّعُ القرصُ الأكبر في الأسفل والقرصُ الاًصغر في الأعلى، نريد نقلَ هذه الأقراص من العمود الموجودة فيه إلى عمودٍ آخرَ باستخدامِ عمودٍ ثالثٍ للمساعدَة، لكنْ ضمنَ شروطٍ محددةٍ تُقيدنا بنقلِ قرصٍ واحدٍ فقط في النقلةِ الواحدة إضافةً لعدمِ وجوبِ توضُّعِ أحدِ الأقراص فوق قرصٍ أصغرَ منه، أي يجبُ المحافظةُ على الترتيب حتى عند الحركات الوسيطة للنقل (باستخدام العمودِ الثالث).
لنرى كيفيةَ حلِّ هذه المسألة بشكلٍ عَودي، وسنسمّي الأعمدةَ الثلاثةَ بـ "أ وَ ب وَ ج" بحيث تتوضعً الأقراصُ على العمودِ أ، ويتوجّبُ نقلُها للعمود ب باستخدام العمود ج كوسيط.
سنبدأُ بالحالة القاعديّة والتي نفرضُ فيها وجودَ قرصٍ واحدٍ فقط، نستطيع دوماً نقلَ قرصٍ وحيدٍ من العمود أ إلى العمود ب أو من أيِّ عمودٍ إلى آخر، وذلك لتحقيقِه الشروطَ المناسبةَ للعبة.
وسيكون مبدأُ الحلِّ دوماً عند n قرص هو حلُّ المسألة لـ n-1 قرص، إذ يستدعي التابعُ نفسّه حتى الوصول للحالة القاعدية المعلومة.

حسناً، سننتقل الآن إلى قرصين، أي أصبح لدينا n=2، يمكننا القيام بالنقلِ عبر ثلاثِ خطوات:
1- نقومُ بنقل القرص الأول (الأصغر) من العمودِ أ إلى العمود ج
2- ننقل القرص الثاني إلى العمود ب.
3- ننقل القرص الأول من العمود ج إلى العمود ب.


Image: http://blog.hackerearth.com/2016/12/tower-of-hanoi-recursion-algorithm

عبر هذه الخطواتِ الثلاثةِ يمكننا نقلُ القرصين من أيِّ عمودٍ إلى آخرَ ضمن شروط الأُحجية مُتَّبعين نفس الخطوات، إذاً نستنتج أنّ الخطوات اللازمة لـ n=2 هي ثلاث خطوات.
ماذا عن ثلاثة أقراص؟
في هذه الحالة سنُعامل القرصين 1 و2 على أنّهما قرصٌ واحدٌ -لقد أثبتنا سابقاً أنّه بإمكاننا نقلُ القرصينِ من عمودٍ إلى آخرَ بحرّيّة- ونُعامل القرصَ 3 على أنه قرص آخر مستقل.
نقومُ بتقسيم المسألةِ إلى مسائلَ جزئيةٍ ثمَّ نقوم بحلِّ كُلٍّ منها على حِدة، أي نقوم بالحلِّ لـ n-1 (في هذه الحالة n=3)
وذلك بنقل القرصين 1 و2 إلى العمودِ الوسيط كما ذكرنا سابقاً باستخدام الخطوات الثلاثة، بعدها نقوم بنقل القرص 3 من العمود أ إلى العمود ب، ولإنهاءِ المسألةِ نقومُ بنقلِ القرصين 1 و2 من العمود ج إلى العمود ب -نُذكِّر بأنّنا أثبتْنا إمكانيةَ نقلِ أيِّ قرصينِ بثلاثِ خطواتٍ بحرِّيَّةٍ بين عمودين-.
نُلاحظ هنا أنَّ نقلَ الأقراصِ الثلاثةِ من عمودٍ إلى آخرَ هو عمليةٌ غيرُ مقيَّدة، أي أننا نستطيعُ النقلَ بحرِّيَّةٍ من أيِّ عمودٍ إلى آخر، وتتمُّ هذه العملية بسبعِ خطوات، ثلاثِ خطواتٍ لكلِّ عمليةِ نقلٍ للقرصين 1 و2، وعمليةِ نقلٍ للقرص 3.
وعند رفعِ عددَ الأقراص إلى أربعة، فإن طريقة الحل ستبقى نفسها إذ:
* نقومُ بحلِّ المسألة لثلاثةِ أقراصٍ بشكلٍ عَوديٍّ كما ذكرنا ونقلِ الأقراص من العمود الأول إلى العمود الوسيط.
* نقوم بنقلِ القرص الأكبر من العمود الأول إلى العمود النهائي.
* نقوم بتكرارِ عمليّةِ نقلِ الأقراص الثلاثة الأولى بشكلٍ عَوديٍّ وذلكَ من العمودِ الوسيط إلى العمود النّهائي.

وتكونُ الخطوات اللازمةُ لحلِّ المسألة من أجل n=4 تساوي 15 خطوة (7 خطواتٍ لنقل الأقراص الثلاثةِ في كلِّ مرة + خطوةُ نقلِ القرص الأكبر).
بدأتْ تتضح الآن معالمُ المسألة وطريقةُ الحل، فنستنتجُ أنَّ:
* طريقةَ الحلِّ لـ n قرصٍ تتمُّ بشكلٍ عَودي، إذ تكونُ الحالة القاعدية هي نقلةٌ واحدةٌ عندما n=1، وتتم بـ:
- حلِّ المسألة بشكلٍ عَوديٍّ لجميعِ الأقراص من 1 إلى القرص n-1 وذلك بنقلِها من العمود الأول أياً كان، إلى العمود الوسيط.
- نقلِ القرص الأكبر n من العمود الأول إلى العمود النّهائي.
- نقلِ الأقراص من 1 إلى n-1 من العمود الوسيط إلى العمود النّهائي.
* لحل المسألة من أجل n قرص، فإنَّ ذلك يتطلّبُ 2^n -1 خطوة، إذ رأينا أنَّ العلاقةَ محقّقةٌ من أجل قِيَم n=1،2،3،4.

تروي الأساطيرُ أنَّ بعض الناسكين في جبال آسيا يعتقدون أنَّ لحظةَ حلِّ هذه اللعبة من أجل n=64 قرصٍ هي لحظةُ نهاية العالم، إذاً فالناسكون وحسب روايتهم بحاجةِ 2^64 -1 خطوة (2 مرفوع الى القوة n-1 )، وباعتبار أنَّهم يقومون بخطوة كل ثانية وعلى مدار اليوم دون انقطاعٍ فإنَّ حلَّ هذه اللعبة سيتطلَّب منهم ما يُقارب 584 مليار سنة.

المصادر:
هنا
هنا
هنا

مواضيع مرتبطة إضافية

المزيد >


شارك

تفاصيل

26-01-2017
4084 | 13
البوست

المساهمون في الإعداد

إعداد: Mohammad Bozo
تدقيق علمي: Yamen Imad Nassif
تدقيق لغوي: Wasim Dimashky
تصميم الصورة: Kinan Alsakka
صوت: Ahmed Badee
نشر: Hashem Azzam

تابعنا على لينكد إن


من أعد المقال؟

Mohammad Bozo
Yamen Imad Nassif
Wasim Dimashky
Kinan Alsakka
Ahmed Badee
Hashem Azzam

مواضيع مرتبطة

14 أداة من غوغل لم تكن تعلم بها

ما الفرق بين البيانات و المعلومات؟

مرحلة الاختيار... محرك القرص الصلب أم محرك الحالة الثابتة أم الاثنين معًا؟!

كيف تعمل لغـــــات البرمجـــة؟

أشعّة EMR

تكنولوجيا BrainGate والتّحكم بالرّوبوتات عن طريق الأفكار

تقنيّة فيسبوك للبحث داخلَ محتوياتِ الصّور

ماهي تقنية الـASDL؟

البرمجيات مفتوحة المصدر ج2: وورد بريس

هل نستطيع تحقيق استدامة الحوسبة الفائقة؟

شركاؤنا

روابط مهمة

  • الشركاء التعليميون
  • حقوق الملكية
  • أسئلة مكررة
  • ميثاق الشرف
  • سياسة الكوكيز
  • شركاؤنا
  • دليل الشراكة
جميع الحقوق محفوظة لمبادرة "الباحثون السوريون" - 2023