اختيار الأنشطة حسب أقرب وقت انتهاء
جدولة أكبر عدد من الأحداث غير المتداخلة
اختيار الأنشطة حسب أقرب وقت انتهاء درس مجاني في Competitive Programming Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Competitive Programming Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Competitive Programming Academy 4 دروس في المجموع.
مشكلة جدولة الأنشطة
إذا كانت لديك أنشطة بأوقات بدء وانتهاء، فإن اختيار الأنشطة يطلب منك حضور أكبر عدد ممكن منها من دون تداخل أي نشاطين. 📅
التداخل يعني تعارضًا
يتعارض نشاطان إذا بدأ أحدهما قبل انتهاء الآخر. ولا يمكنك اختيار سوى نشاط واحد من أي زوج متداخل.
القاعدة الفائزة
تتمثل الفكرة الجشعة الأساسية في اختيار النشاط الذي ينتهي أولًا من بين الأنشطة المتاحة. فالانتهاء المبكر يترك أكبر مساحة للأنشطة الأخرى.
الفرز حسب وقت الانتهاء
ابدأ بعملية فرز جميع الأنشطة حسب وقت انتهائها. عندها يصبح أفضل اختيار تالٍ ببساطة هو النشاط التالي في هذا الترتيب الذي لا يتعارض.
events.sort(key=lambda e: e[1])تتبع آخر وقت انتهاء
احتفظ بمتغير واحد لوقت انتهاء النشاط الأخير الذي اخترته. ويجب أن يبدأ أي نشاط جديد عند هذه القيمة أو بعدها حتى يكون متوافقًا.
last_end = -1المرور والاختيار
مرّ على القائمة المرتبة مرة واحدة. إذا كان النشاط يبدأ عند last_end أو بعده، فاختره وحدّث last_end إلى وقت انتهائه.
for s, f in events:
if s >= last_end:
count += 1
last_end = fيعمل بزمن n log n
تأتي الكلفة من عملية الفرز التي تستغرق O(n log n)، ثم مرور خطي واحد. وهذا سريع بما يكفي حتى لمدخلات المسابقات الكبيرة جدًا.
لماذا يفوز الانتهاء المبكر
يحرر الانتهاء أولًا الجدول الزمني في أقرب وقت، لذلك لا يمكنه أن يمنع خطة أفضل. واستبداله في أي جدولة مثلى يحافظ على جودتها.
يفشل البدء المبكر
قد يؤدي الاختيار حسب البدء المبكر إلى اختيار نشاط طويل يستحوذ على اليوم كله. كما قد يضللك الاعتماد على المدة وحدها، لذا ثق بوقت الانتهاء.
التعامل مع التلامس عند الحدود
حدّد ما إذا كان انتهاء نشاط في اللحظة التي يبدأ فيها نشاط آخر يُعد تعارضًا. استخدم s >= last_end للسماح بأنشطة متتالية مباشرة.
صيغة شائعة في المسابقات
يظهر هذا النمط في كثير من المسائل، مثل حجز الغرف أو مشاهدة العروض أو تشغيل المهام. تعرّف إليه، وستنطبق قاعدة الانتهاء المبكر.
تحقق سريع
تريد الحصول على أكبر عدد من الأنشطة غير المتداخلة.
مراجعة
رتّب الأنشطة حسب وقت الانتهاء، ثم اختر كل نشاط يبدأ بعد انتهاء آخر نشاط اخترته. وتمنحك عملية فرز واحدة ومرور واحد أكبر مجموعة ممكنة. 🚀
الأسئلة الشائعة
هل درس «اختيار الأنشطة حسب أقرب وقت انتهاء» مجاني؟
نعم — نص درس «اختيار الأنشطة حسب أقرب وقت انتهاء» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Competitive Programming Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Competitive Programming Academy 4 دروس في المجموع.
ماذا ستتعلم في «اختيار الأنشطة حسب أقرب وقت انتهاء»؟
جدولة أكبر عدد من الأحداث غير المتداخلة تتمرن على Competitive Programming Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Competitive Programming Academy؟
لا تُشترط خبرة سابقة. Competitive Programming Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «اختيار الأنشطة حسب أقرب وقت انتهاء»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Competitive Programming Academy هذا؟
نعم. كل درس في Competitive Programming Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- العقلية الجشعة
- اختيار الأنشطة حسب أقرب وقت انتهاء
- حقيبة العناصر الكسرية حسب النسبة
- اكتشاف فشل النهج الجشع