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

ملخص

مراجعة النقاط الرئيسية

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

أسئلة وأجوبة

س: بصفتي مبرمجاً، لم أستخدم الخوارزميات يوماً لحل مسائل في عملي اليومي. فالخوارزميات الشائعة صارت مغلّفة في لغات البرمجة ويمكن استخدامها مباشرة. فهل يعني هذا أن مسائل عملنا لم تبلغ بعد المستوى الذي تحتاج فيه إلى الخوارزميات؟

إذا شبهنا مهارات العمل المحددة بـ«التقنيات» في الفنون القتالية، فإن المواد الأساسية أقرب إلى «المهارات الداخلية».

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

  • إذا لم ندرس بنى البيانات والخوارزميات، فقد نغذّي ببساطة أي بيانات معطاة إلى دالة الترتيب هذه. فتعمل بسلاسة وبأداء جيد، ولا يبدو أن هناك أي مشكلة.
  • لكن إذا درسنا الخوارزميات، فسنعرف أن التعقيد الزمني لدالة الترتيب المدمجة هو O(nlog⁡n)O(n \log n). غير أنه إذا كانت البيانات المعطاة أعداداً صحيحة بعدد ثابت من الخانات (مثل أرقام الطلاب)، فيمكننا استخدام «الترتيب الجذري» الأكثر كفاءة، مقلّلين التعقيد الزمني إلى O(nk)O(nk)، حيث kk عدد الخانات. وعندما يكون حجم البيانات كبيراً جداً، يمكن للزمن الموفَّر أن يخلق قيمة كبيرة (خفض التكاليف، وتحسين التجربة، وما إلى ذلك).

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