تخطَّ إلى المحتوى

🧮 شرح هياكل البيانات والخوارزميات

التراجع (Backtracking)

الدرس 23 من 25· ⏱ 1 دقائق قراءة

الفكرة

ابنِ الحلّ خطوة بخطوة، وإذا وصلت لطريق مسدود تراجع (ألغِ آخر خطوة) وجرّب غيرها — بحث منهجي عبر كل الاحتمالات.

مثال: كل الترتيبات (Permutations)

def permutations(nums):
    result = []
    def backtrack(path, remaining):
        if not remaining:
            result.append(path[:])
            return
        for i in range(len(remaining)):
            path.append(remaining[i])
            backtrack(path, remaining[:i] + remaining[i+1:])
            path.pop()          # التراجع
    backtrack([], nums)
    return result

مسائل كلاسيكية

  • N-Queens (وضع الملكات دون تهديد).
  • حلّ سودوكو والمتاهات.
  • مجموعات الجمع (subset sum)، توليد الأقواس الصحيحة.

القالب العامّ

  1. اختر خيارًا.
  2. تعاودْ (استكشف الأعمق).
  3. تراجع (ألغِ الخيار وجرّب التالي).

⚠️ قد يكون أُسّيًّا — قلّمه (pruning) باستبعاد الفروع الفاشلة مبكرًا.

🎯 التالي: نصائح المقابلات.

هل كان هذا الدرس مفيدًا؟