تحليل وتصميم الخوارزميات: فهم المبادئ والأساليب الأساسية

ما هي الخوارزمية؟

تاريخياً، كانت تُسمى جداول الضرب والقسمة بالخوارزميات. ومع تطور الحضارات واختراع الحواسيب، أصبح مفهوم الخوارزمية مرتبطًا ارتباطًا وثيقًا بتلك الأجهزة. اليوم، يُعرف المفهوم بأنه مجموعة من الخطوات التي يمكن اتباعها للوصول إلى حل معين؛ حيث تتعامل الخوارزمية مع المعطيات والمعلومات. يجب ملاحظة أن هذه المعلومات لا تقتصر فقط على الأرقام، بل تشمل أيضًا الرسومات والنصوص والصوتيات والصور. بمعنى آخر، يمكن اعتباره قائمة من القواعد والتعليمات المتبعة لحل مشكلة معينة. ومن المهم جداً ترتيب وتنظيم هذه التعليمات؛ لأنه لا يمكن الوصول إلى الحل المنشود إلا من خلال اتباع الخطوات بالتسلسل المحدد، كما أنه لا يُسمح بتكرار أو تجاهل أي خطوة من الخطوات.

أول من قام بتطوير مفهوم الخوارزميات هو عالم الرياضيات المسلم الشهير محمد بن موسى الخوارزمي، الذي عاش في بغداد بين عامي 780-847م، وكان ذلك في فترة حكم الخليفة المأمون. برع الخوارزمي في مجالات الرياضيات والفلك، ومن أبرز إنجازاته في الرياضيات هو وضعه لمبادئ علم الجبر، وكتابه المعروف باسم “الجبر والمقابلة”، والتي استُمدت منها كلمة “الجبر” التي تُرجمت إلى العديد من اللغات حول العالم. كما قام بتأليف كتاب آخر حول الحساب، الذي نُقل إلى اللاتينية تحت عنوان “Algoritmi de nemero lndriun”.

متطلبات الخوارزمية

تتطلب الخوارزمية توافر بعض الشروط المهمة، وهي:

  • المدخلات: يجب أن تحتوي الخوارزمية على صفر أو أكثر من المدخلات.
  • المخرجات: يُشترط أن تكون هناك مخرج واحد على الأقل.
  • وضوح الخطوات: يجب أن تكون الخطوات واضحة وغير غامضة، فمثلاً جملة مثل (أضف 6 أو 7 إلى x) غير واضحة ولا تلبي شروط الخوارزمية.
  • المحدودية: يجب أن يتم معالجة كل خطوة ضمن نطاق زمني معين، على سبيل المثال، العبارة (قسّم الرقم 10 على الرقم 3 بدقة عالية) غير منتهية، وبالتالي فهي لا تفي بشروط الخوارزمية.
  • إمكانية الحل: يجب أن تكون كل خطوة قابلة للتنفيذ، على سبيل المثال، العبارة (3/0) لا تُعد قابلة للحل لأنها تمثل قيمة غير معرّفة.

تحليل الخوارزمية

يتعامل تحليل الخوارزمية (بالإنجليزية: Algorithm Analysis) مع تقييم كفاءة وجودة الخوارزمية وتطويرها، ويتم قياس هذه الكفاءة باستخدام مقياسين رئيسيين:

  • مقياس تعقيد الذاكرة (Space Complexity): يمثل حجم الذاكرة المطلوب من البرنامج منذ بداية تشغيله وحتى إتمامه. وينقسم إلى قسمين:
    • قسم ثابت: الذي يخصص للمتغيرات البسيطة والمركبة والثوابت والتعليمات.
    • قسم متغير: الذي يتكون من المساحة التي يحتاجها البرنامج بناءً على المتغيرات المركبة، حيث يعتمد حجمها على المشكلة المراد حلها.
  • تعقيد الزمن (Time Complexity): يمثل الزمن اللازم لإنشاء البرنامج حتى الانتهاء منه، ويُعبر عنه كالتالي: (T(P) = Const + tp)

حيث يُشير الرمز (tp) إلى الوقت اللازم لتشغيل البرنامج، بينما (Const) هو ثابت زمن التكوين.

تصميم الخوارزمية

المخططات

المخطط (بالإنجليزية: Graph) يُعرف بأنه مجموعة من العناصر تتضمن الرؤوس (بالإنجليزية: Vertices)، والتي ترتبط ببعضها البعض بعلاقات تُسمى الحواف (بالإنجليزية: Edges). تُقسم المخططات إلى ثلاثة أنواع رئيسية هي:

  • المخطط غير الموجه: يتميز بأن عناصره مرتبطة بطريقة غير منظمة، مما يجعل الاتجاهات غير مهمة.
  • المخطط الموجه: حيث تُرتب عناصره ضمن نمط معين، وتعتبر الاتجاهات (الأسهم) ضرورية.
  • المخطط المختلط: يجمع بين النوعين السابقين، حيث تحتوي بعض العناصر على علاقات موجهة والبعض الآخر غير موجهة.

المسار

المسار يُشير إلى مجموعة من الخطوط المستقيمة التي تصل بين نقطتين في المخطط، ومن المهم أن يتم ذكر أن المسار لا يُكتب ضمن أقواس المجموعة. ويُحسب طول المسار بناءً على عدد الخطوط التي تصل بين كل نقطتين، مع الأخذ في الاعتبار إمكانية وجود مسارات متعددة بين النقاط في المخططات الموجهة.

المخطط المتصل وغير المتصل

المخطط المتصل يتضمن مسارات بين كل نقطتين، بينما المخطط غير المتصل يحتوي على عناصر منفصلة وغير مرتبطة.

طريقة الجموح

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

  • دالة الهدف (بالإنجليزية: Objective Function) التي تعكس الحل في ضوء قيود معينة، وأفضل الحلول تُسمى بالحلاً الأفضل.
  • مجموعة القيود (بالإنجليزية: Constraints) تُعرف بأن الحَل الذي يحقق أفضل دالة هدف هو الحل الأمثل.

طرق كتابة الخوارزمية

تُكتب الخوارزمية بعدة صيغ، وتختلف هذه الأساليب من حيث سهولة الفهم والدقة. من بين هذه الطرق المهمة:

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

الحل:

1. البداية.
2. النهوض من الفراش.
3. خلع ملابس النوم.
4. الاستحمام.
5. تجفيف الجسم.
6. ارتداء الملابس النظيفة.
7. تناول وجبة الإفطار.
8. الذهاب إلى العمل.
9. النهاية.

يتضح من المثال أن ترتيب الخطوات وعدم تجاوز أي منها يعد أمرًا جوهريًا لتنفيذ الخوارزمية بنجاح.

  • الصياغة باستخدام رموز خاصة: تعتمد هذه الطريقة على مبادئ رياضية وتتضمن استخدام لغات البرمجة، مثل ++C، والترميز الرياضي.
  • الترميز البياني: يُنفذ هذا الأسلوب باستخدام أشكال هندسية، وتعتبر المخططات الانسيابية الأكثر استخدامًا في تصميم الخوارزميات.

الفرق بين الخوارزمية والبرنامج

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

البرنامج = خوارزمية + هيكل بياني لتنظيم البيانات.

يمر البرنامج بمجموعة من الخطوات، وهي:

  • تحديد المتطلبات: عن طريق توضيح المدخلات والمخرجات.
  • التصميم: يتم فيه تحديد العمليات الرئيسية المتعلقة بكل هيكل بياني مع الافتراض بوجود أجهزة ستعالج تلك العمليات.
  • التحليل: يتم فيه مقارنة الخوارزميات المفيدة لاختيار الأفضل بناءً على معايير محددة، مما يساهم في تصحيح الأخطاء بفضل تعقيد الذاكرة. بينما التحسين يُركز على معالجة المشاكل بناءً على النتائج النهائية.
  • التشفير: يتضمن تحديد التمثيل البياني والعمليات اللازمة، يلي ذلك كتابة كل عملية وتكوين نسخة كاملة للبرنامج.
  • التأكد من الصحة: تضم هذه الخطوة ثلاث جوانب:
    • التحقق من الصحة: يجب التأكد من صحة البرنامج قبل استخدامه.
    • الاختبار: يتم فيه توليد نماذج بيانية للكشف عن الأخطاء إن وُجدت.
    • تشخيص الأخطاء: يُنظم هذه العملية من خلال تحديد مواقع الأخطاء وتصحيحها بطرق مناسبة.
Scroll to Top