freeCodeCamp/guide/arabic/algorithms/greedy-algorithms/index.md

11 KiB

title localeTitle
Greedy Algorithms خوارزميات الجشع

ما هي خوارزمية الجشع

يجب أن تكون قد سمعت عن الكثير من تقنيات تصميم الخوارزميات أثناء البحث في بعض المقالات هنا. البعض منهم:

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

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

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

تعريف رسمي

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

خوارزميات الجشع لها بعض المزايا والعيوب:

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

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

مشكلة جدولة الفواصل

دعونا الغوص في مشكلة مثيرة للاهتمام التي يمكن أن تواجهها في أي صناعة تقريبا أو أي مشية للحياة. بعض أمثلة المشكلة كالتالي:

  • يتم منحك مجموعة من جداول N من المحاضرات ليوم واحد في إحدى الجامعات. والجدول الزمني لمحاضرة محددة هو شكل ( وقت ، وقت f ) حيث يمثل وقت s وقت البدء لتلك المحاضرة وبالمثل يمثل الوقت f وقت الانتهاء. في ضوء قائمة جداول المحاضرات N ، نحتاج إلى اختيار الحد الأقصى من المحاضرات التي سيتم عقدها خلال اليوم بحيث لا تتداخل أي من المحاضرات مع بعضها البعض ، أي إذا تم تضمين محاضرتين Li و Lj في اختيارنا ثم وقت بدء j > = وقت الانتهاء من i أو العكس .

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

  • تتمثل الخطة في إرسال المتسابقين بطريقة متداخلة ، عبر القاعدة التالية: يجب على المتسابقين استخدام البركة الواحدة في كل مرة. بعبارة أخرى ، يتبارى أحد المتسابقين أول 20 لفة ، يخرج ، ويبدأ ركوب الدراجات.

  • وبمجرد خروج هذا الشخص الأول من البركة ، يبدأ متسابق ثان يسبح في اللفات العشرين. بمجرد أن يخرج أو يبدأ ركوب الدراجات ، يبدأ متسابق ثالث بالسباحة ، وهكذا.

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

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

مشكلة جدولة المحاضرة

دعونا ننظر إلى الطرق المختلفة لحل هذه المشكلة.

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

  2. أصغر فاصل زمني أولاً ، أي ينتهي بك الأمر إلى اختيار المحاضرات حسب فترتها الإجمالية التي لا finish time - start time . مرة أخرى ، هذا الحل غير صحيح. انظر إلى الحالة التالية. أقصر الفاصل الأول

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

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

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

  1. أقرب وقت للتنفيذ أولاً . هذا هو النهج الذي يمنحنا دائمًا أفضل الحلول لهذه المشكلة. لقد استمدنا الكثير من الأفكار من المقاربات السابقة وأخيرًا جاء هذا النهج. نقوم بتصنيف الفواصل حسب ترتيب متزايد لأوقات الانتهاء ثم نبدأ باختيار فترات من البداية. انظر إلى الرمز الزائف التالي لمزيد من الوضوح.
function interval_scheduling_problem(requests)
    schedule \gets \{\}
    while requests is not yet empty
        choose a request i_r \in requests that has the lowest finishing time
        schedule \gets schedule \cup \{i_r\}
        delete all requests in requests that are not compatible with i_r
    end
    return schedule
end

متى نستخدم خوارزميات الجشع

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

تساعدنا خوارزميات الجشع في حل الكثير من أنواع المشاكل المختلفة. ترقب البرامج التعليمية القادمة في كل واحدة منها.

  1. أقصر مسار مشكلة.
  2. مشكلة الحد الأدنى للشجرة الممتدة في الرسم البياني.
  3. مشكلة ترميز هوفمان.
  4. K مراكز مشكلة

معلومات اكثر:

مشاكل الجشع

مشاكل الجشع