s_i
ووقت نهاية f_i
. إذا لم تتعارض الجداول الزمنية للنشاطين i
وj
، فإن الشرط s_i ≥ f_j
أو s_j ≥ f_i
يجب أن يتم استيفاء الكود>.
التالي، دعونا نلقي نظرة على كيفية عمل الخوارزمية الجشعة. تعتمد هذه الخوارزمية بشكل أساسي على مبدأ بسيط: اختر أفضل خيار متاح حاليًا في كل مرة. على وجه التحديد، نقوم بفرز الأحداث حسب وقت نهايتها ثم نختار الأحداث التي يمكن استغلالها بنجاح لتحقيق أقصى قدر من عدد الأحداث المشاركة.
في التطبيقات العملية، هذه الخوارزمية ليست فعالة للغاية فحسب، بل تضمن أيضًا الحل الأفضل للنشاط المحدد.
من أجل إثبات فعالية الخوارزمية الجشعة، قمنا بإجراء التحليل في شكل افتراضي. افترض أن هناك مجموعة حلول مثالية S = {1, 2, ... , n
، ونفترض أن الحل الأمثل A ⊆ S
لا يحتوي على الحل الأول نشاط. وبناءً على هذا الافتراض، يمكننا إنشاء مجموعة جديدة B = (A - {k}) ∪ {1}، والتي ستكون أيضًا الحل الأمثل.
لأنه من وجهة نظر رياضية، فإن إزالة نشاط وإضافة نشاط آخر لن يؤثر على طبيعة الأنشطة غير المتداخلة.
وهذا يعني أنه سواء كان خيار التحسين الأولي أو الخيار اللاحق، فإن الخوارزمية الجشعة يمكنها دائمًا الحفاظ على أفضلية نتائجها. تجعل هذه الخاصية الخوارزمية الجشعة جيدة بشكل خاص في حل مشاكل اختيار النشاط.
بالإضافة إلى مشكلة اختيار النشاط الأساسية، هناك أيضًا مشكلة اختيار النشاط المرجح، وهي نسخة أكثر تعقيدًا تتطلب النظر في كيفية اختيار مجموعة الأنشطة التي تحقق أقصى قدر من الوزن. في هذه الحالة، لا تعد الخوارزمية الجشعة هي الخيار الأفضل، وتكون هناك حاجة إلى تقنيات البرمجة الديناميكية للعثور على الحل الأمثل.
ملخصمن خلال المناقشة أعلاه، نفهم أن الخوارزمية الجشعة هي أداة فعالة لحل مشكلة اختيار النشاط. فهي تتبنى الاستراتيجية المثلى في كل خطوة من خطوات الاختيار لضمان أن يكون الحل النهائي هو الأفضل. ولكن كيف يمكننا تغيير تفكيرنا عندما نواجه مشاكل أكثر تعقيدًا، مثل اختيار النشاط المرجح؟