المقالات العامة

ما هي الخوارزميات وما هي بعض الأمثلة العملية عليها ؟

ما هي الخوارزميات وما هي بعض الأمثلة العملية عليها ؟

ما هي الخوارزميات وما هي بعض الأمثلة العملية عليها ؟

ما هي الخوارزميات وما هي بعض الأمثلة العملية عليها ؟

ما هي الخوارزميات وما هي بعض الأمثلة العملية عليها ؟

ما هي الخوارزميات وما هي بعض الأمثلة العملية عليها ؟

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

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

بل أكثر من ذلك، فالخوارزميات قد تعني نجاح أو فشل شركة. هل سألت نفسك يومًا لماذا يستخدم الجميع جوجل للبحث ونادرًا ما يستخدم أحدهم مُحرك Bing مثلًا التابع لمايكروسوفت؟ ستقول لي سهة: لأن نتائج بحث جوجل أفضل وأكثر دقة. هذا صحيح لكن لماذا؟ لأن خوارزميات أرشفة المعلومات والبحث في جوجل التي تستطيع إعطاءك المعلومة المطلوبة بالضبط تفوقت على مثيلتها من مايكروسوفت، ولاحظ أننا نتحدث عن شركتين توظفان أفضل العقول وتمتلكان المليارات، لكن الأولى تفوقت على الثانية ليس بالحجم ولا بالتسويق حتى، بل بمفهوم رياضي بسيط يُعرَف بالخوارزميات. في الواقع تمتلك جوجل حوالي 92% من سوق البحث في حين تتشارك جميع محركات البحث الأخرى في العالم بقية النسبة!

بعد هذه المقدمة الطويلة: ما هي الخوارزمية وما أهمّيتها في علوم الحاسوب؟

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

هل تعلم أنك عند اتّباع الخطوات اللازمة لتحضير وصفة طعام، فأنت تتبع خوارزمية؟ فلو كنت تتبع وصفة لصناعة كعكة، سترى أن الخطوات تتضمن أشياء مثل:

  1. أضف الطحين
  2. أضف البيض
  3. أضف الماء
  4. اخلط المزيج
  5. ضع المزيج في الفرن

بالتأكيد ستبدأ من الخطوة رقم 1 وليس من الخطوة رقم 4 بالطبع!

كل خوارزمية يجب أن تمتلك ثلاثة أشياء كي نُطلِق عليها هذا الاسم: أن يكون لها مُدخلات inputs، أن يكون لها خَرج (نتيجة) output وأن يكون لها مجموعة من الخطوات التي يتم تنفيذها بالترتيب، أي العملية الفعلية process. في مثالنا أعلاه، المُدخلات هي المواد الأولية لصناعة الكعكة، والنتيجة التي نريدها هي الكعكة مُكتملةً ومخبوزةً، والعملية هي الخطوات المطلوبة للتنفيذ والتي يجب أن تتم بالترتيب.

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

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

حسنًا، مللنا من البيض والكعك، ما رأيك أن تُعطينا مثالًا واقعيًا لخوارزمية حقيقية من عالم البرمجة؟

حاضر كما تريد. لكن سنبدأ بشكلٍ بسيط. لنفترض أنك تريد كتابة برنامج لجمع رقمين. لغة البرمجة غير هامّة هنا لأنه من المفترض بالخوارزمية أن تكون قابلة للتطبيق في جميع لغات البرمجة، لهذا نكتب الخوارزمية بما يُعرَف بالكود المزيّف pseudocode. تذكّر أن الخوارزمية هي ليست أكثر من مجموعة من الخطوات لتنفيذ مهمة معينة، وبالنسبة لمثالنا يمكن كتابة الخوارزمية التالية

Step 1: Start
Step 2: Declare variables num1, num2 and sum.
Step 3: Read values num1 and num2.
Step 4: Add num1 and num2 and assign the result to sum.
sum←num1+num2
Step 5: Display sum
Step 6: Stop

قد تعتقد أن الكمبيوتر هو آلة ذكية تتمكنٍ بشكلٍ سحري من جمع الرقمين دون تفكير، لكن في الحقيقة حتى عملية بسيطة كهذه العملية يجب أن تقوم بتلقينها للكمبيوتر خطوة بخطوة وبالترتيب وإلا فهو لن يكون قادرًا على خدمتك! دعنا نشرح الخطوات أعلاه:

  1. إبدأ: مؤشر لنعرف أن عملية جديدة ستبدأ الآن
  2. عرّف المتحولات التالية: num1 و num2 و sum: أنت تعرف المتحوّلات بالطبع من خلال ما درسته في مادة الرياضيات بالمدرسة. نفس الفكرة موجودة في علوم الحاسوب، هنا قمنا بتعريف متحوّل لتخزين كل رقم من الرقمين، ومتحول ثالث sum سنضع فيه نتيجة عملية الجمع
  3. إقرأ القيم المخزنة في المتحولين num1 و num2
  4. إجمع قيم المتحولين num1 و num2 وقم بتعيين النتيجة إلى المتحول sum
  5. قم بعرض قيمة sum
  6. النهاية

هكذا نكتب أية خوارزمية، يجب أن تُخبر الكمبيوتر ما الذي يجب أن يفعله خطوةً بخطوة وبالتفصيل.

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

أرجوك، أعطِنا أمثلة أكثر إثارة من مُجرد الجمع والطرح

حسنًا، كما تريد. هل تساءلت يومًا كيف تستطيع مواقع حجز الطيران العثور على أرخص تذكرة لرحلتك القادمة؟ في الواقع هذا أعقد مما تتخيل، في الحقيقة هناك خوارزمية خاصّة لحل هذه المشكلة تُدعى Weighted Graph أو Shortest path problem دعنا ننظر معًا إلى الشكل التالي:

ما هي الخوارزميات وما هي بعض الأمثلة العملية عليها ؟

في هذا المخطط graph يتم تمثيل المدن بالدوائر الزرقاء ويُطلَق عليها اسم الُعقَد nodes، ولكل عقدة حافّة edge أو أكثر والممثلة هنا بالخطوط ما بين العقد! ولدينا أيضًا الوزن weight وهي في مثالنا تكلفة التذكرة. افترض أنك تريد السفر من سان فرانسيسكو إلى سنغافورة، ما هو أرخص مسار يجب أن تتخذه؟ هذا مثال على مشكلة يتم حلّها عبر الخوارزميات، كما يمكن أن تتخيل يوجد أكثر من طريقة لحل هذه الخوارزمية لكن الطريقة الأفضل هي تلك التي تُعطيك الحل بأسرع شكل ممكن.

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

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

هل هذا كل شيء؟

كلا بالطبع، هنالك الكثير مما يمكن الحديث عنه، فهناك طرق لقياس فاعلية الخوارزمية (مدة التنفيذ وكمية استهلاك الذاكرة). فلكل خوارزمية ما يُعرَف بالتعقيد الزمني Time complexity والتي تقيس مدى ازدياد الزمن اللازم لتنفيذ العملية بازدياد المُدخلات. مثلًا: قد تكون الخوارزمية أعلاه سريعة جدًا لو كان عدد المُدخلات (المدن) صغيرًا لكنها تصبح بطيئة جدًا مع زيادة العدد. هنالك وسائل رياضية لحساب كل ذلك لكن منعًا للإطالة سنترك ذلك الموضوع إلى مقال آخر.

المصدر

زر الذهاب إلى الأعلى