استراتيجيات أخرى: الجشع وفرّق تسد والتراجع
ثلاث طرق تفكير مشهورة لحل المشكلات، بمستوى الفكرة والمثال البسيط. ⏱ نحو 15 دقيقة.
- تشرح فكرة الجشع وتطبقها في مثال بسيط.
- تشرح فكرة فرّق تسد من خلال البحث الثنائي.
- تعرف فكرة التراجع.
١الجشع: خذ الأفضل الآن
البائع يردّ لك 80 ريالًا بأقل عدد من الأوراق: يأخذ أكبر ورقة ممكنة أولًا (50)، ثم أكبر ورقة تناسب الباقي، وهكذا. هذه استراتيجية الجشع: في كل خطوة نختار الأفضل الآن.
amount = 80for note in [50, 20, 10, 5, 1]: while amount >= note: print(note) amount -= note
النتيجة: 50 ثم 20 ثم 10، أي ثلاث أوراق فقط. الجشع سريع وسهل، لكنه لا يعطي أفضل حل في كل المسائل.
٢فرّق تسد: قسّم المشكلة نصفين
تبحث عن صفحة 300 في كتاب: لا تقلّب الصفحات واحدة واحدة، بل تفتح الكتاب من المنتصف، ثم تكمل في النصف الذي فيه الصفحة. هذه استراتيجية فرّق تسد، ومثالها المشهور البحث الثنائي في قائمة مرتبة:
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
في كل خطوة نستبعد نصف القائمة، فنصل إلى العنصر بخطوات قليلة جدًّا. شرطه أن تكون القائمة مرتبة.
٣التراجع: جرّب، وإن فشلت ارجع
في المتاهة تسلك طريقًا، فإذا وصلت إلى طريق مسدود رجعت إلى آخر تفرّع وجرّبت طريقًا آخر. هذه استراتيجية التراجع: نجرّب الخيارات واحدًا واحدًا، ونتراجع عن الخيار الذي لا يوصل إلى الحل.
تُستخدم في الألغاز مثل السودوكو والمتاهات. ستتعلم تطبيقها بالتفصيل في مقرر لاحق؛ المهم الآن أن تعرف الفكرة.
٤متى أستخدم أيًّا منها؟
| الاستراتيجية | الفكرة | مثال |
|---|---|---|
| الجشع | اختر الأفضل الآن في كل خطوة | صرف المبلغ بأقل عدد من الأوراق |
| فرّق تسد | قسّم المشكلة إلى أجزاء أصغر | البحث الثنائي |
| التراجع | جرّب، وإن فشلت ارجع وجرّب غيره | حل المتاهة |
📎 للاستزادة (اختياري): البرمجة الديناميكية
استراتيجية رابعة: تذكّر نتائج المسائل الصغيرة حتى لا تحسبها مرة أخرى. ستتعرف عليها في مقرر تركيب البيانات والخوارزميات.
توقّع وتحقّق
أي استراتيجية تختار الأفضل في كل خطوة؟
ما شرط البحث الثنائي؟
حل المتاهة بتجربة طريق ثم الرجوع عند الطريق المسدود هو:
بالجشع: كم ورقة لصرف 70 ريالًا من فئات 50 و 20 و 10؟
50 + 20.الخلاصة
- الجشع: اختر الأفضل الآن في كل خطوة.
- فرّق تسد: قسّم المشكلة، ومثالها البحث الثنائي في قائمة مرتبة.
- التراجع: جرّب، وإن وصلت إلى طريق مسدود ارجع وجرّب غيره.
تحدٍّ برمجي: صرّاف جشع
متوسطاكتب برنامجًا يصرف المبلغ 135 بأقل عدد من الأوراق من الفئات 100 و 50 و 20 و 10 و 5 و 1، ويطبع كل ورقة في سطر، ثم عدد الأوراق.
- مرّ على الفئات من الأكبر.
- خذ الورقة ما دام المبلغ يكفي.
- اطبع: عدد الأوراق: ثم العدد.
ابدأ من هذا الكود، واضغط ▶ شغّل هنا لتكتب حلّك وتجرّبه مباشرة:
amount = 135count = 0for note in [100, 50, 20, 10, 5, 1]:
💡 تلميح 1
while amount >= note:💡 تلميح 2
count += 1 مع كل ورقة.حاول بنفسك أولًا؛ للمسألة أكثر من حلّ صحيح.
amount = 135count = 0for note in [100, 50, 20, 10, 5, 1]: while amount >= note: print(note) amount -= note count += 1print("عدد الأوراق:", count)