Graph Algorithms

الفصل الحادي عشر: خوارزميات الرسوم البيانية

الهدف: حل مشاكل التوصيل، الترتيب، وأقصر المسارات (Shortest Path).
1

Graph Terminology

المكونات الأساسية

الرسم البياني $G = (V, E)$ يتكون من رؤوس (Vertices) وحواف (Edges) تربط بينها.

  • Directed (Digraph): الحافة لها اتجاه (سهم).
  • Weighted: الحافة لها تكلفة (Cost/Weight).
  • Path: تسلسل من الرؤوس المتصلة.
  • Cycle: مسار يبدأ وينتهي بنفس الرأس.
  • Acyclic (DAG): رسم موجه بدون دورات (مهم للـ Topological Sort).
V1
V2
V3
V4
2

Topological Sort

ترتيب المهام (Prerequisites)

ترتيب خطي للرؤوس بحيث إذا كان هناك سهم من $u$ إلى $v$، فإن $u$ يظهر قبل $v$ في الترتيب.

الخوارزمية (Indegree Method):
  1. احسب عدد الأسهم الداخلة (Indegree) لكل رأس.
  2. ضع الرؤوس ذات الـ Indegree = 0 في طابور.
  3. بينما الطابور غير فارغ:
    • احذف الرأس واطبعه.
    • أنقص الـ Indegree لكل جيرانه.
    • إذا أصبح Indegree لجار يساوي 0، أضفه للطابور.
3

Shortest Path Algorithms

Unweighted Graph (BFS)

إذا كانت الحواف بدون وزن (أو متساوية)، فإن أقصر مسار هو "أقل عدد من الحواف".

استخدم Breadth-First Search (BFS).
ابدأ من المصدر، زر الجيران (مسافة 1)، ثم جيران الجيران (مسافة 2)...

Weighted Graph (Dijkstra)

إذا كانت الحواف لها تكلفة، نستخدم Dijkstra (خوارزمية جشعة Greedy).

  1. اجعل مسافة الجميع $\infty$ والمصدر 0.
  2. اختر العقدة المجهولة ذات أقل مسافة (Smallest Unknown).
  3. حدث مسافات جيرانها (Relaxation).
  4. اعتبرها "معلومة" (Known). كرر.

4

Minimum Spanning Tree (MST)

ما هي شجرة الامتداد؟

هي شجرة تربط جميع رؤوس الرسم البياني بأقل تكلفة إجمالية للحواف، وبدون أي دورات (Cycles).

Prim's Algorithm

تشبه Dijkstra جداً.
نبدأ من أي عقدة، وفي كل خطوة نضيف أرخص حافة تربط "ما لدينا" بـ "عقدة جديدة".

Connect All
Min Cost
No Cycles
🛡️ EXAM VAULT (خزنة الاختبار)
TRAP / فخ ديجكسترا

Dijkstra & Negative Edges

خوارزمية Dijkstra لا تعمل إذا كان الرسم البياني يحتوي على حواف سالبة (Negative Edges).
السبب: الخوارزمية "جشعة" وتفترض أن المسافة لا يمكن أن تقل بعد إضافة حافة جديدة، والسالب يكسر هذه القاعدة.

CONDITION / شرط

Cycle Detection

الـ Topological Sort يعمل فقط على DAG (Directed Acyclic Graph).
إذا كان هناك دورة (Cycle)، لن نجد أي رأس بـ Indegree 0 في مرحلة ما، وستفشل الخوارزمية.

→ السابق (Ch 10) الفصل التالي (Ch 12) ←