طَبِّقْهاتعلّم المبدأ، وطبّقه بيدكمقرر 111 · أساسيات برمجة الحاسب
الدرس 21 · الوحدة 4: الدوال والقوائم

استراتيجيات أخرى: الجشع وفرّق تسد والتراجع

ثلاث طرق تفكير مشهورة لحل المشكلات، بمستوى الفكرة والمثال البسيط. ⏱ نحو 15 دقيقة.

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

١الجشع: خذ الأفضل الآن

البائع يردّ لك 80 ريالًا بأقل عدد من الأوراق: يأخذ أكبر ورقة ممكنة أولًا (50)، ثم أكبر ورقة تناسب الباقي، وهكذا. هذه استراتيجية الجشع: في كل خطوة نختار الأفضل الآن.

main.py
amount = 80for note in [50, 20, 10, 5, 1]:    while amount >= note:        print(note)        amount -= note
Shell×
>>> %Run main.py
50
20
10
>>>

النتيجة: 50 ثم 20 ثم 10، أي ثلاث أوراق فقط. الجشع سريع وسهل، لكنه لا يعطي أفضل حل في كل المسائل.

٢فرّق تسد: قسّم المشكلة نصفين

تبحث عن صفحة 300 في كتاب: لا تقلّب الصفحات واحدة واحدة، بل تفتح الكتاب من المنتصف، ثم تكمل في النصف الذي فيه الصفحة. هذه استراتيجية فرّق تسد، ومثالها المشهور البحث الثنائي في قائمة مرتبة:

main.py
nums = [3, 8, 15, 22, 31, 40, 57]target = 31low, high = 0, len(nums) - 1while low <= high:    mid = (low + high) // 2    if nums[mid] == target:        print("وجدناه في الخانة", mid)        break    elif nums[mid] < target:        low = mid + 1    else:        high = mid - 1
Shell×
>>> %Run main.py
وجدناه في الخانة 4
>>>

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

٣التراجع: جرّب، وإن فشلت ارجع

في المتاهة تسلك طريقًا، فإذا وصلت إلى طريق مسدود رجعت إلى آخر تفرّع وجرّبت طريقًا آخر. هذه استراتيجية التراجع: نجرّب الخيارات واحدًا واحدًا، ونتراجع عن الخيار الذي لا يوصل إلى الحل.

تُستخدم في الألغاز مثل السودوكو والمتاهات. ستتعلم تطبيقها بالتفصيل في مقرر لاحق؛ المهم الآن أن تعرف الفكرة.

٤متى أستخدم أيًّا منها؟

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

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

توقّع وتحقّق

أي استراتيجية تختار الأفضل في كل خطوة؟

الجشع يأخذ الأفضل الآن.

ما شرط البحث الثنائي؟

نستبعد النصف لأننا نعرف الترتيب.

حل المتاهة بتجربة طريق ثم الرجوع عند الطريق المسدود هو:

نرجع ونجرّب غيره.

بالجشع: كم ورقة لصرف 70 ريالًا من فئات 50 و 20 و 10؟

50 + 20.

الخلاصة

تحدٍّ برمجي: صرّاف جشع

متوسط

اكتب برنامجًا يصرف المبلغ 135 بأقل عدد من الأوراق من الفئات 100 و 50 و 20 و 10 و 5 و 1، ويطبع كل ورقة في سطر، ثم عدد الأوراق.

المطلوب:
  • مرّ على الفئات من الأكبر.
  • خذ الورقة ما دام المبلغ يكفي.
  • اطبع: عدد الأوراق: ثم العدد.

ابدأ من هذا الكود، واضغط ▶ شغّل هنا لتكتب حلّك وتجرّبه مباشرة:

main.py
amount = 135count = 0for note in [100, 50, 20, 10, 5, 1]:
المطلوب×
100
20
10
5
عدد الأوراق: 4
💡 تلميح 1
while amount >= note:
💡 تلميح 2
لا تنس count += 1 مع كل ورقة.

حاول بنفسك أولًا؛ للمسألة أكثر من حلّ صحيح.

main.py
amount = 135count = 0for note in [100, 50, 20, 10, 5, 1]:    while amount >= note:        print(note)        amount -= note        count += 1print("عدد الأوراق:", count)
انتقل إلى تقييم الدرساختيار من متعدد، وصح وخطأ، وأكمل الفراغ، وتتبّع الناتج.ابدأ التقييم ←