محتويات الدورة

هياكل البيانات والخوارزميات / براهين التحسين والتجميعات المحفوظة / الدرس 14

براهين الاستبدال الجشعة والأمثلة المضادة

أثبت أن الاختيار المحلي يحفظ وجود حل أمثل، وتعرّف متى يؤدي تغيير الهدف إلى إبطال البرهان.

وقت القراءة التقريبي: 5 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • القاعدة المحلية المقنعة تظل فرضية
  • استبدل المجال الأول في حل أمثل
  • ابن مثالا مضادا يكشف كلفة الفرصة

القاعدة المحلية المقنعة تظل فرضية

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

استبدل المجال الأول في حل أمثل

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

python مثال مستقل لخوارزمية بلغة Python 3، يستخدم بيانات محلية مصطنعة.
def schedule(intervals):
    if any(start >= finish for start, finish in intervals):
        raise ValueError("Intervals must have positive duration")
    selected = []
    last_finish = None
    for start, finish in sorted(intervals, key=lambda item: (item[1], item[0])):
        if last_finish is None or start >= last_finish:
            selected.append((start, finish))
            last_finish = finish
    return selected

print(schedule([(0, 3), (1, 2), (2, 4), (3, 5), (4, 6)]))
print(schedule([]))
الناتج المتوقع
[(1, 2), (2, 4), (4, 6)]
[]

تتوافق المجالات التي تتلامس نهاياتها. وينتج الفرز والاختيار حلا أمثل واحدا، وليس جميع الجداول المثلى.

ابن مثالا مضادا يكشف كلفة الفرصة

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

يغيّر استبدال العدد بالعائد مسألة التحسين

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

python مثال مستقل لخوارزمية بلغة Python 3، يستخدم بيانات محلية مصطنعة.
from itertools import combinations

def best_reward(intervals):
    optimum = 0
    for count in range(len(intervals) + 1):
        for subset in combinations(intervals, count):
            ordered = sorted(subset, key=lambda item: item[0])
            if all(ordered[i - 1][1] <= ordered[i][0] for i in range(1, count)):
                optimum = max(optimum, sum(item[2] for item in subset))
    return optimum

intervals = [(0, 2, 4), (2, 4, 4), (0, 4, 10)]
print(best_reward(intervals))
print(sum(item[2] for item in intervals[:2]))
الناتج المتوقع
10
8

يخسر جدول صحيح من مجالين أمام مجال واحد أعلى عائدا، فيثبت أن أمثلية العدد لا تعني أمثلية العائد.

أدرج التمثيل والناتج في تحليل الكلفة

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

اختبر المبرهنة بحالات صغيرة شاملة

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

الأخطاء الشائعة وإصلاحها

افتراض أن الجدولة بأبكر بداية مثلى

لماذا يحدث؟
قُبل تفضيل محلي دون حجة استبدال.
كيف تصلحه؟
استخدم قاعدة أبكر انتهاء المبرهنة لعقد تكبير العدد هذا.
كيف تتجنب تكراره؟
اختبر مجالا طويلا مبكرا أمام عدة مجالات قصيرة لاحقة.

رفض المجالات المتلامسة على أنها متداخلة

لماذا يحدث؟
اختلطت دلالة النهاية المغلقة بدلالة المجال نصف المفتوح.
كيف تصلحه؟
استخدم الشرط start>=last_finish وفقا للعقد المعلن.
كيف تتجنب تكراره؟
اختبر [0,2) يتبعه [2,4).

إعادة استخدام جشع أمثل للعدد من أجل العائد الموزون

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

اختبر فهمك

1. ما الذي يحفظه استبدال o بالمجال g في برهان الاستبدال؟

اعرض الحل المشروح

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

2. لماذا ينبغي للاختبارات قبول جداول مثلى مختلفة لها العدد نفسه؟

اعرض الحل المشروح

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

أهم ما تعلمته

  • القاعدة المحلية المقنعة تظل فرضية
  • اختبر المبرهنة بحالات صغيرة شاملة

المراجع الرسمية