خوارزمية بليدج

يعود أصل أسم الخورازميات Algorithm الي الرياضى العربي الأشهر محمد بن موسى الخوارزمي اللذي عاش فى بغداد قبل الف وماتئى عام تقريبا. وهي تقع فى قلب صناعة البرمجيات. فهي تشكل اللغة اللتى يتخاطب بها المبرمجون بين بعضهم البعض بغض النظر عن اللغة الفعلية الحية اللتى يتحدثون بها: سواء كانت أسبانية ام يابانية أم أي لغة أخرى. بل وحتى بغض النظر عن لغة البرمجة اللتى يستخدمونها سواء كانت جافا اوسي او أي لغة برمجة اخرى. لكن علينا ان نلاحظ ان لغة الخوارزميات تسير فى اتجاه واحد فقط: ممن يحمل المعلومة الى من يحتاجها. فهى توضح ببساطة الخطوات اللازمة لحل معضلة ما. فالخوارزمية عبارة عن سلسلة من الاوامر او النصائح او التعليمات لاتمام امر ما.

ويمكننا تشبيه الخوارزميات ببساطة بحالة الطلاب اللذين لم يذاكروا دروسهم طوال العام ثم يذهبون فى ليلة الأمتحان الى زميل لهم كان أكثر التزاما ثم يطلبون منه ان يدلهم علي طريقة حل الأسئلة! هنا  يحاول هذا الزميل أن يعطيهم طريقة الحل فى أقصر وأوضح صورة ممكنة . بل وحتى بدون الخلفية العلمية الكامنة وراء حل الاسئلة بهذه الصورة:  فقط خطوات التنفيذ فى أوضح وأقصر صورة.

كما أن الخوارزميات ليست بعيدة عن حياتنا اليومية العادية. فوصفات الطعام مثلا ليست الا خوارزميات فى ميدان المطبخ. مثال على ذلك خوارزمية عمل القهوة:
1 ضع كمية من الماء فى أبريق صغير
2 أضف ملعقة صغيرة من السكر الى الماء
3 قلب جيدا. وصغ الأبريق على نار هادئة
4 ضف ملعقة صغيرة ممتلأة من البن
5 حرك الماء حتى يبدأ الغليان
6 أرفع لأبريق من على النار وصب القهوة فى فنجان.

والأن دعونا نتخيل ان المطلوب منك ليس عمل فنجان قهوة ولكن تصميم روبوت أو انسان الي!. وعليك ان تذهب مع هذا الأنسان الألى بداخل متاهة ثم تتركه وحيدا. وعلى هذا الأنسان الألى ان يجد الطريق بمفرده خارج هذه المتاهة. وطبعا انت لك شركاء فى هذا المشروع. لكن مهمتك الأساسية هي ان تحدد الطريقة اللتى ينبغى ان يفكر بها ذلك الأنسان الالى حتى يخرج من تلك المتاهة!

وتخيل انك بعد ان وصلت الى قلب المتاهة انقطع النور وساد ظلام دامس وأصبحت لا تري شيئا. فكيف يمكنك انت ان تخرج من هذه المتاهة وانت لم تعد ترى شيئا ولا تتذكر كيف وصلت الى غياهبها .وكيف يمكنك ان تعطى وصفة الخروج للروبوت وانت نفسك لا تستطيع ان تخرج من وسط تلك المتاهة؟!. فكما نعلم  فأن فاقد الشئ لا يعطيه.

لكن لو كنت تعلم خوارزمية بليدج فسوف تخرج بأمان من هذه المتاهة فهى تعطينا الوصفة التي نتمكن بها من الخروج من أي متاهة وبدون ان نرى شيئا . لكن ذلك بعد تحقق شرطين.  الشرط الأول: ان يكون هناك مخرج فعلا من هذه المتاهة. والشرط الثاني: ان يكون كل طريق في هذه المتاهة يصلح للسير فى الأتجاهين ذهابا وأيابا وان طرقها ليست للسير فى أتجاه واحد فقط. اذن نأتى للسؤال كيف يمكننا ان نخرج من وسط متاهة ونحن لا نستطيع ان نرى شيئا؟ دعونا نلتمس الطريق من خارج هذه المتاهة.

الخروج من المتاهة

الخروج من المتاهة

نستطيع ان نسير للأمام كما فى الصورة الأولي لكن بعد أن نفرد ذراعنا امامنا حتى نقي أنفسنا خطر الاصطدام بحائط. ونظل نسير حتى نشعر بعائق امامنا. عندها نلتفت لجهة اليمين ونضع يدنا اليسري على الحائط. ثم نظل نسير بجوار الحائط ويدنا اليسرى تلامسه دوما ونغير اتجاهنا مع الحائط كلما لف حتى نصل فى النهاية الى فتحة الخروج.!

الدوران  حول عائق

الدوران حول عائق

لكن هذه الطريقة لن تنجح باستمرار كما فى تلك الصورة. فماذا لو صادفنا عمودا كبيرا؟ او جدرانا على هيئة مستطيل؟. في هذه الحالة سنبقى نلف وندور فى نفس الحلقة بدون أمل فى الفكاك من أسر تلك المتاهة.

دعونا نطور فى الطريقة السابقة. فنحن نشعر بانفسنا كلما غيرنا اتجاهنا. فدعونا نحاول ألا نعود ادراجنا أبدا. فاذا مثلنا انحرفنا يمينا ثم يسارا ثم يسارا فنحن نعود ادارجنا.  فاذا شعرنا اننا نسير فى أتجاه عكسي لاتجاه سلكناه قبلا وكانت هناك امكانية لمواصلة السير للامام  فدعونا نتخلى عن سياسة المشي بجوار الحائط ودعونا نواصل سيرنا للأمام حتى نصل الى حائط جديدا. عنده نتجه يمينا مرة أخري ونواصل سيرنا بجوار الحائط كما فى الرسم

الخروج

الخروج

لكن مرة اخرى هذا التطوير للفكرة لن ينجح في كافة الأحوال فهناك حالات سنظل نلف وندور فيهافي المكان بدون ان نستطيع أن نخرج.

pledge4

لكن هنا تأتى خوارزمية بليدج اللتى تنجح فى جميع الأحوال بشرط توفر الشروط السابق ذكرها. وقد تم برهنة ذلك رياضيا- فقط علينا ان ننتبه لالتفاتاتنا في كل مرة نغير فيها اتجاهنا. وكلما نلف باتجاه اليسار نزيد عدد اللفات واحدا. وكلما التفتنا لليمين ننقصها واحدا.  فتقول خوارزمية بليدج الأتي:

1 أعطي لنفسك في البداية  الرصيد صفر
2 كرر الخطوات التالية حتى تخرج من المتاهة:
2.1 سر للأمام حتى تصادف أول حائط
2.2 التفت لأتجاه اليمين وانقص من رصيدك واحد واجعل يدك اليسري تلامس الحائط
2.3 كرر الخطوات التالية حتى يصير رصيدك صفرا
2.3.1 سر بمحاذاة الحائط بحث تلامسه دائما يدك اليسرة وزد رصيدك واحدا كلما انحرفت يسارا وأنقصها واحدا كلما التفتت يمينا.

وهناك نقطة اخيرة مثيرة جدا لا يجوز أن أغفلها  وهى اللتى جعلتنى اكتب حول هذه الخوارزمية من الأساس. وهى ان مكتشف هذه الخوارزمية كان صبيا فى الثانية عشر من عمره اسمه جون بليدج  John Pledge ولذلك فهى تحمل أسمه.