🔴 أبطال الأزهر الكرام هذا الأسبوع هو ختام أسابيع المرحلة الأولى من تدريب المستوى الثاني، ولكن التدريب لم ينتهي بعد 🔥
🔴 ستستمر المسابقات الأسبوعية لعدة أسابيع حتى انتهاء فترة التدريب، فاستغلوا هذه الأسابيع في حل المسائل المتراكمة، ولا تفوتوا المسابقات الأسبوعية، واجتهدوا لكي تتمكنوا من التأهل للمرحلة الثانية من تدريب المستوى الثاني لتكملوا رحلة التدريب والمنافسة 😍🎈
الهدف من الأسبوع الخامس:
1- التعرف على مفهوم Recursion وBacktracking.
2- سنركز على واحد من أهم الـ Techniques المستخدمة في Complete Search عن طريق Recursion وBacktracking.
ملاحظات هامة :
In computer science, recursion is a method of solving a problem where the solution depends on solutions to smaller instances of the same problem. Such problems can generally be solved by iteration, but this needs to identify and index the smaller instances at programming time. Recursion solves such recursive problems by using functions that call themselves from within their own code. The approach can be applied to many types of problems, and recursion is one of the central ideas of computer science.
- هنتعرف الأسبوع دا على Recursion وهو أحد الطرق الأساسية المستخدمة لحل المشاكل وليه دور كبير في Complete Search، وهو قريب جدا من التفكير البشري وبيساعد في حل مشاكل معقدة جدا ببساطة شديدة.
- إتقان الـ Recursion هيتبني عليه فهم وإتقان كل الأسابيع القادمة في التدريب، لإنه بيلعب دور أساسي في Graph Theory وDynamic Programming وData Structures ولازم يكون سهل بالنسبة لك زي كتابة الـ Loops بالظبط ودا هيحصل بالحل الكتير.
- في بداية تعلم الـ Recursion اتعود ترسم Recursion Tree بايدك، وهي عبارة عن شجرة بتحاكي الـ Recursive calls اللي بتحصل لحد ما توصل للـ Base case، هتساعدك تستوعب الـ Recursion بصورة كويسة وبشكل أسرع.
- متتعودش إنك تعمل Trace للـ Recursive functions باستخدام الـ Debugger عشان دي عادة سيئة، واتعود تطلع المشكلة على ورقة بدون Tracing من خلال إنك تتأكد من صحة Transitions وBase case.
- اتعود تحسب Time Complexity للـ Worst Case في الـ Recursion، واقرأ أكثر عن مفهوم Pruning.
Backtracking is an algorithmic-technique for solving problems recursively by trying to build a solution incrementally, one piece at a time, removing those solutions that fail to satisfy the constraints of the problem at any point of time.
- هنتعرف برضو الأسبوع دا على Backtracking وهو أحد الطرق الأساسية المستخدمة لحل المشاكل وليه دور كبير في Complete Search، والـ Backtracking متشابه مع الـ Recursion إلى حد كبير.
- من الامثلة على Backtracking عندما تقوم بملء الخلايا الفارغية في لعبة Sudoku باحدى digits من 1 ل 9 وعندما تصل إلى طريق مسدود تقوم بالرجوع خطوة للوراء وتغيير الـ Digit الذي قمت بوضعه سابقا (Backtrack) ثم تكمل اللعبة وتكرر نفس الخطوات إلى حل صحيح.
- الـ Backtracking بيلعب دور أساسي في Graph Theory وDynamic Programming ولازم تستوعبه كويس وتتعود تكتبه وتفكر فيه بسهولة.
- مفهوم الـ Pruning من المفاهيم المهمة في Search algorithms ولازم تتعرف عليه خلال الأسبوع دا.
- لو الفيديوهات مش كافية بالنسبة لك، ابحث أكتر وشوف لحد ما تستوعب وتقدر تحل، ومتهملش الأسبوع دا لإنك بدونه مش هتقدر تكمل في التدريب.