الخوارزميَّاتُ
لا بدّ وان سبق لك بأخذ مسؤولية تنفيذ أمر من قبل أحد والديك، مثل توصيل شيء الى مكان،رعاية أحد الاخوة الصغار،وغيره من الأمور.
وعند قيام الوالد أو الوالدة بإعطاء هذه المسؤولية،فإنه يقوم بإعطاء مجموعة من الأوامر والتعليمات والخطوات التي يجب عليك القيام بها لغايات تنفيذ هذه المهمة.
إنّ هذه المجموعة من التعليمات التي سوف تقوم بها على شكل خطوات مرتبة ومتتالية تعتبر مثالاً على ما يسمى بالخوارزمية.
إذن، ما هي الخوارزمية؟
الخوارزميّةُ : هي مجموعةٌ منَ التعليماتِ أوِ الخطواتِ المنطقيَّةِ والمنظَّمةِ التي تُحدِّدُ كيفيَّةَ حلِّ مشكلةٍ معيَّنةٍ أوْ إنجازِ مهمةٍ محدَّدةٍ. وتعتبر جزءاً أساسياً من عالم البرمجة الحاسوبية،حيث يتم استخدامها للقيام بعمليات عديدة مثل البحث في قواعد البيانات أو إجراء الحسابات.
سميت الخوارزمية بهذا الاسم نسبة إلى عالم الرياضيات المسلم أبو جعفر محمد بن موسى الخوارزمي الذي ابتكرها في القرن التاسع الميلادي.
وبما انها تعمل على حل مشكلة،إذن لا بدّ من وجود معطيات لهذه المشكلة ومن ثم إجراءات للعمل على حلها، وأخيرا ظهور الحل لهذه المشكلة.
إنّ معطيات المشكلة تمثل ما يسمى بالمدخلات
وإجراءات العمل لحلها تمثل مجموعة القواعد والتعليمات
وظهور الحل يمثل المخرجات
وعليه يمكننا تمثيل مفهوم الخوارزمية على الشكل التالي:
أهميةُ الخوارزميّةِ
تكمن أهمية الخوارزمية في مقدرتها على تقديم حلول بشكل منهجي للمشكلات ،مما يساهم في تحسين العمليات في العديد من المجالات. ومن الأمور التي تبرز فيها أهمية الخوارزميات نذكر منها مايلي:
العلاقة بين الخوارزمية والبرنامج الحاسوبي
الخوارزمية هي فكرة مفاهيمية، والبرنامج هو تجسيد ملموس للخوارزمية، حيث تعتبر الخوارزمية جزء لا يتجزأ من البرنامج وتمثل المرحلة الأولى من مراحل البرمجة ، ثم تأتي الخطوة التالية وهي كتابة الكود البرمجي.
من هنا نرى أن الخوارزمية والبرنامج مصطلحان مرتبطان ببعضها البعض إلا انهما مختلفان حيث:
تمثل الخوارزمية مجموعة التعليمات المتسلسلة والمنظمة بشكل منطقي وتكتب بلغة الإنسان لغايات تقديم حل لمشكلة .
ويمثل البرنامج التطبيق العملي لما تم كتابته من تعليمات داخل الخوارزمية باستخدام إحدى لغات البرمجة مثل سكراتش ، بايثون ،جافا، وغيرهما من لغات البرمجة.
خطوات كتابةُ الخوارزميّاتِ وتطويرُها
اليوم،ومن خلال درسنا هذا،سنتحدث عن المراحل الثلاث الأولى من خطوات كتابة الخوارزميات ثم سوف نستكمل الحديث عن باقي الخطوات في الدروس اللاحقة.
الخطوةُ الأولى: تحديدُ المشكلةِ (Defining the Problem)
هي الخطوة التي يتم من خلالها القيام بكل مما يلي:
- تحديد المفاهيم الخاصة بالمهمة أو المشكلة ،بحيث يكون الشخص على دراية كاملة بكل جوانب المشكلة للتأكد من فهما بالكامل.
- تحديد الهدف الذي من أجله سوف نستخدم هذه الخوارزمية.
- استخدام طريقة واضحة وموحدة لوصف المشكلة،حتى يستطيع أي شخص يقرأ الخوارزمية يفهم ماهيتها.
- تحديد المدخلات والمخرجات المتوقعة بكل دقة ووضوح لأنها ستمثل المتغيرات التي سوف نتعامل معها عند كتابة البرنامج.
- التأكد من أن تكون الخطوات التالية منظمة وفعالة ومرتبطة بالهدف لتوفير الوقت والجهد وضمان فعالية الخوارزمية.
يمكن ان نلخص الخطوة الاولى في كتابة الخوارزمية من خلال الإجابة على الأسئلة التالية:
مثال(1)
قامت والدتك بتوكيل مهمة لك عبارة عن مساعدة اختك الصغيرة في حل مسألة حسابية تتكون من ثلاثة أرقام.
لنفترض انّ هذه المهمة هي مشكلة لدى أختك الصغيرة وتود أن تساعدها في حلها، كيف لك ان تجيب عن الأسئلة التي في الأعلى لتحديد المشكلة؟
حل المثال(1)
السؤال الأول: ما مدخلاتُ الخوارزميّةِ؟
الإجابة: المعلومات التي أحتاج ان أعرفها من المستخدم (والمستخدم هنا أختك)، وأنت تحتاج أن تعرف منها الأرقام التي تريد أن تجمعها.
السؤال الثاني: ما هي مخرجات الخوارزمية؟
الإجابة: المعلومات التي تحتاج أختك أن تراها بعد حل المسألة، وهنا تمثل مجموع الأرقام الثلاثة
السؤال الثالث: ما الخطواتُ الرئيسةُ المطلوبةُ لحلِّ هذهِ المشكلةِ؟
الإجابة:
1.إدخال الأرقام الثلاثة من المستخدم (أي انك تأخذ من أختك الارقام الثلاثة وتدخلها في دفتر،آله حاسبة،في ذهنك...)
2.تقوم بعملية جمع الأرقام الثلاثة
3.تقوم بعرض الناتج (المجموع) على اختك إما شفهياً أو كتابياً.
السؤال الرابع: ما ترتيب هذه الخطوات؟
الاجابة:
1.الحصول على الأرقام الثلاثة
2.تنفيذ عملية الجمع
3.عرض النتيجة النهائية
السؤال الخامس: هل هناك قرار يجب اتخاذه عند معالجة المعلومات؟ أم هل هناك شرط يجب تنفيذه؟
الاجابة: لا يوجد شروط او قرارات،فقط التأكد من إعطائي الأرقام الثلاثة المراد جمعها بشكل صحيح.
السؤال السادس: هلْ هناكَ تعليماتٌ بحاجةٍ لأنَّ أكررَها مراتٍ عدةً؟
الاجابة: لا،لان المطلوب هنا فقط جمع ثلاثة أرقام مرة واحدة.
والان لنطبق الشكل الذي يوضح مفهوم الخوارزمية على مثالنا:
مفهوم الخوارزمية العام:
شكل الخوارزمية حسب المثال السابق:
كيف نحكم على الخوارزمية إن كانت صحيحة أم لا؟
يوجد طريقتان كي نحدد أن الخوارزمية تعمل بشكل صحيح أم لا، هما:
الطريقة الأولى: مخرجات صحيحة
إذا قامت الخوارزمية بإعطائنا مخرجات صحيحة حسب المدخلات والمحددات الظاهرة في المشكلة.على سبيل المثال:
لنفترض انّ المشكلة لدينا هي "تحضير فطيرة التفاح "
ما هو الحكم على أننا قمنا باتباع خوارزمية صحيحة عند التفكير في آلية تحضير فطيرة التفاح؟
الجواب: الحصول على فطيرة تفاح ناضجة
إذن عدم الحصول على فطيرة ناضجة يعني أنّ الخوارزمية لم تقم بعملها بالشكل الصحيحة،وأنها غير صحيحة ويجب مراجعة خطواتها لمعرفة أين حصل الخطأ.
الطريقة الثانية: حل المشكلة
حتى نتأكد بأن الخوارزمية تعمل بشكل صحيح،لا بد من أن تقوم الخوارزمية بحل المشكلة نفسها وليس إستبدالها. على سبيل المثال:
أراد والدك منك أن تقوم بكتابة خوارزمية لصناعة كرسي من خلال الإستفادة من مجموعة من الادوات الموجودة في البيت(خشب،مسامير،منشار، ...).
قمت بكتابة خوارزمية أحد خطواتها: التخلص من جميع الادوات وشراء كرسي جاهز
إنّ الخوارزمية التي قمت بكتبتها خوارزمية صحيحة من الناحية التقنية(كخطوات)
إلا أنها لم تقم بحل المشكلة الفعلية ،إذن الخوارزمية ليست فعالة ولا يمكن أن نعتبرها صحيحة لحل المشكلة التي لدينا.
شروطُ كتابةِ الخوارزميّاِت
عند كتابة الخوارزمية لا بد من مراعاة الشروط التالية:
وفيما يلي توضيح لكل شرط من الشروط السابقة:
1.وضوحُ المشكلةِ والمدخلاتِ والمخرجاتِ:
- أن يكون وصف المشكلة واضحاً وليس هناك أي شيء فيه غموض أو التباس.
- أن يقوم هذا الوصف بتحديد ما هو المطلوب بشكل دقيق.
- التأكد من ان خطوات الحل فعالة ومنطقية وسوف تعطي نتائج صحيحة.
2. ان تحتوي على عدد محدود من الخطوات
- أن تكون خطوات الخوارزمية قابلة للتنفيذ خلال فترة زمنية تتناسب وحجم المشكلة.
- أن لا تكون الخطوات لانهاية لها أو تكرار الخطوات بشكل لا ينتهي.
3. وضوح الخطوات
- أن تكون كل خطوة مفهومة ومحددة بشكل دقيق
- أن لا تكون الخطوة قابلة للتفسير بأكثر من إحتمال.
4. قابيلة تنفيذها باستخدام الحاسوب
- ان تكون كل خطوة في الخوارزمية قابلة للتحويل الى كود بإحدى لغات البرمجة
- ان تكون كل عملية (مثل التكرار) محدودة بعدد معين حتى يستطيع الحاسوب تنفيذها
- ان يتم تقسيم العمليات غير القابلة للتنفيذ الى خطوات قابلة للتطبيق.
دعنا الآن نقوم بتطبيق مثال واقعي لكتابة خوارزمية نراعي فيها الشروط السابقة:
لنكتب خوارزمية تقوم بحساب بإيجاد الوسط الحسابي للأعداد من 1 الى 50.
لنطبق الشروط السابقة:
1.وضوحُ المشكلةِ والمدخلاتِ والمخرجاتِ: نعم المشكلة واضحة،وهي إيجاد المتوسط الحسابي للأعداد من 1 الى 50 والمدخلات تم تحديدها وهي الأعداد (1-50) والمخرجات تم تحديدها وهي المتوسط الحسابي للأعداد (1-50).
2. ان تحتوي على عدد محدود من الخطوات:نعم،الخطوات محدودة ومنتهية،فهنا نريد أن نجمع الأعداد من (1-50) ثم نقسمهم على عدد الأعداد التي لدينا من خلال صيغة رياضية يتم استخدامها لإيجاد المجموع والمتوسط الحسابي.
3. وضوح الخطوات: الخطوات لدينا واضحة، لأن المعيطات للمشكلة واضحة من خلال معرفة المدخلات (الأعداد من 1-50) والمخرجات (المتوسط الحسابي للأعداد من 1-50).
4. قابيلة تنفيذها باستخدام الحاسوب:الخطوات واضحة ومحددة ويمكن تنفيذها باستخدام إحدى لغات الحاسوب .
الخطوةُ الثانيةُ: تجزئةُ المشكلاتِ وتبسيطُها
عند القيام بالتفكير بحل مشكلة معينة من خلال كتابة خوارزمية لها،لا بد من النظر الى هذه المشكلةمن حيث مدى حجمها ومدى تعقيدها لغاية معرفة آلية التعامل معها.
ان تجزئة المشكلات وتبسيطها هي تقنية أساسية في عملية تصميم الخوارزميات،حيث من خلالها يتم العمل على تقسيم المشكلة الى أجزاء أصغر وأكثر قابلية للفهم . وهذه الطريقة تساعد في:
1.التركيز على حل المشكلات الفرعية الصغيرة. ومن ثن الخروج بحل المشكلة الكاملة
2.تنظيم الأفكار
3.تضمن التعامل مع كل عنصر من عناصر المشكلة بشكل فعال وكفاءة عالية.
وكي نفهم هذه الخطوة،دعنا نطبق هذا المثال:
مثال
تم الإعلان من خلال الإذاعة المدرسة عن مسابقة لكتابة قصة ، كيف لنا ان نقوم بحل هذه المشكلة من خلال تجزئتها؟
إن كل قصة لها مجموعة من العناصر،ولغاية تبسيط عملية كتابة القصة،لا بد من تقسيمها الى مجموعة من العناصر ومن ثم كتابة كل جزء على حدا.
عناصر كتابة القصة:
1.تحديد الفكرة العامة من القصة
2.تحديد الشخصيات الرئيسة في القصة ووصفها
3.تحديد مكان حدوث القصة والزمن التي تحدث فيه.
4.كتابة مقدمة القصة
5.سرد احداث القصة
6.كتابة نهاية القصة.
إن تحديد الخطوات السابقة وتقسيم العملية الى هذه الخطوات جعل عملية كتابة القصة أسهل وأكثر تنظيما .
إلا أن التقسيم السابق ممكن أن يقوم شخص آخر بإعادة كتابته بطريقة أخرى، ولا يمكننا أن ندّعي بان هناك حل واحد هو الأفضل دائما، لأن الامر يعتمد على السياق ومستوى التفصيل المطلوب وأن تكون الخوارزمية مفهومة وتحقق الهدف.
وعند تصميم الخوارزمية يجب الانتباه الى الفئة المستهدفة ، اي الشخص الذي سوف سوف تُستخدم له الخوارزمية. حيث هناك نوعان منهم:
وحتى نفهم هذا الامر،دعني أطرح المثال التالي:
في كل يوم ،عند الذهاب الى المدرسة،لا بدّ من القيام بمجموعة من المهام(الروتين الصباحي)، وتعتبر هذه مشكلة لدى الامهات ، لذا تقوم الامهات بتوجيه الخطوات للأبناء على النحو التالي:
اذا كان الطالب من صفوف المرحلة (الاول الى الرابع)،تقوم الام بتجزئة كل مهمة من المهمات الى خطوات تفصيلية، فمثلا مهمة إرتداء الملابس، تقوم الام بتوجيهها الى الطفل كما يلي:
- قم بإرتداء الزي المدرسي
- قم بإرتداء الجوارب
- قم بإرتداء الحذاء
وهذا ما يطلق عليه ب "مستوى التفصيل العالي".
أما بالنسبة لطالب في المرحلة الأساسية العليا، سبق له وتعلم كيفية إرتداء الملابس، كل ما على الام أن توجه له أمر " قم بإرتداء الملابسّ" دون الحاجة الى إعطاء تفصيل أكثر.
وهذا ما يطلق عليه "مستوى التفصيل المنخفض"
الخطوةُ الثالثةُ: تصميمُ خطواتِ الخوارزميّةِ (مسار التحكُمِ Control Flow-)
يقصد بتصميم خطوات الخوارزمية او ما يتم تسميته بـ (مسار التحكم في الخوارزمية):الطريقة والترتيب الذي سوف يتم من خلاله تنفيذ الخطوات بشكل منطقي ومتسلسل لضمان الوصول الى الحل المطلوب.والذي من خلاله ايضا يتم التحكم في تتابع الخطوات واتخاذ القرار المناسب اعتمادا على المدخلات والشروط الواجب تحققها لمتابعة العملية.
ويشمل مسار التحكم ثلاثة عناصر أساسية:
مثال:لنرى كيفية تطبيق هذه العناصر عند كتابة خوارزمية تحضير الشاي ل خمسة أشخاص:
التتابع:ويقصد به تنفيذ خطوات الخوارزمية بشكل متسلسل ومتتالي خطوة تلو الاخرى كما تم كتابتها.
عند تحضير الشاي:
يجب وضع الماء بالابريق
ثم غلي الماء
اضافة كيس الشاي في الكوب
صب الماء في الكوب
الاختيار:ويقصد به أن اتختذ القرار لمتابعة العمل، ويكون القرار يعتمد على شرط معين، بحيث اذا تم تحقيق الشرط، يمكن المضي قدما ومتابعة العمل وتنفيذ الخطوة التالية.
وهنا ياتي السؤال:
هل يريد الشخص السكر مع الشاي؟
اذا كانت الاجابة نعم
يتم اضافة السكر الى الكوب
واذا لم يتحقق الشرط:
يتم تخطي الخطوة التالية واختيار خطوة بديلة (في حال عدم رغبته باضافة السكر)
التكرار : ويقصد به القيام بعملية تنفيذ مجموعة من الخطوات الى أن يتم تحقق شرط معين
بعد أن نكون أنهينا العملية لأول شخص، لا نكون قد انتهينا من حل المشكلة، لأن المطلوب هنا تحضير الشاي ل خمسة أشخاص.
اذن يتوجب علينا إعادة تنفيذ الخطوات السابقة 4 مرات أخرى حتي يحصل الاشخاص الخمسة على الشاي.