أولاً: ماذا يجب أن "تفهم"؟ (الفهم العميق)
🔗 Logic of Pointers
تخيلها كسلاسل حديدية تربط الصناديق. فهمك لكيفية قطع السلسلة وربطها بمكان آخر هو جوهر الإضافة والحذف في القوائم والأشجار.
🪆 Recursion
دمية "ماتريوشكا". الدالة تفتح دالة أصغر حتى تصل للـ $Base Case$ ثم تعود لتغلق الدمى وتجمع النتائج ($Return$).
⚖️ Tree Rotations
في AVL، تخيل الشجرة كميزان مختل. التدوير هو عملية "ميكانيكية"؛ نرفع عقدة وننزل أخرى لاستعادة الاتزان.
🎖️ Divide and Conquer
استراتيجية الجنرالات. لا تحارب الجيش كاملاً (Array)، قسمه لكتائب صغيرة، اهزم كل كتيبة، ثم اجمعهم للنصر النهائي.
📦 LIFO vs FIFO
Stack: مثل مخزن رصاص المسدس (آخر رصاصة تدخل هي أول رصاصة تخرج).
Queue: مثل طابور "البيك" (أول واحد يصل هو أول واحد يطلب).
ثانياً: ماذا يجب أن "تحفظ"؟ (الحفظ الصم)
BST: اليسار أصغر، اليمين أكبر.
Heap: الأب دائماً أكبر (Max) أو أصغر (Min) من أبنائه.
Leaf: عقدة بدون أبناء. | Root: العقدة الأولى.
Height: من الورقة للأعلى. | Depth: من الجذر للأسفل.
ثالثاً: فك شفرات الرموز والاختصارات
| الرمز / الاختصار | المعنى (Meaning) | الاستخدام |
|---|---|---|
| N | Size of Input | حجم البيانات (عدد العناصر في المصفوفة). |
| O(f(n)) | Big-O (Upper Bound) | أسوأ سيناريو للوقت (سقف الأداء). |
| $\Omega(f(n))$ | Big-Omega (Lower Bound) | أفضل سيناريو للوقت (أرضية الأداء). |
| $\Theta(f(n))$ | Big-Theta (Tight Bound) | متوسط الأداء (تطابق السقف والأرضية). |
| BST | Binary Search Tree | شجرة بحث مرتبة لتسريع البحث. |
| AVL | Balanced Tree | شجرة توازن ذاتي تضمن ارتفاع $O(\log N)$. |
| MST | Min Spanning Tree | أقل تكلفة لربط كل النقاط. |
| DAG | Directed Acyclic Graph | رسم موجه بدون دورات (للطوبولوجي). |
| LIFO/FIFO | Stack/Queue Logic | طريقة دخول وخروج البيانات. |
رابعاً: وضع "البروفيسور" (Exam Simulation)
🅰️ Hot Topics (Modules 1-5)
- • Big-O Calculation: حلقات متداخلة (غالباً $O(N^2)$).
- • Stack Ops: ماذا يتبقى في المكدس؟ أو تحويل Infix لـ Postfix.
- • Linked List: سطر كود مفقود لربط عقدة (`.next`).
Modules 6-13 (70%)
- • AVL Balance: تحديد نوع الدوران بعد الإدخال.
- • Hashing: أين سيقع الرقم باستخدام Linear Probing؟
- • Sorting Tracing: شكل المصفوفة بعد دورتين (2 passes).
- • Graphs/Heaps: مسار Dijkstra، وماذا يصبح الجذر بعد deleteMin؟
⚠️ الفخاخ المنصوبة (Traps)
- فخ الـ Index: في Circular Queue الزيادة هي $(rear+1) \% size$.
- فخ الـ Heap: اليمين ليس بالضرورة أكبر من اليسار، فقط الأب هو المتحكم.
- فخ البداية: عمق الجذر ($Root$) هو 0 والارتفاع لعقدة وحيدة هو 0.
- فخ الاستقرار: Merge Sort مستقر، أما Quick/Heap فلا.
🕵️♂️ حيل الـ MCQs (Hacks)
- حيلة القسمة: حلقة تتضاعف ($*2$) أو تتقسم ($/2$) تعني أن الجواب فيه $\log N$.
- حيلة الترتيب: Pre-order يبدأ بالجذر، Post-order ينتهي بالجذر.
- حيلة Postfix: الضرب والقسمة أقوى؛ BC* ستكون قطعة واحدة ملتصقة.
- حيلة الـ AVL: خلل خط مستقيم = دوران واحد. خلل متعرج = دوران مزدوج.
خامساً: الأسئلة المقالية المتوقعة
س1: تتبع Dijkstra للأقصر مسار؟
السر في الجدول. ارسم جدولاً بأعمدة: $(Vertex, Known, Distance, Path)$. وحدث المسافات في كل خطوة.
س2: Hashing (Linear Probing) للأرقام 12, 22, 42؟
12 $\to$ خانة 2 (تم). | 22 $\to$ خانة 2 (مشغول) $\to$ جرب 3 (تم). | 42 $\to$ خانة 2 (مشغول) $\to$ 3 (مشغول) $\to$ جرب 4 (تم).
س3: كود حساب عدد العقد (Recursion)؟
int countNodes(Node root) {
if (root == null) return 0;
return 1 + countNodes(root.left) + countNodes(root.right);
}
سادساً: الجدول المقدس (The Ultimate Table)
| Data Structure / Algo | Average Case | Worst Case | ملاحظة ذهبية |
|---|---|---|---|
| Search in Array | O(N) | O(N) | إذا كانت غير مرتبة |
| Binary Search | O(log N) | O(log N) | بشرط المصفوفة مرتبة |
| Search in BST | O(log N) | O(N) | تسوء إذا مالت الشجرة (Skewed) |
| Search in AVL | O(log N) | O(log N) | لأنها متوازنة دائماً |
| Merge Sort | O(N log N) | O(N log N) | مضمون، مستقر وسريع |
| Quick Sort | O(N log N) | O(N^2) | الأسوأ عند اختيار Pivot سيء |
| Insertion Sort | O(N^2) | O(N^2) | تصل لـ $O(N)$ لو كانت مرتبة |