مرحباً بالخوارزميات › لقاء مع الخوارزميات 3 / 19 السابق التالي

الخوارزميات في كل مكان

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

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

المثال 1: البحث في القاموس. في القاموس الإنجليزي، تُرتَّب الكلمات ترتيباً أبجدياً. لنفترض أننا نبحث عن كلمة تبدأ بالحرف rr، فعادةً ما يتم ذلك بالطريقة التالية:

  1. افتح القاموس عند منتصفه تقريباً وتحقق من أول كلمة في تلك الصفحة؛ لنفترض أنها تبدأ بالحرف mm.
  2. بما أن rr يأتي بعد mm في الأبجدية، يمكن تجاهل النصف الأول وتضييق نطاق البحث إلى النصف الثاني.
  3. كرّر الخطوتين 1. و2. حتى تجد الصفحة التي تبدأ فيها الكلمة بالحرف rr.

البحث في القاموس، وهو مهارة أساسية لتلاميذ المدرسة الابتدائية، هو في الحقيقة خوارزمية "البحث الثنائي" (Binary Search) الشهيرة. من منظور بنية البيانات، يمكننا اعتبار القاموس "مصفوفة" مرتبة؛ ومن منظور الخوارزميات، يمكن النظر إلى سلسلة الإجراءات المتخذة للبحث عن كلمة في القاموس على أنها خوارزمية "البحث الثنائي".

المثال 2: ترتيب أوراق اللعب. عند لعب الورق، نحتاج إلى ترتيب الأوراق في أيدينا ترتيباً تصاعدياً، كما في العملية التالية.

  1. قسّم أوراق اللعب إلى قسمين "مرتّب" و"غير مرتّب"، بافتراض أن الورقة الواقعة في أقصى اليسار مرتّبة بالفعل في البداية.
  2. أخرج ورقة من القسم غير المرتّب وأدرجها في الموضع الصحيح في القسم المرتّب؛ بعد ذلك تصبح الورقتان في أقصى اليسار مرتّبتين.
  3. كرّر الخطوة 2 حتى تصبح جميع الأوراق مرتّبة.

عملية ترتيب مجموعة من أوراق اللعب

الطريقة المذكورة أعلاه لترتيب أوراق اللعب هي في جوهرها خوارزمية "الترتيب بالإدراج" (Insertion Sort)، وهي فعّالة جداً لمجموعات البيانات الصغيرة. وتستخدم تطبيقات الترتيب المدمجة في كثير من لغات البرمجة الترتيب بالإدراج داخلياً.

المثال 3: صرف الباقي. لنفترض عملية شراء بقيمة 6969 من متجر. إذا أعطيت أمين الصندوق 100100، فسيحتاج إلى إعطائك 3131 كباقٍ. ويمكن فهم هذه العملية بوضوح كما هو موضح في الشكل التالي.

  1. الفئات المتاحة الأصغر من 3131 هي 11 و55 و1010 و2020.
  2. خُذ أكبر فئة 2020 من بين الخيارات، فيتبقى 31−20=1131 - 20 = 11.
  3. خُذ أكبر فئة 1010 من الخيارات المتبقية، فيتبقى 11−10=111 - 10 = 1.
  4. خُذ أكبر فئة 11 من الخيارات المتبقية، فيتبقى 1−1=01 - 1 = 0.
  5. اكتمل صرف الباقي، والحل هو 20+10+1=3120 + 10 + 1 = 31.

عملية صرف الباقي

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

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

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