Professional Documents
Culture Documents
תוכן עניינים
4 הקדמה . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
4 הקדמה כללית . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1
4 גרפים . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2
4 טרמינולוגיה . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.1
4 הצגות של גרפים . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3
4 רשימת שכנויות ). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (b 1.3.1
5 מטריצת שכנויות ). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (c 1.3.2
6 אלגוריתם (Breadth First Search) BFS־ פרק 22בספר . . . . . . . . . . . . . . . . . . . . . . . . . . 2
6 תיאור אבסטרקטי של האלגוריתם . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1
6 מבנה הנתונים שנשתמש בו . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2
6 האלגוריתם . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3
7 תיאור ריצת האלגוריתם עבור גרף לדוגמה. . . . . . . . . . . . . . . . . . . . . . . . . . . . : 2.3.1
7 סיבוכיות זמן . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.2
7 הוכחת נכונות . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4
9 עץ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . BF 2.5
10 אלגוריתם (Depth First Search) DFS־ פרק 22בספר . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
10 תיאור אבסטרקטי של האלגוריתם . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1
10 מבנה הנתונים שנשתמש בו . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2
10 האלגוריתם . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3
11 תיאור ריצת האלגוריתם עבור גרף לדוגמה. . . . . . . . . . . . . . . . . . . . . . . . . . . . : 3.3.1
11 סיבוכיות זמן . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.2
11 יער . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DF 3.4
14 מיון טופולוגי )בגרף מכוון חסר מעגלים ־ (DAG־ פרק 22בספר . . . . . . . . . . . . . . . . . . . . . . . . . . 4
14 תיאור אבסטרקטי של האלגוריתם . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1
14 מבנה הנתונים שנשתמש בו . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2
14 האלגוריתם . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3
15 הוכחת נכונות . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4
16 פירוק לרכיבי קשירות חזקה )ּ. . . . . . . . . . . . . . . . . . . . . . . . (Strongly Connected Components 5
16 תיאור אבסטרקטי של האלגוריתם . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1
17 האלגוריתם . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2
17 הוכחת נכונות . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3
18 עצים פורשים מינימליים ) (Minimum Spanning Trees־ פרק 23בספר . . . . . . . . . . . . . . . . . . . . . . 6
18 האלגוריתם הגנרי ). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (Generic MST 6.1
18 תיאור אבסטרקטי של האלגוריתם . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1.1
18 האלגוריתם . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1.2
18 הוכחת נכונות . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1.3
20 האלגוריתם של קרוסקל ). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (MST-Kruskal 6.2
20 תיאור אבסטרקטי של האלגוריתם . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2.1
20 מבנה הנתונים שנשתמש בו . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2.2
20 האלגוריתם . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2.3
21 דוגמת הרצה . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2.4
21 ניתוח סיבוכיות . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2.5
22 האלגוריתם של פרים ). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (MST-Prim 6.3
1
22 . . . . . . . . . . . . . . . . . . . . . . .
תיאור אבסטרקטי של האלגוריתם . . .. . . . .
6.3.1.
22 . . . . . . . . . . . . . . . . . . . . . . . .
מבנה הנתונים שנשתמש בו . . . . . . . . . . .
6.3.2.
22 . . . . . . . . . . . . . . . . . . . . . . . . .
האלגוריתם . . . . . . . . . . . . . . . . . .
6.3.3.
23 . . . . . . . . . . . . . . . . . . . . . . . . .
דוגמת הרצה . . . . . . . . . . . . . . . . .
6.3.4.
23 . . . . . . . . . . . . . . . . . . . . . . . . .
ניתוח סיבוכיות . . . . . . . . . . . . . . . .
6.3.5.
24 . . . . . . . . . . . . . . . תכנון דינאמי ) (Dynamic Programming־ פרק 15בספר
. . . . . . . . . . . . . . 7
24 הקדמה . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.1
24 דוגמה 1־ תכנון פס ייצור . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2
26 דוגמה 2־ כפל סדרת מטריצות . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.3
28 דוגמה 3־ Sequence Alignment־ עימוד סדרות /רצפים )פרק 6ב־ Algorithm Designשל . . . (KT 7.4
30 סיכום . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.5
32 מסלולים קצרים ביותר ממקור יחיד ) (Single-Source Shortest Paths־ פרק 24בספר . . . . . . . . . . . . . . 8
32 הקדמה . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1
33 טכניקת ההקלה ). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (Relaxation 8.2
34 טענות עזר . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.3
35 אלגוריתם . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bellman-Ford 8.4
35 תיאור אבסטרקטי של האלגוריתם . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.4.1
35 האלגוריתם . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.4.2
35 דוגמת הרצה . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.4.3
36 ניתוח סיבוכיות . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.4.4
36 הוכחת נכונות . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.4.5
36 מק”בים ממקור יחיד בגרף מכוון חסר מעגלים ). . . . . . . . . . . . . . . . . . . . . . . . . . . . (DAG 8.5
36 תיאור אבסטרקטי של האלגוריתם . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.5.1
37 האלגוריתם . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.5.2
37 דוגמת הרצה . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.5.3
37 אלגוריתם ) Dijkstraדייקסטרה( . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.6
37 תיאור אבסטרקטי של האלגוריתם . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.6.1
38 האלגוריתם . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.6.2
38 דוגמת הרצה . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.6.3
38 ניתוח סיבוכיות . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.6.4
40 אילוצי הפרשים ומסלולים קצרים ביותר ) (Dierence Constraints and Shortest Paths־ המשך פרק 24בספר 9
40 הקדמה ־ תכנון לינארי ). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (Linear Programming 9.1
40 מערכות של הפרשי אילוצים ). . . . . . . . . . . . . . . . . . . . (Systems of Dierence Consraints 9.2
41 פתרון מערכות של הפרשי אילוצים . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.2.1
41 מסלולים קצרים ביותר בין כל הזוגות ) (All Pairs Shortest Paths־ פרק 25בספר . . . . . . . . . . . . . . . . 10
41 הקדמה . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.1
42 מסלולים קצרים ביותר וכפל מטריצות . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2
42 האלגוריתם )וניתוח סיבוכיות( . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2.1
43 אלגוריתם פלויד־וורשאל ). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (Floyd-Warshall 10.3
44 האלגוריתם . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.3.1
44 ניתוח סיבוכיות . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.3.2
44 האלגוריתם של ג'ונסון עבור גרפים דלילים ). . . . . . . . . (Johnson's Algorithm for Sparse Graphs 10.4
44 תיאור אבסטרקטי של האלגוריתם . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.4.1
45 האלגוריתם . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.4.2
45 דוגמת הרצה . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.4.3
45 ניתוח סיבוכיות . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.4.4
47 זרימה מקסימלית ורשתות זרימה ) (Maximum Flow and Flow Networks־ פרק 26בספר . . . . . . . . . . . 11
47 הקדמה ־ רשתות זרימה וזרימות . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.1
49 שיטת פורד־פולקרסון ). . . . . . . . . . . . . . . . . . . . . . . . . . . (The Ford-Fulkerson Method 11.2
49 תיאור אבסטרקטי של האלגוריתם . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2.1
49 האלגוריתם הבסיסי . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2.2
50 הוכחת נכונות . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2.3
54 דוגמת הרצה . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2.4
54 ניתוח סיבוכיות . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2.5
54 אלגוריתם אדמונדס־קארפ ). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (Edmonds-Karp 11.3
54 תיאור אבסטרקטי של האלגוריתם . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.3.1
2
55 ניתוח סיבוכיות . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.3.2
56 האלגוריתם של דיניץ ). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (Dinic 11.4
56 הקדמה . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.4.1
57 תיאור אבסטרקטי של האלגוריתם . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.4.2
57 הוכחת נכונות . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.4.3
57 ניתוח סיבוכיות . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.4.4
59 צימוד )זיווג( בגרפים לא מכוונים ) (Maximum Matching in Bipartite Graphs־ המשך פרק 26בספר . . . . . 12
3
הקדמה 1
הקדמה כללית 1.1
• http://tau-algorithms.wikidot.com
• Introduction to Algorithms, by T. Cormen, C. Leiserson, R. Rivest, and C. Stein. Third edition, MIT Press,
2009.
• Algorithm Design, by J. Kleinberg and E. Tardos. Pearson/Addison Wesley, 2006.
• 6תרגילים ככל הנראה שמהווים 10%מהציון .אין חובת הגשה על שיעורי בית )זה פשוט ישוקלל כ־ 0בציון(.
גרפים 1.2
גרפים הם נושא מרכזי בקורס שלנו .נדון בגרפים לא מכוונים ,כך שאין קשתות מקבילות ,ואין לולאות עצמיות.
טרמינולוגיה 1.2.1
)G = (V, E גרף
• לגרף ממושקל :נשמור משקולות בתוך גרף השכנויות )בתא נוסף למשל(
• האם קשת ) (u, vבגרף? ) O(Vזמן )סריקת ) ,Adj(uובדיקה האם vמופיע ברשימה(
4
מטריצת שכנויות )(c 1.3.2
,|V | = nמטריצת .n × n
(
1 (i, j) ∈ E
= aij
0 else
• זכרון) O(V 2 ) :יכול להיות משמעותית יותר מהייצוג הקודם אם הגרף דליל(
• לגרף ממושקל :נשמור aij = wij
• האם קשת ) (u, vבגרף? ) O(1זמן )גישה ישירה לתא הרלוונטי(
• הערות:
5
אלגוריתם (Breadth First Search) BFS־ פרק 22בספר 2
בהנתן ) G = (V, Eומקור :s ∈ V
האלגוריתם 2.3
6
תיאור ריצת האלגוריתם עבור גרף לדוגמה: 2.3.1
טענה 2.2הלולאה מקיימת את השמורה :בשלב הבדיקה )שורה (10התור Qמכיל את כל הצמתים האפורים
הוכחה) :באינדוקציה( .בהתחלה Q = sו־ sהיחיד האפור .בכל מעבר על הלולאה שולפים מראש התור צומת אפור ) uשורה .(11
עוברים על שכני ,uמכניסים כל שכן חדש ל־ Qוצובעים אותו באפור .כשסיימנו לעבור על כל שכני ,uצובעים את uבשחור .כלומר,
כשצומת הופך אפור הוא נכנס ל־ Qוכשיוצא מ־ Qהוא הופך שחור )מפסיק להיות אפור( ,ולכן Qמכיל בדיוק את כל הצמתים
האפורים בגרף בכל רגע נתון.
) δ(s, vהוא מספר הקשתות המינימלי במסלול כלשהו מ־ sל־ .vנסמן ∞ = ) δ(s, vאם אין מסלול כזה.
למה ) 2.5למה (1בגרף לא מכוון ) G(V, Eעבור צומת ,v ∈ Vלכל קשת (v, u) ∈ Eמתקיים δ(s, v) ≤ δ(s, u) + 1
sאז כיוון שקיימת הקשת הוכחה :אם uנגיש מ־ sאז גם vנגיש מ־ sולכן מתקיים ) δ(s, v) ≤ δ(s, u) + 1כלומר אם קיים u
sואורכו גדול ב־ .(1לא ברור שזה המסלול הקצר ביותר אבל זה בטוח חסם עליון ע”י ,u → vהרי שקיים גם מסלול u → v
sואחריו הקשת ) ,(u, vולכן מתקיים .δ(s, v) ≤ δ(s, u) + 1אם uלא נגיש מ־ sאז גם המק”ב )מק”ב = מסלול קצר ביותר( u
vלא נגיש מ־ sואז מתקיים ∞ = ).δ(s, v) = δ(s, u
למה ) 2.6למה (2כשמריצים BFSעל Gממקור sוהאלגוריתם מסתיים ,לכל v ∈ Vמתקיים ).d(v) ≥ δ(s, v
7
הוכחה :אינדוקציה על מספר פעולות ההכנסה ל־:Q
כשמתחילים ,בהכנסה הראשונה d(s) = 0וגם ∞ = ) d(uלכל 0 = d(s) ≥ δ(s, s), ∞ = d(u) ≥ δ(s, u) .u 6= s בסיס:
כאשר צומת לבן vמתגלה )שורה (13בחיפוש מצומת uאז מהנחת האינדוקציה ,מתקיים ) .d(u) ≥ δ(s, uלפי ההשמה צעד:
.d(v) = d(u) + 1בשלב זה vמוכנס ≥ )שורה (15מתקיים d(v) = d(u) + 1 :ולכן )δ(s, u) + 1 ≥ δ(s, v
}|{z }|{z
induction Lemma1
לתור ,הוא אפור ולכן לא יכנס עוד לתור d(v) .לא ישתנה עוד ־ הזמן היחיד ש־ dמשתנה הוא כאשר צומת מתגלה
והופך מלבן לאפור )שורות 17־ 14מופעלות רק על צמתים לבנים(.
למה ) 2.7למה (3נניח שברגע מסויים בהרצת האלגוריתם ,התור הוא ) ( v1 , ..., vrאזי מתקיים:
}|{z }|{z
head tail
,d(vr ) ≤ d(v1 ) + 1 .1מנעד ≥ ) 1מנעד = טווח .(range ,כלומר ,בכל שלב התור יכול להכיל את המרחקים 3334או 44555
אבל לא ייתכן שיכיל את המרחקים .3345
.2מונוטוניות∀i. d(vi ) ≤ d(vi+1 ) :
הוכחה :אינדוקציה על מספר פעולות:
כשמתחילים התור מכיל רק את הצומת ,sולכן 1ו־ 2מתקיימים באופן טריוויאלי. בסיס:
הוצאה ־ v1נשלף מהתור v2 ,הופך לראש .מהנחת האינדוקציה עבור ) ,d(v1מתקיים ) ) d(v1 ) ≤ d(v2מ־ ,(2וכן צעד:
) d(vr ) ≤ d(v1 ) + 1מ־ .(1סך הכל משני אי השיוויונות מקבלים כי d(vr ) ≤ d(v2 ) + 1וזה 1שרצינו להוכיח .כמו כן
שאר אי השיוויונות מסוג 2נשמרים.
הכנסה ־ לאחר הוצאה של צומת uמהתור ,בזמן סריקת שכניו ,התגלה צומת .vכשצומת vנכנס לתור ,הוא הופך להיות
.vr+1לפני כן uנשלף מהתור ,לכן מהנחת האינדוקציה ) :d(u) ≤ d(v1
} ,d(vr+1 ) |{zוזה מה שרצינו להראות ב־.1 = d(u) + 1 ≤ d(v1 ) + 1
}= d(v) |{z
v=vr+1 line 15
) ,d(vr }≤ d(u) + 1 |{z בנוסף ,מהנחת האינדוקציה ,d(vr ) ≤ d(u) + 1 :ולכן קיבלנו כי ) = d(vr+1
}= d(v) |{z
}|{z }|{z
f rom 1 line 15 v=vr+1 f rom 1
וזה ) 2כיוון שכל שאר אי השיוויונות לא השתנו(.
מסקנה ) 2.8מסקנה (4אם צמתים u, vמוכנסים לתור בהמשך האלגוריתם וצומת uהוכנס קודם אזי ) d(u) ≤ d(vכאשר vנכנס
לתור .ההוכחה ע”י שימוש בלמה 3ומכך שכל צומת מקבל dסופי פעם אחת.
־ יהא ) G = (V, Eגרף מכוון /לא מכוון ,ונניח BFSמורץ ממקור .sאזי: )משפט (3נכונות BFS משפט 2.9
.1האלגוריתם מגלה כל צומת נגיש מ־s
.2בסיום לכל vמתקיים ש־)d(v) = δ(s, v
.3אם v 6= sו־ vנגיש מ־ sאזי קיים מסלול קצר ביותר )מק”ב( מ־ sל־ vהמורכב ממק”ב מ־ sל־) π(vואחריו הקשת ).(π(v), v
הוכחה :נניח בשלילה שצומת כלשהו מקבל ערך dלא שווה ל־) .δ(s, vיהא vצומת כזה עם ) δ(s, vמינימלי )כלומר נבחר צומת
כלשהו בעל מרחק מינימלי מבין אלו שמרחקם לא שווה ממש ל־).(δ(s, v
נשים לב ש־ ,v 6= sכיוון שעבור v = sנקבל = 0
} ,d(v) = d(s) |{zוגם ,δ(s, v) = δ(s, s) = 0ומכאן שנקבל כי )δ(s, v) = d(v
line 6
בניגוד לדרישה הראשונה .כמו כן ,נשים לב שמתקיים כי ) d(v) > δ(s, vלפי למה .2
יש מסלול מ־ sל־) vכי אחרת אם אין מסלול כזה הרי ש־∞ = ) ,δ(s, vואז לא ייתכן שמתקיים ) .(d(v) > δ(s, vיהא uהצומת
.(sכיוון שזה מסלול קצר ביותר מתקיים ש־.δ(s, v) = δ(s, u) + 1 שלפני vבמק”ב מ־ sל־u → v) v
ממינימליות הבחירה של vנובע ש־)) d(u) = δ(s, uה־ vשבחרנו הוא בעל ) δ(s, vמינימלי מבין הצמתים שמקיימים את התכונה
ש־) ,d(v) 6= δ(s, vלכן אם גם uהיה מקיים ש־) ,d(u) 6= δ(s, uאז כיוון ש־) ,δ(s, v) > δ(s, uהיינו מקבלים ש־ vלא מינימלי ,אלא
uמינימלי ,בניגוד לאופן שבו בחרנו את .(v
סך הכל קיבלנו כי ) d(v) > δ(s, v) = δ(s, u) + 1 = d(u) + 1נסמן ב־*(.
נתבונן בזמן שבו האלגוריתם מוציא את uמהתור )שורה .(11מה צבע vבאותו רגע?
8
.1אם vלבן d(v) = d(u) + 1 :נקבע אח”כ כאשר vמתגלה )שורה .(15סתירה ל־*.
.2אם vשחור :כלומר vנשלף מהתור ,וממסקנה 4נקבל כי ) ,d(v) ≤ d(uוזו סתירה ל־*.
.3אם vאפור :זה ייתכן רק אם vהתגלה במהלך סריקת שכניו של צומת אחר )לפני שנסרקו שכניו של .(uכלומר vנצבע אפור
כאשר צומת כלשהו ,נסמנו ב־ wנשלף מהתור ,וזה קרה לפני ש־ uנשלף מהתור .לכן ,d(v) = d(w) + 1כיוון ש־ vהתגלה דרך
) wשורה .(15ממסקנה 4מקבלים כי ) d(w) ≤ d(uומכאן ש־ ,d(v) ≤ d(u) + 1וזו סתירה ל־*.
קיבלנו סתירה להנחת השלילה ,ולכן קיבלנו סך הכל כי לכל צומת vמתקיים ש־)) d(v) = δ(s, vשזה מה שרצינו להוכיח ב־.(2
מכאן שכל צומת נגיש התגלה ,כי אחרת ∞ = )) d(vוזה לא אפשרי( ,כך שקיבלנו גם את מה שרצינו להוכיח ב־.1
אם ) u = π(vאזי ) d(v) = d(u) + 1כי שורות 16־ 15תמיד נקבעות יחד( ,ולכן מק”ב מ־ sל־ vמתקבל ע”ׁי מק”ב מ־ sל־u
ואחריו הקשת ) ,(π(v), v) = (u, vוזה מה שרצינו להוכיח ב־.3
הערה Vπ 2.11היא קבוצת כל הצמתים שיש להם קודם ) ,(successorוהצומת ) sשאין לו קודם( .נשים לב שמדובר בקבוצת הצמתים
הנגישים מ־.s
9
אלגוריתם (Depth First Search) DFS־ פרק 22בספר 3
תיאור אבסטרקטי של האלגוריתם 3.1
מניחים שהקלט הוא רשימת שכנויות .בהתחלה כל הצמתים לבנים .באופן איטרטיבי :לכל צומת בגרף )בניגוד ל־ BFSבו התחלנו
מצומת מקור מסוים( ,אם הצומת לבן” ,נבקר” בו ־ בביקור בצומת תחילה נעלה את הזמן ב־ .1לאחר מכן ,נצבע אותו באפור ,ונסמן
לו זמן התחלה .כעת נתבונן בשכנים שלו ־ לכל שכן ,אם הוא לבן ,נעבור ”לבקר” בו )כלומר ,נעבור לפעול עליו באופן רקורסיבי ,לכן
הפעולה היא לעומקו של הגרף ,ולא לרוחבו( .כאשר לא נותרו לצומת שכנים לבנים ,נצבע אותו בשחור )סיימנו את הטיפול בו( .כמו
כן ,נעלה את הזמן ב־ ,1ונקבע לו זמן סיום טיפול )בזה יסתיים ה”ביקור” בצומת(.
הערה 3.1האלגוריתם מתואר עבור גרף מכוון ,אך נשים לב שאם הגרף אינו מכוון ,נוכל להמיר אותו לגרף מכוון ע”י שכפול כל קשת
) ,(u, vכך שאחת היא מ־ uל־ ,vוהשנייה מ־ vל־.u
האלגוריתם 3.3
10
תיאור ריצת האלגוריתם עבור גרף לדוגמה: 3.3.1
(Parenthesis־ ב־ DFSשל גרף מכוון או לא מכוון לכל זוג צמתים u, v ∈ Vמתקיים )משפט הסוגרייםtheorem , משפט 3.3
רק אחד מהבאים:
[d(u), f (u)]∩[d(v), f (v)] = ∅∧(u is not ancestor of v in the DF f orest)∧(v is not ancestor of u in the DF f orest) .1
)הכוונה כאן היא ש־]) [d(u), f (vהוא הקטע הסגור שמוגדר ע”י זמן תחילת וסיום הטיפול בצומת uבאלגוריתם .(DFS
([d(u), f (u)] ⊂ [d(v), f (v)]) ∧ (v is ancestor of u in the DF f orest) .2
([d(v), f (v)] ⊂ [d(u), f (u)]) ∧ (u is ancestor of v in the DF f orest) .3
הוכחה :בלי הגבלת הכלליות נניח ) .d(u) < d(vקיימים שני מקרים )נקבל כאן את מקרים 1ו־ ,3באופן סימטרי אילו היינו מניחים
כי ) d(v) < d(uהיינו מקבלים את מקרים 1ו־:(2
11
.1אם ) :d(v) < f (uידוע ש־) .d(u) < d(v) < f (uאיפה נמצא ) ?f (vמהנתון כי ) ,d(u) < d(vכלומר גילינו את uלפני
שגילינו את ,vעולה שנסיים את הטיפול ב־ vלפני שנסיים את הטיפול ב־) uנובע מרקורסיביות האלגוריתם( .מכאן שמתקיים
) .f (v) < f (uכמו כן ,כמובן שמתקיים ) ,d(v) < f (vכך שסך הכל קיבלנו כי מתקיים ),d(u) < d(v) < f (v) < f (u
וזה האגף השמאלי של מקרה .3נשים לב שאם גילינו את vאחרי שגילינו את ,uולפני שסיימנו לטפל ב־ ,uאז שוב מאופיו
הרקורסיבי של האלגוריתם נובע כי קיים מסלול מ־ uל־ vכך ש־ vהוא צאצא של .uלכן קיבלנו את אגף ימין של מקרה ,3
וסך הכל מתקיים מקרה .3
.2אם ) :f (u) < d(vידוע כי ) ,d(u) < f (uוכן ש־) d(v) < f (vכי זמן סיום תמיד גדול מזמן תחילת טיפול .כמו כן מכך
ש־) f (u) < d(vמקבלים סך הכל כי ) ,d(u) < f (u) < d(v) < f (vוזה מקרה ) 1הקטעים ]) [d(u), f (uו־]) [d(v), f (vזרים,
לכן החיתוך בינהם ריק( .נשים לב שבמקרה זה uאינו אב קדמון של ,vוגם vאינו אב קדמון של .u
משפט ) 3.4משפט המסלול הלבן( ־ ביער DFשל גרף מכוון או לא מכוון ) u ,G = (V, Eהוא אב קדמון של ⇐⇒ vבזמן )d(u
יש מסלול בגרף Gמ־ uל־ vשכולו צמתים לבנים.
הוכחה ⇐ :נניח uאב קדמון של vביער ה־ .DFנחלק למקרים:
:u = v .1בזמן ) u ,(d(v) =) d(uלבן ,לכן יש מסלול באורך ) 0באורך צומת (1שכולו לבן )כלומר ,מתקיים באופן ריק(.
:u 6= v .2לפי משפט הסוגריים מתקיים ) ,d(u) < d(v) < f (v) < f (uלכן בזמן ) d(uהצבע של vלבן .באופן דומה ,ניתן לומר
uבעץ ה־ DFשהוא לבן ,כיוון ש־ uאב קדמון שלו )ממשפט הסוגריים נובע מכך ש־ uאב לכל צומת wשנמצא במסלול v
קדמון של wש־) ,d(u) < d(wומכאן ש־ wלבן בזמן ) .(d(uלכן סך הכל קיבלנו כי כל הצמתים במסלול לבנים.
⇒ נניח כי בזמן ) d(uיש מסלול בגרף Gמ־ uל־ vשכולו צמתים לבנים .יהי מסלול כלשהו כנ”ל .נניח בשלילה כי uאינו אב קדמון
של vבעץ ה־ .DFמכאן נובע שקיים צומת wבמסלול הלבן )בגרף ,(Gכך ש־ wהצומת הראשון במסלול הלבן שעבורו מתקיים כי u
אינו אב קדמון שלו ביער ה־ .DFכיוון ש־ wהצומת הראשון במסלול הלבן שאינו צאצא של ,uהרי שהצומת הקודם במסלול ,נסמנו
ב־ ,zכן צאצא של ) uייתכן .(z = u
מכך ש־ zצאצא של uנובע כי בזמן ) d(zהצומת uאפור )אנחנו עדיין מטפלים בצאצאים שלו( .כמו כן ,מכך שקיים מסלול
באורך 1מ־ zל־ z) wהצומת שלפני wבמסלול הלבן ב־ ,(Gהרי ש־ wשכן של .zלכן ,לפני שנסיים את הטיפול ב־) zולכן גם לפני
שנסיים את הטיפול ב־ (uנעבור ב־ wבמהלך סריקת שכני .zכעת יש שתי אפשרויות למצב של wבזמן המעבר בקשת ):(z, w
.1אם wלבן :אזי הקשת ) (z, wמצטרפת לעץ ה־ ,DFומכאן ש־ wצאצא של uבעץ ה־ ,DFבסתירה להנחת השלילה.
.2אם wלא לבן :כיוון שכאשר התחלנו wהיה לבן ,הרי ש־) .d(u) < d(wכמו כן ,כיוון שבשלב זה לא סיימנו עדיין עם u
)הוא אפור( ,מתקיים ) .d(u) < d(w) < f (uממשפט הסוגריים נובע כי בהכרח מתקיים ∧ )])([d(w), f (w)] ⊂ [d(u), f (u
) (u is ancestor of w in the DF f orestכיוון שהאפשרויות היחידות הן הכלה או זרות ,ולכן wצאצא של uבסתירה להנחת
השלילה.
הגדרה 3.5־ נגדיר לכל קשת בגרף את סוג הקשת באופן הבא:
קשת עץ ) (Tree Edge־ קשת שנמצאת ב־ .Gπקשת ) (u, vתהיה tree edgeאם הגענו ל־ vבמהלך הסריקה מ־ ,uע”י טיול בקשת
).(u, v
קשת אחורית ) (Back Edge־ קשת שמחברת בין uלאב קדמון שלו vבגרף ) Gπקשת שכאשר עוברים בה בסריקה מגיעים ממנה
לצומת אפור ,כלומר לאב קדמון שהטיפול בו טרם הסתיים( .גם קשתות עצמיות יחשבו כ־.back edges
קשת קדמית ) (Forward Edge־ קשת שמחברת בין uלצאצא שלו vושאינה מהווה חלק מהגרף ) Gπקשת שכאשר עוברים בה
בסריקה מגיעים ממנה לצומת שחור ,כיוון שביקרנו בו כבר וסיימנו איתו(
קשת חוצה ) (Cross Edge־ כל שאר הקשתות .יכולות להיות קשתות בין צמתים באותו עץ DFכל עוד אין בינהם יחסי צאצא־אב
קדמון ,או בין צמתים בעצי DFשונים.
הערה 3.6־ עבור קשת ) (u, vמתקיים תמיד ש־ uאפור )אנחנו בתהליך סריקת השכנים שלו( .נוכל לקטלג את הקשתות באופן הבא
לפי צבע הצומת :v
.1אם vלבן :הקשת היא .tree edge
.2אם vאפור :הקשת היא .back edge
12
.3אם vשחור:
• אם ) d(u) < d(vאז הקשת היא ) forward edgeנובע ממשפט הסוגריים ,שכן בשלב זה uאפור ,ולכן מתקיים
) d(u) < d(v) < f (v) < f (u) ⇐ d(u) < d(v) < f (uכך ש־ vצאצא של uאבל הקשת ) (u, vאינה קשת בגרף
ה־.(DF
• אם ) d(v) < d(uאז הקשת היא ) cross edgeשוב ,נובע ממשפט הסוגריים ,שכן
) d(v) < f (v) < d(u) < f (u) ⇐ d(v) < d(u) < f (uולכן אין בין uל־ vיחסי צאצא־אב קדמון(.
הערה 3.7־ בתיאור ריצת האלגוריתם עבור גרף לדוגמה ,מסומנות בגרף הקשתות מהסוגים השונים ע”י האות הראשונה של הסוג
)למשל .(C = Cross edge
משפט 3.8־ ב־ DFSשל גרף לא מכוון אין forward edgesואין ) cross edgesכלומר יש רק tree edgesו־.(back edges
הוכחה :נתבונן בקשת )) (u, vכלומר אנחנו סורקים את שכני ,uובוחנים את הקשת ממנו ל־ ,(vונניח בה”כ כי ) .d(u) < d(vכיוון
שבשלב זה uאפור ,נובע כי )) d(u) < d(v) < f (v) < f (u) ⇐ d(u) < d(v) < f (uממשפט הסוגריים( .כעת יש שתי אפשרויות:
.1אם נעבור על הקשת ) (u, vבפעם הראשונה מ־ uל־ v :vחייב להיות לבן )אחרת ,אם vלא לבן ,הרי שביקרנו בו כבר ,ואז
היינו עוברים בקשת ) (u, vבכיוון מ־ vל־ .(uלכן הקשת היא .tree edge
.2אם נעבור על הקשת ) (u, vבפעם הראשונה מ־ vל־ v :uאפור וגם uאפור )לא סיימנו את הטיפול עדיין באף אחד מהצמתים(.
לכן הקשת היא .back edge
13
מיון טופולוגי )בגרף מכוון חסר מעגלים ־ (DAG־ פרק 22בספר 4
הערה 4.1גרף מכוון חסר מעגלים באנגלית זה ,directed acyclic graphלכן בקיצור נאמר .DAG
הגדרה 4.2מיון טופולוגי של גרף מכוון חסר מעגלים ) G = (V, Eהוא סידור לינארי של כל צמתי הגרף ,כך שאם הקשת ) (u, vבגרף
)כלומר יש קשת שעוברת מ־ uל־ (vאזי uמופיע לפני vבסידור זה.
הערה 4.3ניתן לראות מיון טופולוגי כסידור של צמתי הגרף על קו אופקי כך שכל הקשתות בו פונות משמאל לימין ,כך:
האלגוריתם 4.3
למה 4.4גרף מכוון Gאינו מכיל מעגלים ⇒⇐ ריצת DFSעל Gאינה מניבה קשתות אחורה )כלומר ,אין .(back edges
הוכחה :⇐ :נניח שקיימת (u, v) back edgeבכיוון מ־ uל־ vבגרף .אזי vאב קדמון של uביער ה־.DFS
לכן קיים מסלול של tree edgesשעובר מ־ vל־ uבגרף .מסלול זה יחד עם הקשת האחורית ) (u, vמהווה מעגל בגרף.
⇒ :נניח שקיים מעגל בגרף .יהי uהצומת עם זמן גילוי ) d(uמינימלי מבין הצמתים במעגל ונסמן ב־ vאת הצומת שלפני u
במעגל )כלומר הקשת ) (u, vהיא הקשת האחרונה במעגל( .אזי ,בזמן ) d(uכל הצמתים במעגל לבנים ,ובפרט יש מסלול לבן מ־u
ל־ ⇐ vלפי משפט המסלול הלבן v ,צאצא של uבעץ ה־ ⇐ DFSהקשת ) (u, vהיא קשת אחורית.
14
4.4הוכחת נכונות
משפט 4.5האלגוריתם ) Topological-Sort(Gמייצר מיון טופולוגי של גרף מכוון ללא מעגלים ).G = (V, E
הוכחה :מספיק להראות כי לכל u, v ∈ Vכך ש־ u 6= vו־ ,(u, v) ∈ Eמתקיים ).f (u) > f (v
במעבר על קשת כלשהי ) (u, vבמהלך ה־ ,DFSהצומת vלא יכול להיות אפור )שכן אילו vהיה אפור היינו מקבלים כי הקשת
) (u, vהיא ,back edgeומכאן שיש מעגל בגרף בסתירה להנחה( .לכן בזמן המעבר בקשת ) (u, vהצומת vלבן או שחור .נפצל
למקרים:
• אם vלבן :הקשת ) (u, vהיא קשת עץ ,כך ש־ vצאצא של uבעץ ה־ DFSוממשפט הסוגריים מקבלים כי
) ,d(u) < d(v) < f (v) < f (uובפרט ) ,f (v) < f (uכדרוש.
• אם vשחור :אזי סיימנו כבר עם vאך לא סיימנו עדיין עם ,uלכן אם נסמן ב־ currentאת הזמן הנוכחי נקבל כי
)) f (v) < current < f (uממשפט הסוגריים נובע כי האפשרויות הן ) d(v) < f (v) < d(u) < f (uאו
) ,(d(u) < d(v) < f (v) < f (uובפרט ) ,f (v) < f (uכדרוש.
15
(Strongly פירוק לרכיבי קשירות חזקה )ּConnected Components 5
הגדרה 5.1רכיב קשירות חזקה )או רק”ח( בגרף מכוון ) G = (V, Eהוא קבוצה מקסימלית של צמתים C ⊆ Vכל שלכל זוג צמתים
.v uוגם מסלול u u, v ∈ Cיש מסלול v
הגדרה 5.2גרף (Transposed) GTשל גרף ) G = (V, Eהוא הגרף ) ,GT = (V, E Tכך ש־}) E T = {(v, u)|(u, v) ∈ Eכלומר
הגרף עם כל הקשתות בכיוון ההפוך(.
הערה 5.3
הגדרה 5.4גרף (Strongly Connected Components) GSCCשל גרף ) G = (V, Eהוא גרף הרכיבים חסר המעגלים שמתקבל
ע”י כך שמכווצים כל רק”ח של Gלצומת יחיד )הקשתות מייצגות קשתות בגרף Gהמקורי בין צמתים ברכיבי קשירות שונים(.
הערה 5.5נשים לב שהגרף GSCCהוא חסר מעגלים ,שכן אילו היה בו מעגל ,זו היתה סתירה למקסימליות של קבוצת הצמתים
ברק”ח.
לדוגמה:
16
האלגוריתם 5.2
.2אם ) :d(C 0 ) < d(Cנסמן ב־ yאת הצומת בעל זמן הגילוי המינימלי ב־ ) C 0כלומר ) .(d(y) = d(C 0בזמן ) d(yכל הצמתים
ב־ C 0הם לבנים ⇐ יש מסלול מ־ yלכל צומת ב־ ,C 0וכל הצמתים במסלול לבנים ⇐ כל הצמתים ב־ C 0צאצאים של ,y
ולכן ) .f (y) = max{f (y)|y ∈ C 0 } = f (C 0נשים לב שאין קשת מ־ C 0ל־) Cשכן אחרת היה מעגל בגרף ,(GSCCלכן
) .f (y) < d(Cסך הכל קיבלנו כי ) ,f (C 0 ) = f (y) < d(C) < f (Cובפרט ) ,f (C 0 ) < f (Cכדרוש.
למה 5.7יהיו C, C 0שני רק”חים של ) G = (V, Eכך ש־ .C 6= C 0אם יש קשת (u, v) ∈ E Tמ־ uל־ vכך ש־ u ∈ C, v ∈ C 0אזי
) .f (C) < f (C 0
הוכחה :זו בדיוק אותה למה כמו קודם ,בניסוח אחר )השתמשנו ב־ E Tבמקום ב־ Eוהפכנו את אי השיוויון(.
טריוויאלי ,שכן כאשר נוצרו 0עצים ,הרי שכל העצים הם רק”חים )באופן ריק(. בסיס:
נניח שנוצרו n + 1עצים .מהנחת האינדוקציה ,כאשר נוצרו nהעצים הראשונים ,הם היו כולם רק”חים ,נסמנם ב־ צעד:
.C1 , C2 , ..., Cn
נסמן ב־ uאת שורש העץ ה־) n + 1את הצומת שאיתו קראנו ל־ DFS-VISITבפעם ה־ .(n + 1מתקיים כי u ∈ Cכך
ש־ Cרק”ח כלשהו )ששונה כמובן מ־ nהראשונים(.
n
∈ ) f (u) = max{f (x)|xכלומר הצומת בעל זמן הסיום המקסימלי
מהגדרת האלגוריתם u ,נבחר כך שמתקיים } / ∪ Ci
i=1
מבין אלו שנותרו( .כיוון שכל הצמתים ברק”ח Cעדיין לא חלק מיער ה־ ,DFSהרי שמתקיים ) .f (u) = f (Cכמו כן,
∈ ,uוכן ש־) ,f (u) ≥ f (C 0לכן בפרט ) ,f (u) > f (C 0וקיבלנו כי
לכל רק”ח אחר ,C 0 ,שעוד לא גילינו ,מתקיים ש־ / C 0
) .f (C) > f (C 0
0 0 0 T
מהלמה ,אם יש קשת ב־ Eבין שני רק”חים שונים C, Cאזי ) ,f (C) < f (Cולכן אם ) ,f (C) > f (Cאזי לא ייתכן
שיש קשת כזו ,ומכאן שהעץ שיתקבל הוא רק”ח )החיפוש לא יכול לעבור לרק”ח אחר ,שכן אין קשת שמחברת ביניהם,
אבל כן יחשוף את כל הצמתים ברק”ח הנוכחי ,שכן קיים מסלול מכל צומת ברק”ח לכל צומת אחר באותו רק”ח(.
17
(Minimum־ פרק 23בספר עצים פורשים מינימליים )Spanning Trees 6
הגדרה 6.1עץ פורש בגרף לא מכוון הוא קבוצת קשתות קשירה חסרת מעגלים המחברת את כל הצמתים.
הגדרה 6.2בגרף ) G = (V, Eלא מכוון נאמר שקבוצת קשתות T ⊆ Eהיא קשירה ⇒⇐ קבוצת הצמתים
} VT = {u|∃v ∈ V. (u, v) ∈ Tהיא קשירה ⇒⇐ יש מסלול בגרף בין כל זוג צמתים ב־ .VT
P
= ) ) w(Tכך ש־) w(u, vהוא משקל הקשת ).((u, v הגדרה 6.3משקל של קבוצת קשתות Tמוגדר באופן הבאw(u, v) :
(u,v)∈T
הגדרה 6.4לעץ פורש בעל משקל מינימלי נקרא עץ פורש מינימלי ,או בקיצור ,עפ”מ.
הערה 6.5לדוגמה ,קבוצת הקשתות האפורות בגרף הבא מהווה עץ פורש מינימלי של הגרף:
נשים לב שגם אילו היינו מחליפים את הקשת ) (b, cבקשת )) (a, hאשר לשתיהן משקל (8היינו מקבלים עץ פורש בעל משקל
מינימלי ,ומכאן שעפ”מ הוא לא בהכרח יחיד.
האלגוריתם 6.1.2
בכל חזרה על שורות 4־ 2הוספנו קשת בטוחה ,לכן מתקיימת השמורה. איטרציה:
Aהיא עץ פורש וכל קשתותיו שייכות לעפ”מ ⇐ Aהיא עפ”מ. סיום:
הגדרה 6.6חתך בגרף ) G = (V, Eהוא חלוקה של הצמתים לשתי קבוצות.(S, V \S) :
הגדרה 6.7קשת ) (u, vחוצה את החתך אם uו־ vנמצאים בצדדים שונים של החתך )למשל uב־ Sו־ vב־ .(S\V
18
הגדרה 6.8עבור קבוצת קשתות Aנאמר שחתך ) (S, V \Sמכבד את Aאם אין אף קשת חוצה ששייכת ל־.A
נשים לב שניתן לצייר מחדש את הגרף )איור ) ((aכך שקשתות Sבצד אחד ,וקשתות S\Vבצד שני )כפי שנראה באיור ),((b
ואז קל מאוד להבחין בקשתות החוצות.
כמו כן ,נשים לב שהקשתות ) (b, c), (c, dשהיו בקבוצת הקשתות מהדוגמה הקודמת )היו אפורות( ,נסמנה ב־ ,Aהן קשתות חוצות
בחתך זה ,כך שהחתך לא כיבד את .Aלעומת זאת ,עבור קבוצת הקשתות האפורות באיור הנ”ל ,נסמנה ב־ ,Bמתקיים כי החתך
מכבד את .B
הגדרה 6.10קשת חוצה תקרא קשת קלה אם המשקל שלה מינימלי מבין הקשתות החוצות.
משפט ) 6.11משפט (1יהי ) G = (V, Eגרף לא מכוון עם משקלות ממשיים wלקשתות .תהי A ⊆ Eהמוכלת בעפ”מ כלשהו .ויהי
) (S, V \Sחתך המכבד את .Aאזי כל קשת חוצה קלה היא בטוחה ביחס ל־.A
הוכחה :יהי Tעפ”מ שמכיל את ) Aכלומר (A ⊆ T ⊆ Eותהי ) (u, vקשת קלה בחתך שמכבד את .Aאם (u, v) ∈ Tאז
∈ ) .(u, vנראה שקיים עפ”מ T 0כך ש־ .A ∪ {(u, v)} ⊆ T 0מכך
,A ∪ {(u, v)} ⊆ Tלכן ) (u, vקשת בטוחה וסיימנו .נניח כי / T
ינבע ש־) (u, vבטוחה ביחס ל־.A
∈ ) (u, vהרי שב־}) T ∪ {(u, vיש מעגל )שכן Tעץ פורש ,ו־) (u, vקשת שאיננה בעץ כך שהוספתה תסגור נשים לב שאילו / T
מעגל( .נתבונן באיור הבא:
ידוע שקשת ) (u, vהיא קשת חוצה )קלה ⇐ חוצה( ,אזי u, vבצדדים שונים בחתך ,לכן המסלול מ־ uל־ vב־ ) Tיש מסלול אחד
∈ )) (x, yכי ) (x, yחוצה ,ונתון
בדיוק כזה כי Tעפ”מ( כולל קשת חוצה אחת לפחות .תהי ) (x, yקשת חוצה כנ”ל .מתקיים / A
כי החתך מכבד את ,Aלכן זו לא קשת ב־ .(Aמכך ש־) (u, vקשת קלה ,נובע כי ) .w(u, v) ≤ w(x, yכיוון ש־) (x, yעל המסלול
uב־ ,Tהורדת ) (x, yמ־ Tשוברת את Tלשני רכיבי קשירות ,והוספת ) (u, vמחברת אותם חזרה לעץ פורש חדש ,שנסמנו v
.T 0כלומר.T 0 = (T \{(x, y)}) ∪ {(u, v)} :
19
ברור ש־ T 0מהווה עץ פורש )היא עץ כי מחקנו קשת מהמעגל היחיד שנוצר כשהוספנו את ) ,(u, vוכן היא עץ פורש כיוון שאילו
,xאז ברור שקיים גם מסלול מכל צומת היה מסלול מכל צומת לכל צומת לפני החלפת הקשתות ,ולאחר ההחלפה קיים מסלול y
לכל צומת אחר בגרף לאחר ההחלפה(.
נראה ש־ T 0הוא עפ”מ:
מכאן שלמעשה מתקיים ) ) w(T 0 ) = w(Tשכן Tעפ”מ ,כך שלא ייתכן כי ) ,(w(T 0 ) < w(Tולכן גם T 0עפ”מ.
∈ ) ,(x, yלכן ) A ⊆ T 0כי הקשת היחידה שמוחקים מ־ Tלקבלת נראה ש־) (u, vבטוחה ביחס ל־ :Aנתון .A ⊆ Tהראינו / A
T 0היא קשת שאיננה ב־ .(Aמכאן ש־ ,A ∪ {(u, v)} ⊆ T 0וכיוון ש־ T 0עפ”מ קיבלנו כי ) (u, vבטוחה ביחס ל־ ,Aכדרוש.
מסקנה 6.12יהי ) G = (V, Eגרף קשיר ,לא מכוון וממושקל .תהי A ⊆ Eקב' קשתות המוכלת בעפ”מ כלשהו ,ויהי ) C = (VC , EC
רכיב קשירות ביער ) A) GA = (V, Aמוכלת בעץ ,לכן בפרט ) GA = (V, Aהוא עץ או יער( .תהי ) (u, vקשת קלה המחברת את
Cלרכיב קשירות אחר ב־ ) GAכלומר קשת קלה ביחס לחתך ) ,((VC , V \VCאזי ) (u, vהיא בטוחה ביחס ל־.A
הוכחה) :הוכחת המסקנה( החתך ) (VC , V \VCמכבד את Aוהקשת ) (u, vקלה ביחס לחתך ,לכן ממשפט 1נובע כי ) (u, vבטוחה
ביחס ל־.A
האלגוריתם 6.2.3
20
דוגמת הרצה 6.2.4
21
סך הכל ,כל השלבים למעט המיון דורשים ))| ,O(|E|α(|Vוהמיון דורש ))| ,O(|E|log(|Eלכן הסיבוכיות הכוללת היא ))|.O(|E|log(|E
כמו כן ,כיוון ש־ ,|E| ≤ |V2 | < |V |2מתקיים )| ,log(|E|) = O(log(|V |2 ) = O(2log(|V |) = O(log|Vלכן הסיבוכיות הכוללת
האלגוריתם 6.3.3
22
.3לכל צומת v ∈ Qאם v.π 6= N ILאז ∞ < ,v.keyוכן v.keyהוא המשקל המינימלי של קשת בין vלבין צומת שכבר בעץ.
)הסבר :שורה 7מזהה u ∈ Qשנשען על קשת קלה בחתך ) (V \Q, Qשמכבד את .Aהוצאת uמ־ Qמוסיפה אותו ל־,V \Q
וכך נוספת ל־ Aהקשת ) .(u, u.πהלולאה בשורות 11־ 8מעדכנת את key, πלכל שכן של uשלא בעץ ,ומכאן ששמורה זו אכן
נשמרת(.
23
(Dynamic־ פרק 15בספר תכנון דינאמי )Programming 7
הקדמה 7.1
בהקשר של Dynamic Programmingהמילה Programmingמתייחסת לתכנון )ולא לתכנות( .זה מושג שנוצר בתקופת מלחמת
העולם השניה בתחום חקר ביצועים )שנעשה לאופטימיזציה של תהליכים שעירבו נתונים רבים כגון הובלה ,הפצצה ועוד( .השיטה
שזכתה לשם תכנון דינאמי פותחה ע”י ,Richard Bellmanוהיא אינה מתייחסת לאלגוריתם אחד ספציפי ,כפי שראינו עד כה ,אלא
לשיטה כללית ,שנותנת פתרון לסוג מסוים של בעיות .כיוון שמדובר במטה־שיטה ,ולא באלגוריתם ספציפי ,נלמד אותה באמצעות
הצגת מספר דוגמאות.
הגדרה 7.1תת־מבנה של אופטימליות ) (Suboptimality structure־ נאמר שבעיה היא בעלת תת־מבנה של אופטימליות אם
הפתרון האופטימלי לבעיה מכיל בתוכו פתרונות אופטימליים לתתי בעיות.
במפעל לייצור מכוניות יש שני פסי ייצור ,כך שלכל מכונה בפס הייצור יש זמן עבודה מסויים.
עבור עבודה מתועדפת ) (rush jobאנחנו יכולים להחליט להעביר את המכונית בין פסי היצור ,ולהנות מהמכונה המהירה לכל שלב
בפס הייצור .החסרון ־ העברת המכונית בין פסי הייצור לוקחת זמן גם היא.
נסמן:
תחנה jבפס i Si,j
המטרה :מצאו תהליך יצור בזמן כולל מינימלי ,עבור הנתונים הבאים:
24
פתרון:
על מנת למצוא פתרון לבעיה ,ננסה לאפיין את התכונות של המסלול האופטימלי .נשים לב שפתרון אופטימלי מההתחלה ועד Si,j
יקיים:
• אם :j = 1יש אפשרות אחת למסלול בעל זמן עבודה קצר ביותר עד שלב זה.
• אם :j > 1התחנה הקודמת היא S1,j−1או .S2,j−1
– אם התחנה הקודמת היא :S1,j−1חייבים להגיע אליה במסלול המהיר ביותר מההתחלה אל ) S1,j−1שכן Si,jהוא
אופטימלי ,לכן תת־המסלול אל S1,j−1הוא חלק ממסלול אופטימלי .אילו תת־המסלול לא היה אופטימלי בעצמו ,זה
אומר שיש תת־מסלול כנ”ל קצר יותר ,ואם נחליף ביניהם נקבל מסלול קצר יותר עד ,Si,jכך שהמסלול הנוכחי עד Si,j
לא היה אופטימלי ,בסתירה להנחה(.
– אם התחנה הקודמת היא :S2,j−1חייבים להגיע אליה במסלול המהיר ביותר מההתחלה אל .S2,j−1
הערה 7.2נשים לב שהפתרון האופטימלי מכיל בתוכו פתרונות אופטימליים לתתי־בעיות .כלומר קיבלנו כי הבעיה היא בעלת
תת־מבנה של אופטימליות ,דבר שמאפיין בעיות מהסוג שניתן לפתור באמצעות תכנון דינאמי.
נסמן:
הזמן המינימלי לפתרון מההתחלה ועד לתחנה .Si,j fi,j
הזמן המינימלי לבעיה כולה. ∗f
כך שמתקיים:
חישוב רקורסיבי:
נסמן:
מספר הקריאות ל־ fi,j ri,j
אם נתחיל מהסוף ,ובכל פעם נמצא את הזמן האופטימלי של תתי המסלולים ,כמה פעמים אנחנו קוראים ל־ fi,jבפתרון הבעיה?
הפתרון לזה הוא ) ,Ω(2nכך שזה לא עולה פחות מפשוט לנסות את כל האפשרויות .לא טוב...
לחילופין ־ נחשב בסדר עולה של מספרי התחנה ,שכן פתרון עבור Si,jתלוי רק בפתרונות עבור .S1,j−1 , S2,j−1
את החישוב מבצעים כפי שנראה בטבלאות )איור ) ((b־ בכל שלב מחשבים את המינימום בין שני אורכי המסלול שיתקבלו מכל
אחת משתי האפשרויות של תתי המסלול S1,j−1 , S2,j−1שכבר חישבנו.
25
ניתוח סיבוכיות:
לכל זוג i, jאנחנו צריכים לבצע 2חישובים )אחד לכל אפשרות למצב הקודם ממנו הגענו( ,לכן סך הכל נעשה ) O(nחישובים .כמו
כן ,כיוון שצריך לשמור רק את שני הפתרונות לתתי־הבעיות הקודמות )עבור האפשרויות משלב (j − 1בכל שלב ,נצטרך ) O(1מקום,
ואם נשמור גם את הקודם במסלול )הטבלה הימנית מבין השתיים באיור ) ((bעל מנת שנוכל להרכיב בסוף את המסלול האופטימלי
בפס הייצור ,נצטרך סך הכל ) O(nמקום.
• ) A1 × (A2 × A3־ העלות תהיה(p1 × p2 × p3 ) + (p0 × p1 × p3 ) = 100 × 5 × 50 + 10 × 100 × 50 = 75, 000 :
ניתן לראות אם כן שלסדר בו אנו כופלים את המטריצות יש השפעה גדולה על מספר הפעולות הדרושות לחישוב המכפלה על סדרת
המטריצות.
המטרה :נתון וקטור מימדים .p0 , p1 , p2 , ..., pnמצאו סדר כפל מטריצות אופטימלי עבור מט' במימדים אלו.
n
4
)) Ω( (n−1למעוניינים ,הפתרון של זה נובע מפתרון נוסחת נסיגההערה 7.3מספר האופנים האפשריים לכפל nמטריצות הוא ) 3/2
של מספרי קאטאלן( ,כלומר אקספוננציאלי ב־ ,nלכן בדיקת כל האפשרויות היא לא פתרון טוב.
פתרון:
נסמן:
המטריצה המתקבלת מהמכפלה .Ai × Ai+1 × ... × Aj Ai...j
על מנת למצוא פתרון לבעיה ,ננסה לאפיין את התכונות של המכפלה האופטימלית .עבור המכפלה Ai...jאם החלוקה
) (Ai...k ) × (Ak+1...jהיא אופטימלית ,אז גם הסדר הפנימי של המכפלה ) (Ai...kהוא אופטימלי )בסופו של דבר ,לכל סידור פנימי
המטריצה המתקבלת מהמכפלה Ai...kהיא זהה ,ובפרט בעלת אותם מימדים .לכן אילו הסידור עבור Ai...kלא היה אופטימלי ,היה
26
סידור אחר ,טוב יותר ,כך שהיינו יכולים להשתמש בו במכפלה Ai...jולקבל מספר פעולות כולל קטן יותר ,בסתירה לכך שהחלוקה
) (Ai...k ) × (Ak+1...jהיא אופטימלית(.
כלומר בסדר אופטימלי על ,Ai...jאם נקודת הפירוק היא kאזי גם Ai...kחייב להיות בסדר אופטימלי ,וכן גם Ak+1...jחייב
להיות בסדר אופטימלי .על כן ,קיבלנו כי הבעיה היא בעלת תת־מבנה של אופטימליות.
נסמן:
מספר הפעולות המינ' למכפלה ,Ai...jונגדיר .mi,i = 0 mi,j
כך שמתקיים:
0 i=j
mi,j =
min (mi,k + mk+1,j ) + pi−1 × pk × pj i<j
i≤k<j
הערה min (mi,k + mk+1,j ) 7.4הוא מספר הפעולות המינימלי לחישוב מכפלת שני החלקים ) (Ai...k ), (Ak+1...jעל פני כל
i≤k<j
החלוקות האפשריות )ערכי kהאפשריים( ,ו־ pi−1 × pk × pjזו העלות של מכפלת המטריצות . Ai...k × Ak+1...j
} | {z } | {z
pi−1 ×pk pk ×pj
חישוב רקורסיבי:
גם כאן אם נתחיל מהסוף )כלומר מ־ ,(m1,nובכל פעם נמצא את הזמן האופטימלי של תתי המכפלות נגיע לפתרון אקספוננציאלי.
מתתי המכפלות הקטנות ביותר ,ונחשב באמצעותן את כל תתי המכפלות הגדולות יותר ,נגיע לפתרון טוב לעומת זאת ,אם נתחיל
יותר .יש לנו רק ) n2 = Θ(n2תתי־בעיות לפתור ,כיוון שנרצה לדעת מהו מס' הפעולות המינימלי עבור כל זוג אינדקסים ) i, jכך
ש־ .(i < jכיוון שבמקרה זה מדובר במספר ריבועי של פתרונות ,זה סביר לשמור את כל הפתרונות של תתי־הבעיות )חשוב לשים
לב שזה לא תמיד המצב!( .כמו כן ,נוכל באמת להתחיל מפתרון תתי־הבעיות הקטנות ,ולפתור באמצעותן את תתי־הבעיות הגדולות
יותר ,כיוון שכל בעיה משתמשת רק בפתרונות של בעיות עם אינטרוול )כלומר | (|i − jקטן יותר.
האלגוריתם:
נחשב את ערכי mi,jבסדר עולה של ערכי ) j − iמתבטא באלגוריתם הנ”ל בתור ,lאורך סדרת המטריצות( ,ולכל זוג i, jנשמור את
ה־ kעבורו קיבלנו את הערך המינימלי ל־ .mi,j
לדוגמה :עבור המטריצות A1 , ..., A6הבאות נקבל את החלוקה ) (A1 × (A2 × A3 )) × ((A4 × A5 ) × A6כפי שניתן לראות מהחישוב
הבא:
27
על מנת להגיע לפירוק האופטימלי ,מתחילים מראש הפירמידה ,Sומוצאים את תתי־הפירוקים האופטימליים:
• עבור i = 1, j = 6קיבלנו כי ,k = 3לכן הפירוק הוא.A1...6 = A1...3 × A4...6 :
• עבור i = 1, j = 3קיבלנו כי ,k = 1לכן הפירוק הוא.A1...3 = A1 × A2...3 = A1 × (A2 × A3 ) :
• עבור i = 4, j = 6קיבלנו כי ,k = 5לכן הפירוק הוא.A4...6 = A4...5 × A6 = (A4 × A5 ) × A6 :
ניתוח סיבוכיות:
אנחנו צריכים לבצע ) O(n2חישובים של תתי־בעיות ,כאשר לכל אחת צריך לבצע את החישוב לכל ערך אפשרי של ,kלכן סך הכל
ב־) .O(n3כמו כן ,כפי שהסברנו קודם ,כיוון שצריך לשמור את כל הפתרונות לתתי־הבעיות הקטנות היותר בכל שלב ,נצטרך ) O(n2
מקום.
של ב־Algorithm Design ־ עימוד סדרות /רצפים )פרק 6 Sequence Alignment דוגמה 3־ 7.4
(KT
כשאנחנו כותבים טקסט עם שגיאות במנוע חיפוש כמו גוגל למשל ,הוא יודע לתקן אותנו .לדוגמה ,אם נכתוב ,ocurranceנקבל
בתגובה ? .did you mean occurrenceאיך זה עובד? נשים לב שבדוגמה זו ,אם נשווה אות־אות ,נקבל שישנה גם החלפה )במקום
aאמורה להופיע האות ,(eוגם פער )חסרה cאחת(:
נרצה לדעת מהו העימוד )הדרך להעמיד את המילים אחת מעל השניה( כך שמספר השינויים הוא מינימלי )כך שהמרחק בין המילה
שכתבנו למילה החוקית הוא מינימלי(.
יש כמובן הרבה עימודים אפשריים ,למשל גם העימוד הבא הוא עימוד תקין:
אבל קל לראות שהוא אינו מינימלי ,כיוון שהוא דורש יותר שינויים )יש יותר החלפות ופערים( מאשר העימוד הראשון שהצענו.
מה לגבי זוג המילים הבא:
abbbaabbbbaab
ababaaabbbbbab
28
האם העימוד המוצע למטה הוא אופטימלי?
נסמן:
קנס לפער δ
קנס לעימוד של תו pמול תו ) qנגדיר בד”כ (αpp = 0 αpq
הערה 7.7כאשר אינדקס של תו לא נכלל בזיווג נקבל פער .למשל עבור המילים ,x = stopו־ ,y = topsהעימוד
}) M = {(2, 1), (3, 2), (4, 3מיוצג באופן הבא:
ניתן לראות ש־ i = 1לא מופיע בעימוד ,כך שקיבלנו פער עבור התו sבמילה ) stopבאופן דומה j = 4לא מופיע ,וקיבלנו פער
עבור sבמילה .(tops
∈ ) (m, nונניח בשלילה ש־ xmו־ ynשניהם נכללים בזיווג .כלומר ,יש i < m, j < nכך הוכחה) :הוכחת הלמה( נניח / M
ש־ (i, n) ∈ Mו־ .(m, j) ∈ Mקיבלנו זוג חוצה ,בסתירה להגדרה של עימוד.
פתרון:
נסמן:
המחיר המינימלי של עימוד ) x = (x1 ...xmמול ) .y = (y1 ...yn )opt(i, j
מהמסקנה ,בעימוד אופטימלי:
.1אם :(i, j) ∈ Mנשלם αxi yjונעמיד את x1 ...xi−1מול .y1 ...yj−1
.2אם iלא ב־ :Mנשלם δונעמיד את x1 ...xi−1מול .y1 ...yj
.3אם jלא ב־ :Mנשלם δונעמיד את x1 ...xiמול .y1 ...yj−1
כך שהמחיר של העימוד האופטימלי יחושב רקורסיבית באופן הבא ):(opt(0, 0) = 0
)αxi yj + opt(i − 1, j − 1
opt(i, j) = min )δ + opt(i, j − 1
)δ + opt(i − 1, j
29
חישוב רקורסיבי:
נוכל לשמור את הערכים של ) opt(i, jלכל זוג i, jבמטריצה בגודל .m × nנשים לב שע”מ לחשב את ערך התא המתאים ל־i, j
עלינו למצוא את הערכים המתאימים לזוגות ) (i − 1, j) ,(i − 1, j − 1ו־) .(i, j − 1לכן נוכל להתחיל למלא את המטריצה מהפינה
השמאלית העליונה ,ולהתקדם באלכסון למטה וימינה )כלומר בסדר עולה של ,(i, jכך שבכל פעם שנחשב ערך חדש ,יהיו לנו כבר
הערכים הקודמים הדרושים לחישוב.
לדוגמה :עבור המילים nameו־ ,meanנניח את שיטת הקנסות הבאה :העלות של פער תהיה .δ = 2כמו כן ,עבור התאמה של
עיצור ועיצור או תנועה ותנועה ,α = 1וכן עבור התאמה של עיצור ותנועה .α = 3נמצא באמצעות מטריצה )כמתואר לעיל(
את המסלול הקצר ביותר מ־) (0, 0לכל זוג ):(i, j
שחזור המסלול מ־) (4, 4אחורה אל ) (0, 0ייתן לנו את העימוד האופטימלי.
ניתוח סיבוכיות:
אנחנו צריכים לבצע ) O(mnחישובים של תתי־בעיות ,וכל אחת תעשה בזמן קבוע בהנתן הערכים של תתי הבעיות הקודמות הדרושות,
לכן סך הכל ב־) .O(mnבנוגע לסיבוכיות הזכרון ,אם נרצה לדעת את הפתרון בלבד )כלומר את המחיר המינימלי של העימוד( נצטרך
)) O(min(m, nמקום ,אך אם נרצה למצוא את העימוד עצמו ,נצטרך ) O(mnמקום )לידע כללי :יש אלגוריתמים יותר מתוחכמים
שמאפשרים לשחזר את העימוד בסיבוכיות מקום לינארית של ) ,O(m + nאבל לא נלמד אותם במסגרת הקורס(.
סיכום 7.5
דוגמה לבעיה שאין בה תת־מבנה של אופטימליות:
uעם מספר קשתות מינימלי. תחילה נתבונן בבעיה הבאה :בהנתן שני צמתים u, vבגרף ,מצא מסלול v
ברור שכאן יש תת־מבנה של אופטימליות שכן לכל צומת wבמסלול מ־ uל־ ,vנוכל לחלק את הבעיה לתתי הבעיות:
.1המסלול בעל מספר הקשתות המינימלי מ־ uל־w
.2המסלול בעל מספר הקשתות המינימלי מ־ wל־v
uעם מספר קשתות מקסימלי היא בעלת תת־מבנה של האם גם הבעיה :בהנתן שני צמתים u, vבגרף ,מצא מסלול פשוט v
אופטימליות?
התשובה היא שלא .למשל בגרף הבא:
uהארוך ביותר הוא .u → x → w → vלעומת זאת ,אילו נחלק את המסלול לתתי מסלולים )למשל ב־ ,(wונמצא המסלול v
wנקבל את ,w → x → vכך uאת ,u → x → wועבור v לכל אחד מהם את המסלול הפשוט הארוך ביותר ,נקבל עבור w
שאיחוד המסלולים נותן מסלול שאינו פשוט u → x → w → x → v :ולכן לא פותר את הבעיה.
30
:Dynamic קריטריונים ל־Programming
.1תת־מבנה של אופטימיליות ־ כל בעיה ניתן לחלק לתתי־בעיות קטנות יותר ,כך שהפתרון האופטימלי לבעיה הגדולה מורכב
מפתרונות אופטימליים לתתי־הבעיות הקטנות .כמו כן ,בניגוד לאלגוריתמים חמדניים בהם אנחנו עובדים Top-Downובכל
פעם מצמצמים את גודל הבעיה שאנחנו עובדים איתה ,כאן אנחנו עובדים ,Buttom-Upובכל שלב מחלקים את הבעיה לבעיות
קטנות ,ופותרים קודם אותן.
החלק העיקרי והמורכב ביותר בפתרון בעיות מסוג זה הוא זיהוי תתי־הבעיות ,ופונקציית המטרה .לאחר בניית פונקציית
המטרה קל יחסית לבנות את פונקציית האופטימיזציה באופן רקורסיבי ,ולגזור את סדר הפעולות שייתן מימוש יעיל.
.2תתי־בעיות חופפות /חוזרות ־ נרצה להיות מסוגלים להשתמש שוב ושוב באותן תתי־הבעיות ,על מנת שאלגוריתם ששומר את
פתרונות תתי־הבעיות יהיה יעיל.
.3שחזור פתרון אופטימלי ־ בנוסף למציאת הערך המינימלי עצמו ,נרצה לשמור אינפורמציה נוספת שמאפשרת לנו לשחזר את
הפתרון שנותן את אותו ערך מינימלי ,ולכן הוא אופטימלי )למשל בבעיית פס הייצור שמרנו מצביע למכונה הקודמת שאפשר
לנו לשחזר את המסלול שנתן עלות מינימלית ,בבעיית העימוד שמרנו מצביע לזוג i.jהקודם שאפשר לנו לשחזר את העימוד
שנתן קנס מינימלי ,וכו'(.
ממואיזציה
שיטה שמאפשרת לעבוד Top-Downולהשיג יעילות של אלגוריתמי Buttom-Upע”י כך שבפעם הראשונה שנתקל בתת־בעיה כלשהי
נחשב את הפתרון שלה ,ולאחר מכן נשמור אותו לשימוש חוזר בעתיד .באופן זה ,בכל פעם שנתקל בתת־בעיה שכבר נתקלנו בה
בעבר )ועל כן חישבנו את פתרונה( ,במקום לחשב את הפתרון מחדש ,נשתמש בפתרון השמור.
הערה 7.9אז מתי עדיף לעבוד Buttom-Upומתי עדיף לעבוד Top-Downעם ממואיזציה?
• חסרון לממואיזציה הוא הצורך לשמור את הפתרון של תתי־הבעיות ,דבר שיכול להיות בעייתי במקרה שבו יש מס' גדול של
תתי־בעיות )וכפי שראינו ,לעיתים במבנה של Buttom-Upניתן להמנע משמירת כל תתי־הפתרונות(.
• יתרון לממואיזציה הוא שבמקרים מסוימים יש תתי־בעיות שלא נצטרך לפתור כלל על מנת לפתור את הבעיה הגדולה ,ובאמצעות
ממואיזציה נוכל לחסוך את חישוב הפתרונות לתתי־בעיות אלו.
כלומר ,אם נצטרך בכל מקרה לחשב את כל הפתרונות של תתי־הבעיות )כמו באלגוריתמים שראינו כאן( ,נעדיף פתרונות
,Buttom-Upואילו אם ניתן לפתור את הבעיה ללא חישוב כל הפתרונות ,ונוכל לשמור )מבחינת המקום הדרוש( את תתי־
הבעיות הנחוצות לפתרון ,נעדיף לעבוד Top-Downעם ממואיזציה.
31
(Single-Source־ פרק 24 )Shortest Paths 8מסלולים קצרים ביותר ממקור יחיד
בספר
הקדמה 8.1
הגדרה 8.1נגדיר את ) δ(u, vלהיות המשקל המינימלי של מסלול pמ־ uל־ ,vבאופן הבא:
p
(
min{w(p) : u v} if there is a path f rom u to v
= )δ(u, v
∞ otherwise
לדוגמה :האיור הבא מתאר את ערכי המשקלים המינימליים )מסומנים בתוך הצמתים( של מסלולים קצרים ביותר מ־ sלכל צומת
אחר בגרף .הסימון ∞ −מייצג מצב שבו אין מסלול קצר ביותר )כיוון שיש מעגל בעל משקל שלילי ,ואז לא ניתן לבחור מסלול
קצר ביותר ,שכן לכל מסלול שנבחר ,נוכל להוסיף את המעגל ,ובכך להקטין את משקל המסלול( .כמו כן ,נשים לב שקבוצת
הצמתים שאינם נגישים מ־ sהם בעלי משקל ∞ כפי שהוגדר למעלה.
למה 8.2תת מסלול של מסלול קצר ביותר הוא בעצמו קצר ביותר.
הוכחה :יהי pמסלול קצר ביותר ויהי psubתת־מסלול שלו .בדומה למה שראינו בשיעור הקודם על תת־מבנה של אופטימליות ,נניח
בשלילה שקיים תת־מסלול קצר יותר ,נסמנו ,p0subאזי ניתן להחליף במסלול המקורי pאת תת־המסלול psubהנתון בתת־המסלול
הקצר יותר p0subשקיים מההנחה .אם כן ,הרי שקיבלנו מסלול p0קצר יותר מ־ ,pבסתירה לכך שהמסלול המקורי pקצר ביותר.
טענה 8.3בלי הגבלת הכלליות ,אם pמסלול קצר ביותר אז אין בו מעגלים.
הוכחה :נניח בשלילה שקיים > p =< v0 , ..., w, ..., w, ..., vnמסלול קצר ביותר מ־ v0ל־ .vnונסמן > c =< w, ..., wתת־המסלול
של pשהוא מעגל .נחלק למקרים:
• אם ,w(c) < 0אז נוכל לבנות מסלול שחוזר על המעגל cכל מספר של פעמים ,כך שתמיד אורך המסלול מתקצר .לכן אין
מסלול קצר ביותר )תמיד יהיה מסלול קצר יותר ,ונוכל לבנות אותו ע”י הוספת עוד חזרה על המעגל( ,ובפרט pאינו מסלול
קצר ביותר.
• אם ,w(c) > 0אז נוכל למחוק את המעגל מהמסלול ) pכלומר להשאיר רק את wפעם אחת(p0 =< v0 , ..., w, ..., vn > :
ובכך לקצר את המסלול .לכן בפרט pאינו מסלול קצר ביותר.
• אם ,w(c) = 0אז המסלול עם המעגל והמסלול ללא המעגל שניהם מסלולים קצרים ביותר ,ומכאן שניתן לבחור תמיד במסלול
ללא המעגל )לכן הטענה אומרת בלי הגבלת הכלליות(.
טענה 8.4בלי הגבלת הכלליות ,מק”ב מכיל לכל היותר |V | − 1קשתות )| |Vצמתים(.
הוכחה :אם המסלול מכיל יותר מ־| |Vצמתים ,אז יש בו במעגל ,בסתירה לטענה הקודמת.
32
הגדרה 8.5באופן דומה להגדרה מאלגוריתם ה־ ,BFSנגדיר ) Gπ = (Vπ , Eπבאופן הבא:
}Vπ = {v ∈ V |π(v) 6= N IL} ∪ {s
הגדרה 8.6עץ מסלולים קצרים ביותר בעל שורש s ∈ Vהוא תת גרף ) ,V 0 ⊆ V, E 0 ⊆ E ,G0 = (V 0 , E 0כך ש:
V 0 .1מכיל את כל הצמתים v ∈ Vכך שיש מסלול קצר ביותר מ־ sל־.v
הערה 8.7כפי שניתן לראות בדוגמה הנ”ל ,עץ מק”בים אינו בהכרח יחיד )הקשתות המודגשות באיור ) (bובאיור ) (cמהוות שני עצי
מק”בים שונים לאותו גרף ,שבאיור ).((a
כך שבאתחול נקבל לכל צומת שאינו sכי ).v.d = ∞ ≥ δ(s, v
לאחר מכן בתהליך ההקלה של קשת ) ,(u, vאם אפשר לשפר את המק”ב שמצאנו עד כה ,מעדכנים את שדה הקודם ואת האומדן
באופן הבא:
33
.2באיור ) (bתהליך ההקלה אינו משפיע ,שכן האומדן של vקטן יותר מזה שניתן יהיה לקבל ממסלול שעובר ב־).(u, v
למה ) 8.8אי שיוויון המשולש( לכל (u, v) ∈ Eמתקיים כי )) .δ(s, v) ≤ δ(s, u) + w(u, vההוכחה טריוויאלית ,רק דורשת חלוקה
למקרים השונים(.
וזה מש”ל.
.2נשים לב שפעולת ה־ relaxרק מקטינה את .v.dכעת לפי .v.d ≥ δ(s, v) ,1לכן לא ייתכן כי ) ,v.d < δ(s, vומכאן שמרגע
שנקבל כי ) ,v.d = δ(s, vכיוון שכאמור פעולת ה־ relaxרק מקטינה את ,v.dנקבל כי הערך של v.dלא יכול להשתנות עוד.
מסקנה ) 8.10תכונת (No-pathאם אין מסלול מ־ sל־ vאזי תמיד ∞ = .v.d
הוכחה :לפי .v.d ≥ δ(s, v) ,1כמו כן ,אם אין מסלול מ־ sל־ vמתקיים ∞ = ) ,δ(s, vלכן סך הכל ∞ = ) v.d ≥ δ(s, vומכאן
ש־∞ = .v.d
sמסלול קצר ביותר .אם מתקיים כי ) u.d = δ(s, uבזמן כלשהו לפני שבוצע relaxעל למה ) 8.11תכונת התכנסות( נניח u → v
הקשת ) ,(u, vאזי ) v.d = δ(s, vבכל זמן לאחר ה־ relaxלקשת ).(u, v
הוכחה :מההנחה ,כאשר עושים relaxלקשת ) (u, vמתקיים כבר כי ) .u.d = δ(s, uכמו כן ,נשים לב ש־)δ(s, u) + w(u, v) = δ(s, v
sגם קצר ביותר .כעת ,אם בביצוע ה־ relaxמתקיים כי sמסלול קצר ביותר ,ולכן תת־המסלול u כיוון ש־u → v
) ,v.d > u.d + w(u, vאז משנים את ,v.dוכיוון ש־) ,u.d + w(u, v) = δ(s, u) + w(u, v) = δ(s, vלאחר ה־ relaxנקבל
) .v.d = δ(s, vכמובן שאם לא משנים את v.dסימן שכבר התקיים כי ) ,v.d = δ(s, vואז זה נשאר נכון.
34
למה ) 8.12תכונת הקלת מסלולים( נניח > p =< v0 , ..., vnמסלול קצר ביותר מ־ s = v0ל־ .vnאם בסדרת פעולות ה־ relaxיש
תת־סדרה של פעולות relaxבסדר ,relax(v0 , v1 , w), relax(v1 , v2 , w), ..., relax(vn−1 , vn , w) :אזי ) .vn .d = δ(s, vn
הוכחה :נובע מהלמה הקודמת של תכונת ההתכנסות )כל פעם מקבלים עבור הקשת ) (vi−1 , viשלפני ה־,vi−1 .d = δ(s, vi−1 ) relax
ולכן כשעושים את ה־ relaxעל ) (vi−1 , viמקבלים שמעכשיו גם ) vi .d = δ(s, viוכו'(.
האלגוריתם 8.4.2
הערה 8.13שורה 6למעשה בודקת האם פעולת relaxנוספת תקטין את הערך של .v.dנשים לב שאילו אין מעגלים שליליים בגרף,
לאחר |V | − 1סבבים של פעולות relaxעל כל הקשתות כל המשקלים חייבים להיות מינימליים .לכן ,אם ניתן לבצע relaxשיקטין
את ,v.dאזי המשמעות היא שלא התכנסנו עדיין למשקלים קטנים ביותר ,ומכאן שיש מעגל שלילי בגרף.
35
ניתוח סיבוכיות 8.4.4
הלולאה הראשונה )שורות 4־ (2נעשית ב־)| ,O(|V | × |Eואחריה הלולאה השניה )שורות 7־ (5נעשית ב־)| .O(|Eלכן סך הכל
הסיבוכיות היא )|.O(|V | × |E
k
P
נשים לב ש־vi .d = v1 .d + v2 .d + ... + vk−1 .d + vk .d
i=1
k
P
וכן ש־vi−1 .d = v0 .d + v1 .d + v2 .d + ... + vk−1 .d
i=1
k
P k
P
.נוכל לבטל את הביטויים הללו בשני האגפים באי = vi .d כעת ,מכך ש־ ,v0 = vkהרי שלמעשה מתקיים כי vi−1 .d
i=1 i=1
k
,בסתירה לכך שהמעגל cשלילי .לכן הנחת השלילה שגויה ,ו־ BFמחזיר
P
השיוויון המסומן ב־)∗( ,ונקבל כי w(vi−1 , vi ) ≥ 0
i=1
.False
36
האלגוריתם 8.5.2
הערה 8.16שימוש מעניין באלגוריתם הוא למציאת מסלולים קריטיים בניתוח PERT) PERT chartsזה ראשי תיבות ל־program
.(evaluation and review techniqueבגרף כזה קשתות מייצגות עבודות שיש להשלים ,והמשקלות את הזמן הדרוש ע”מ להשלימן.
אם קשת ) (u, vנכנסת לצומת vוקשת ) (v, xיוצאת מ־ ,vאזי חייבים לבצע את עבודה ) (u, vלפני שניתן להתחיל את עבודה
) .(v, xמסלול קריטי הוא המסלול הארוך ביותר של קשתות בגרף ,ונותן חסם תחתון למשך הזמן שבו ניתן להשלים את כל העבודות
בפרוייקט.
• דרך אחת למצוא את המסלול הקריטי היא ע”י שלילת המשקלים )כפל המשקל במינוס (1ושימוש באלגוריתם Dag-Shortest-
.Paths
• דרך שניה היא לבצע מספר שינויים באלגוריתם Dag-Shortest-Pathsלפני הרצתו :מחליפים את ∞ ב־∞ −בשורה 2של
אלגוריתם האתחול ,ואת > ב־< באלגוריתם ה־.relax
מציאת המסלול הקריטי חשובה כיוון שהיא מוצאת לאילו עבודות בפרוייקט יש ”מקום תמרון” בזמני הביצוע ,בעוד שבעבודות אשר
מהוות חלק מהמסלול הקריטי ,עמידה בזמנים היא הכרחית.
37
האלגוריתם 8.6.2
38
sהוא מק”ב )שכן הוא תת־מסלול של מק”ב( .כמו כן ,נשים לב ש־)) x.d = δ(s, xשכן uהצומת הראשון נבחין כי x
עבורו זה לא מתקיים ,והוספנו את xל־ Sלפני שהוספנו את .(uלכן ,מתכונת ההתכנסות ,אחרי שהוספנו את xל־S
וביצענו ) ,relax(x, y, wהתקיים ) .y.d = δ(s, yכעת אם u = yקיבלנו סתירה לכך ש־) .u.d 6= δ(s, uנניח אם כן
ש־.u 6= y
מכך ש־ uנבחר ב־ extract-minלפני ,yהרי שהתקיים .u.d ≤ y.dבנוסף ,מכך ש־ yצומת בדרך ל־ uבמק”ב ,p
והמשקלים של הקשתות כולם אי־שליליים ,הרי שמתקיים ) .δ(s, y) ≤ δ(s, uסך הכל קיבלנו כי:
כלומר קיבלנו כי ) ,δ(s, y) > δ(s, yוזו כמובן סתירה .לכן הנחת השלילה שגויה ,ומתקיים כי ) u.d = δ(s, uכש־ uנוסף
ל־ ,Sכדרוש.
39
(Dierence Constraints and Shortest 9אילוצי הפרשים ומסלולים קצרים ביותר
) Paths־ המשך פרק 24בספר
הקדמה ־ תכנון לינארי )(Linear Programming 9.1
במקרה הכללי של בעיית תכנון לינארי נתונים מטריצה Aוקטור bבאורך ,mווקטור cבאורך .nהמטרה היא למצוא וקטור x
m×n
n
P
מקבלת ערך מקסימלי ,בהנתן mהאילוצים הנתונים ע”י .Ax ≤ bכלומר ,כל שורה באורך nשעבורו פונקציית המטרה ci xi
i=1
במטריצה Aיחד עם האיבר המתאים מ־ bמהווה אילוץ על הערכים האפשריים של .xלמשל ,עבור השורה ה־ kשל מטריצה Aצריך
m
P
. להתקיים aki xi ≤ bi
i=1
במקרה שאנו נדון בו ערכה של פונקציית המטרה כלל לא חשוב ,ונרצה רק למצוא פתרון אפשרי שמקיים את האילוצים.
למה 9.1יהי > x =< x1 , x2 , ..., xnפתרון למערכת Ax ≤ bשל אילוצי הפרשים ,ויהי dקבוע כלשהו.
אזי > x + d =< x1 + d, ..., xn + dגם הוא פתרון ל־.Ax ≤ b
הוכחה :לכל xi , xjמתקיים ,(xj + d) − (xi + d) = xj − xiלכן אם xמקיים את ,Ax ≤ bאז גם x + dמקיים זאת.
המתאים הוא גרף מכוון משוקלל גרף האילוצים )(Constraint Graph הגדרה 9.2בהנתן מערכת Ax ≤ bשל אילוצי הפרשים,
) ,G = (V, Eשבו:
הערה 9.3הצומת v0צורף לגרף כדי להבטיח שכל צומת אחר נגיש ממנו .שאר הצמתים מייצגים נעלמים ,xiוהקשתות מייצגות את
אילוצי ההפרשים ,כך שאם xj − xi ≤ bkהוא אילוץ אז מתקיים .w(vi , vj ) = bkמשקל הקשתות היוצאות מ־ v0הוא .0
40
למשל ,עבור המערכת מהדוגמה הנ”ל ,גרף האילוצים יהיה:
משפט 9.4בהנתן מערכת אילוצי הפרשים ,Ax ≤ bיהי ) G = (V, Eגרף האילוצים המתאים .אם Gאינו מכיל מעגל שלילי אז:
)) x = (δ(v0 , v1 ), δ(v0 , v2 ), δ(v0 , v3 ), ..., δ(v0 , vn
הוא פתרון אפשרי של המערכת .אם Gמכיל מעגל שלילי ,אזי לא קיים עבור המערכת פתרון המקיים את האילוצים.
הוכחה :נניח שאין מעגלים שליליים שנגישים מ־ ) v0לכן ,אין מעגלים שליליים כלל ,כי כל צומת נגיש מ־ .(v0מאי־שיוויון המשולש,
מתקיים לכל i, jכי ,δ(v0 , vj ) ≤ δ(v0 , vi ) + w(vi , vj ) :או באופן שקול.δ(v0 , vj ) − δ(v0 , vi ) ≤ w(vi , vj ) ,
לכן ) xi = δ(v0 , vi ), xj = δ(v0 , vjמקיימים את אילוץ ההפרשים ) xj − xi ≤ w(vi , vjהמתאים לקשת.
} | {z
bk
כעת ,נניח שיש מעגל שלילי ,שאינו כולל את ) v0אין קשתות שנכנסות ל־ ,v0כך שלא ייתכן שהוא חלק ממעגל( .נניח בה”כ
שהמעגל הוא > ,c =< v1 , v2 , ..., vkכך ש־ .vk = v1המעגל cמתאים למערכת האילוצים הבאה:
נשים לב שאם נסכום את כל אי־השיוויונות ,אי השיוויון חייב להשמר ,וכיוון שמחסרים ומוסיפים כל xiפעם אחת )כולל את ,x1
k−1
P
≤ .0 כי הרי ,(xk = x1נקבל 0באגף שמאל ,ואת משקל כל הקשתות של המעגל מצד ימיןw(vi , vi+1 ) = w(c) :
i=1
כלומר ,קיבלנו כי משקל המעגל הוא אי־שלילי ,בסתירה להנחה שזה מעגל שלילי )כלומר מתקיים .(w(c) < 0
־ פרק 25בספר מסלולים קצרים ביותר בין כל הזוגות )(All Pairs Shortest Paths 10
הקדמה 10.1
כמעט בכל האלגוריתמים בפרק זה הקלט הוא גרף ) G = (V, Eממושקל ,המיוצג ע”י מטריצת שכנויות )ולא רשימת שכנויות( ,כך ש:
הערה 10.1מבנה הקלט לא משנה כאשר עלות המעבר ממבנה אחד לאחר קטנה מעלות האלגוריתם ,אבל בכל זאת נתייחס לקלט
כאל מטריצה.
41
טבלת הפלט של האלגוריתמים היא מטריצה ) D = (dijבגודל ,n × nכאשר התא dijמכיל את משקלו שלQהמסלול הקל ביותר
שבה πij = N IL מצומת iלצומת .jבסוף ריצת האלגוריתם יתקיים ) .dij = δ(i, jכמו כן ,נחשב גם מטריצת קודמים ) = (πij
אם i = jאו אם לא קיים מסלול מ־ iל־ .jאחרת πij ,הוא הקודם של jעל איזשהו מק”ב מ־.i
אם כל המשקלים חיוביים ,ניתן להשתמש | |Vפעמים באלגוריתם של דייקסטרה .בכל פעם נקבל שורה מהמטריצות שאותן יש
להחזיר ,ובסך הכל הסיבוכיות תהיה )| .O(|V |(|V |log|V | + |E|)) = O(|V |2 log|V | + |V ||Eלעומת זאת ,אם יש משקלים שליליים
בגרף לא נוכל להשתמש בדייקסטרה .נוכל להשתמש באלגוריתם בלמן־פורד )גם כן להריצו | |Vפעמים ,פעם אחת לכל שורה( ,ונקבל
שהסיבוכיות הכוללת תהיה )|) O(|V |2 |Eבמקרה שהגרף צפוף זה ) .(O(n4בפרק זה נראה פתרונות יעילים יותר למקרה שבו יש
משקלים שליליים.
)(m
lijלהיות אורך המסלול הקצר ביותר בין iל־ jשיש בו לכל היותר mקשתות ).(m ≥ 0 באופן כללי ,נגדיר את
באופן רקורסיבי נגדיר:
)(m−1
lijהוא אורך המסלול המינימלי מ־ iל־ jשעובר ב־ m − 1קשתות הערה 10.2בביטוי הרקורסיבי הנ”ל משתמעת החלוקה הבאה:
)(m−1
min {likהוא אורך המסלול המינימלי מ־ iל־ jשעובר ב־ mקשתות ) m − 1קשתות לכל היותר עד ,k לכל היותר ,ו־} + wkj
1≤k≤n
)(m−1
.lij ועוד הקשת מ־ kל־ .(jנשים לב שהשיוויון האחרון נובע מכך שאנו כוללים את המקרה שבו ,k = jואז מקבלים + wjj
}|{z
=0
הערה 10.3כיוון שמק”בים אינם מכילים מעגלים )ועל כן אורכם לכל היותר ,(n − 1מתקיים כי:
)(n−1 )(n )(n+1 )(n+2
δ(i, j) = lij = lij = lij = lij = ...
)(n−1
lijלכל .i, j לכן מספיק לנו לחשב את
תחילה נציג אלגוריתם ”טיפשי” שבהנתן מטריצות ) L(m−1ו־ Wמחזיר את ) ,L(mועובד בסיבוכיות ) .O(n3
42
אם נשתמש בו ) O(nפעמים מ־ m = 2ועד m = n − 1באופן הבא:
זה יעשה בסיבוכיות של ) ,O(n4וזה לא יעיל )אפילו פחות מהפתרון עם אלגוריתם בלמן־פורד(.
הבחנה חשובה היא שבפתרון הנ”ל בכל שלב הארכנו את המסלול בקשת אחת .באופן דומה לאלגוריתמים שראינו בקורסים
אחרים להעלאה יעילה של מספר בחזקה ,ניתן במקום להאריך את המסלול בכל פעם בקשת אחת לכל היותר ,להכפיל אותו ,ובכך
לצמצם משמעותית את מספר הפעמים שאנחנו מבצעים את הפעולה היקרה )את .(Extend-Shortest-Pathsאם במקום להריץ בכל
שלב את Extend-Shortest-Pathsעם Lו־ ,Wנריץ אותו תחילה עם ) (L(1) , Wונקבל את ) ,L(2ואז עם ) ) (L(2) , L(2ונקבל את
) ,L(4ואז עם ) ) (L(4) , L(4ונקבל את ) L(8וכו' ,אז נצטרך לחזור על הפעולה סדר גודל של ) log(nפעמים )במקום nפעמים( ,שכן
בכל פעם אנחנו מכפילים את :m
באופן זה נקבל שסיבוכיות הריצה תהיה )) .O(n3 log(nנשים לב שסיבוכיות הפתרון עם בלמן פורד היא )| ,O(n2 |Eלכן רק אם
דרגת היציאה הממוצעת )מספר הקשתות הממוצע שיוצא מכל צומת בגרף( הוא מסדר גודל שגדול מ־) ,log(nאז הפתרון הנ”ל יעיל
יותר מהפתרון עם בלמן פורד.
• אם kאינו צומת ביניים במסלול :אז כל צמתי הביניים במסלול pהם מהקבוצה }.{1, 2, ..., k − 1
p1 p2
.p = iכיוון שאין מעגלים במק”ב k ,אינו צומת ביניים k • אם kכן צומת ביניים במסלול :אז ניתן לפרק את pכך ־ j
ב־ p1או ב־ ) p2כי אחרת הוא חוזר פעמיים ב־ ,pובפרט יהיה מעגל( .לכן קיבלנו כי pמורכב למעשה מסכום המשקלים של
kשצמת הביניים שלו מהקבוצה }.{1, 2, ..., k − 1 iשצמתי הביניים שלו מהקבוצה } ,{1, 2, ..., k − 1ומסלול j מסלול k
)(k
לפי הבחנה זו ,נוכל להגדיר רקורסיבית את dijבאופן הבא:
(
)(k wij if k = 0
dij = )(k−1) (k−1 )(k−1
min(dij , dik + dkj ) if k ≥ 1
)(0
הערה dij 10.5הוא אורך המק”ב מ־ iל־ jשכל צומת ביניים xשלו מקיים כי ,1 ≤ x ≤ 0לכן זו הקבוצה הריקה .כלומר ,מדובר
במק”ב שאין בו כלל צמתי ביניים ,לכן משקלו פשוט שווה ל־ .wij
43
האלגוריתם 10.3.1
האלגוריתם של ג'ונסון עבור גרפים דלילים )(Johnson's Algorithm for Sparse Graphs 10.4
נתון גרף ) G = (V, Eמכוון וממושקל ,פונקצית משקל ,w : E → Rופונקציה כלשהי .h : V → Rעבור כל קשת (u, v) ∈ E
נגדיר:
) ŵ(p) = w(v0 , v1 ) + h(v0 ) − h(v1 ) + w(v1 , v2 ) + h(v1 ) − h(v2 ) + ... + w(vk−1 , vk ) + h(vk−1 ) − h(vk
) = w(v0 , v1 ) + w(v1 , v2 ) + ... + w(vk−1 , vk ) + h(v0 ) − h(vk
) = w(p) + h(v0 ) − h(vk
k
P
= ).(w(p )כי ה־) h(viמצטמצמים טלסקופית ,ו־) w(vi−1 , vi
i=1
הערה 10.6
• מכאן נובע שאילו pמק”ב לפי wאזי הוא גם מק”ב לפי ̂) wשכן כפי שראינו כעת משקלי המסלולים נבדלים רק בקבוע
) .(h(v0 ) − h(vk
• כמו כן ,אילו pמעגל שלילי לפי wאזי הוא גם מעגל שלילי לפי ̂) wשכן במצב שבו pהוא מעגל מתקיים ,v0 = vkונקבל
שהקבוע ,h(v0 ) − h(vk ) = h(v0 ) − h(v0 ) = 0כך שמתקבל השיוויון ).(ŵ(p) = w(p
כעת ,נוכל להריץ את אלגוריתם בלמן־פורד על G0מ־ sעם .wאילו קיבלנו כי יש מעגל שלילי ,נתריע על כך .אחרת ,נשתמש
בערכי δע”מ להגדיר את .hעתה נוכל להשתמש ב־̂ wולהריץ את האלגוריתם של דייקסטרה nפעמים על הגרף על מנת למצוא את
כל המסלולים הקצרים ביותר ,שכן פונקציית המשקל ̂ wהיא אי־שלילית.
44
האלגוריתם 10.4.2
45
אסימפטוטית לכל היותר ) .O(n3אם הגרף דליל ,כמובן ש־) ,n2 log(n) + n|E| = o(n3כך שזה יעיל יותר .נציין שהקבועים
באלגוריתם זה הם גדולים יותר מאשר באלגוריתם של פלויד־וורשאל ,וכן אלגוריתם פלויד־וורשאל הרבה יותר פשוט ,לכן אם הגרף
צפוף ,בפועל כנראה שנעדיף להשתמש בו )על אף שאסמפטוטית בקורס זה האלגוריתם של ג'ונסון תמיד עדיף(.
46
(Maximum־ פרק זרימה מקסימלית ורשתות זרימה )Flow and Flow Networks 11
26בספר
הקדמה ־ רשתות זרימה וזרימות 11.1
הגדרה 11.1רשת זרימה היא גרף מכוון ) G = (V, Eשבו כל קשת (u, v) ∈ Eהיא בעלת קיבול ) (capacityאי־שלילי .c(u, v) > 0
∈ ) (u, vאנחנו מניחים כי .c(u, v) = 0כמו כן ,ישנם שני צמתים מיוחדים ־ מקור ) ,(sourceמסומן ב־ ,sובור ) ,(sinkמסומןאם / E
.(sבנוסף ,נניח שאין בגרף קשתות v ב־ .tכל צומת בגרף נמצא במסלול מהמקור אל הבור )כלומר ,לכל v ∈ Vקיים מסלול t
אנטי־מקבילות )) (u, vוגם ).((v, u
הגדרה 11.3תהי ) G = (V, Eרשת זרימה )עם פונ' קיבול ,cמקור ,sובור .(tזרימה ) (owב־ Gהיא פונקציה ממשית → f : V × V
Rהמקיימת את התכונות הבאות:
הערה 11.4נסמן:
47
• יש מקור ובור יחידים ־ נניח בה”כ שיש בגרף מקור ובור יחידים .נוכל להניח זאת שכן אחרת ,אילו יש מספר מקורות ומספר
בורות )יעדים( ,אזי נוכל להוסיף זוג צמתים ”מקור־על” ו”בור־על” ,ולחבר את מקור־העל אל כל המקורות ,ואת בור־העל לכל
הבורות ,וכך נקבל גרף עם מקור יחיד ובור יחיד ,כדרוש.
u, vהקיבול השיורי בקשת מוגדר כך: הגדרה 11.6נתונה רשת ) G = (V, Eוזרימה .fעבור ∈ V
cuv − fuv
(u, v) ∈ E
cf (u, v) = fvu (v, u) ∈ E
0 otherwise
כלומר:
• עבור קשת בגרף ,הקיבול השיורי שווה לקיבול פחות ערך הזרימה )”כמה ניתן עוד להזרים”(.
• עבור הקשת ההפוכה ,הקיבול השיורי שווה לערך הזרימה בקשת שבגרף )”כמה ניתן להזרים באופן מנוגד” שזה כמובן שווה
לכמות שאנו מזרימים כרגע ־ ”כמה זרימה יש שניתן לבטל”(.
הגדרה 11.7הרשת השיורית ) Gf = (V, Efמוגדרת ע”י } .Ef = {(u, v) ∈ V × V : cf (u, v) > 0כל קשת ) (u, vב־ Efנקראת
קשת שיורית ,וקיבולה הוא ).cf (u, v
הערה 11.8נשים לב שלכל קשת ) (u, vבגרף Gיכולות להיות לכל היותר שתי קשתות שיוריות מתאימות ב־ Gf־ הקשת ) (u, vאם
,cuv 6= fuvוהקשת ) (v, uאם .fuv 6= 0לכן תמיד יתקיים | .|Ef | ≤ 2|Eכמו כן ,נבחין כי גם Gfמהווה בעצמה רשת זרימה.
הגדרה 11.9תהי fזרימה ב־ ,Gותהי f 0זרימה ב־ .Gfהגדלה ) (augmentationשל הזרימה fב־ f 0היא פונקציה
(f ↑ f 0 ) : V × V → Rהמוגדרת באופן הבא:
(
0 0
0 fuv + fuv − fvu (u, v) ∈ E
= )(f ↑ f )(u, v
0 otherwise
הגדרה 11.10תהי רשת ) G = (V, Eוזרימה fבה .מסלול מגדיל ) p (augmenting pathהוא מסלול פשוט מ־ sל־ tב־ .Gfהקיבול
השיורי של pמוגדר להיות:
48
דוגמה לרשת שיורית ולהגדלה:
• איור ) (c־ הזרימה ב־ Gכתוצאה מהגדלה לאורך מסלול pבקיבול השיורי שלו) 4 ,הסימון על הקשת ) (v3 , v2מעיד על כך
שהקיבול הוא ,9ואין זרימה בקשת כלל(.
• איור ) (d־ הרשת השיורית המתקבלת מהשינוי שנעשה באיור ).(c
49
הוכחת נכונות 11.2.3
היאf ↑ f 0 אזי.Gf זרימה ב־f 0 הרשת השיורית ותהיGf תהי.f רשת זרימה עם זרימהG = (V, E) ( תהי1 )למה11.11 למה
.|f ↑ f 0 | = |f | + |f 0 | וערכהGזרימה ב־
X X
= fuv − fvu
v∈V1 (u) v∈V2 (u)
X
0
+ fuv (unif y the sums, as V1 (u) ∩ V2 (u) = ∅)
v∈V1 (u)∪V2 (u)
X
0
− fvu
v∈V1 (u)∪V2 (u)
X X X X
0 0
= fuv − fvu + fuv − fvu
v∈V v∈V v∈V v∈V
| {z } | {z }
=0 (∗) =0 (∗∗)
=0
0
(f ↑ f 0 )(u, v) = (f ↑ f 0 )(v, u) קיבלנו כי
P P
. כדרוש,G היא זרימה ב־f ↑ f ומכאן ש־, לכן מתקיים שימור הזרימה,
v∈V v∈V
50
כעת ,לפי ההגדרה של ערך הזרימה ברשת:
X X
= | |f ↑ f 0 (f ↑ f 0 )(s, v) − )(f ↑ f 0 )(v, s
v∈V v∈V
X X
0
= (f ↑ f )(s, v) − )(f ↑ f 0 )(v, s
v∈V1 v∈V2
X X
0 0 0 0
= (fsv + fsv − fvs ) − (fvs + fvs − fsv )
v∈V1 v∈V2
X X X X X X
0 0 0 0
= fsv + fsv − fvs − fvs − fvs + fsv
v∈V1 v∈V1 v∈V1 v∈V2 v∈V2 v∈V2
X X X X X X
0 0 0 0
= fsv − fvs + fsv + fsv − fvs − fvs )(order changes
v∈V1 v∈V2 v∈V1 v∈V2 v∈V1 v∈V2
X X X X
0 0
= fsv − fvs + fsv − fvs ) (f or the last f our, same as sum over V1 ∪ V2
v∈V1 v∈V2 v∈V1 ∪V2 v∈V1 ∪V2
X X X X
0 0
= fsv − fvs + fsv − fvs ) (same as sum over V
v∈V v∈V v∈V v∈V
| = |f | + |f 0
למה ) 11.12למה (2תהי ) G = (V, Eרשת זרימה עם זרימה .fיהי pמסלול מגדיל ב־ .Gfנגדיר פונקציה fp : V × V → Rבאופן
הבא:
(
cf (p) (u, v) ∈ p
= )fp (u, v
0 otherwise
מסקנה ) 11.13מסקנה (3תהי ) G = (V, Eרשת זרימה עם זרימה .fיהי pמסלול מגדיל ב־ .Gfנגדיר fpכמו בלמה .2אם
מגדילים את fב־ fpאזי f ↑ fpהיא זרימה ב־ ,Gוערכה | ) |f ↑ fp | = |f | + |fp | > |fנובע מיידית משתי הלמות הקודמות(.
הערה 11.14נשים לב שנובע מכך כי אילו הערכים שלנו כולם שלמים ,אז אלגוריתם פורד־פולקרסון בהכרח מגדיל את fלפחות ב־1
בכל מעבר על מסלול מגדיל .מכאן נובע גם כי מספר הפעמים שנמצא מסלול מגדיל ≥ | .|fmax
הגדרה 11.15חתך ) (S, Tברשת ) G = (V, Eהוא חלוקה של Vל־ Sול־ ,T = V \Sכך ש־ .s ∈ S, t ∈ T
הערה 11.16לכל אחד מהצמתים שאינם s, tניתן לבחור באיזה צד של החתך הם נמצאים ,לכן יש 2|V |−2חתכים אפשריים.
הגדרה 11.17עבור זרימה ,fהזרימה נטו ) (netowדרך החתך מוגדרת באופן הבא:
XX XX
= ) f (S, T fuv − fvu
u∈S v∈T u∈S v∈T
51
לדוגמה:
למה ) 11.19למה (4תהי fזרימה ב־ .Gעבור חתך ) (S, Tהזרימה נטו דרך החתך מקיימת | .f (S, T ) = |f
הוכחה:
X X
= | |f fsv − fvs
v∈V v∈V
X X X X X
= fsv − fvs + ( f uv − ) f vu
v∈V v∈V u∈S\{s} v∈V v∈V
| {z }
)∗( =0
X X X X
= (fsv + fuv ) − (fvs + ) fvu
v∈V }u∈S\{s v∈V }u∈S\{s
XX XX
= fuv − fvu )(sum over everything but s, plus s, gives sum over everything
v∈V u∈S v∈V u∈S
XX XX XX XX
(= fuv − ( fvu ) + fuv − ) fvu )∅ = (split V to S, T using : S ∪ T = V, S ∩ T
v∈T u∈S v∈T u∈S v∈S u∈S v∈S u∈S
| {z }
)∗∗( =0
XX XX
= fuv − fvu
v∈T u∈S v∈T u∈S
) = f (S, T
מסקנה ) 11.21מסקנה (5לכל זרימה fולכל חתך ) (S, Tמתקיים ) .|f | ≤ c(S, T
הוכחה:
XX XX XX XX
= ) |f | = f (S, T fuv − ≤ fvu fuv ≤ ) cuv = c(S, T
}|{z }|{z
v∈T u∈S v∈T u∈S fvu≥0 v∈T u∈S fuv ≤cuv v∈T u∈S
52
(Max-owאם fזרימה ב־ Gאזי התנאים הבאים שקולים: )משפט 6־ min-cut theorem משפט 11.22
f .1זרימה מקסימלית
הוכחה :נוכיח :2 ⇐ 1נניח fמקסימלית ,ונניח בשלילה שיש מסלול מגדיל pב־ .Gfממסקנה 3נובע כי f ↑ fpהיא זרימה בערך
גדול ממש מ־| ,|fבסתירה לכך ש־ fמקסימלית.
נוכיח :3 ⇐ 2נניח כי ברשת השיורית Gfאין מסלול מגדיל .כלומר ,נניח שאין מסלול מ־ sל־ tב־ ) Gfמההגדרה של מסלול
מגדיל( .נגדיר:
,sהרי שקיבלנו כי ,s ∈ S, t ∈ Tכך ש־) (S, Tמהווה ,sוכן הנחנו שלא קיים מסלול t נבחין כי כיוון שתמיד קיים מסלול s
חתך.
נקח .u ∈ S, v ∈ Tנחלק למקרים:
∈ ) ,(u, vונקבל כי .fuv = cuvאחרת אם ,(u, v) ∈ Efהיינו מקבלים סתירה :מכך .1אם :(u, v) ∈ Eאז בהכרח / Ef
ש־) u ∈ Sלכן הוא צומת נגיש מהמקור( ו־ ) v ∈ Tלכן הוא אינו צומת נגיש מהמקור( ,נובע כי אם היתה הקשת ,(u, v) ∈ Ef
אז היה צריך להתקיים v ∈ Sגם כן ,לפי הדרך שבה הגדרנו את הקבוצה ,Sבסתירה לכך ש־.v ∈ T \S
כלומר קיבלנו כי לכל קשת מ־ Sל־ Tמתקיים .fuv = cuv
.2אם :(v, u) ∈ Eאז בהכרח ,fvu = 0שכן אחרת היינו מקבלים כי ,cf (u, v) = fvu > 0ואז הקשת ,(u, v) ∈ Efוזה לא
ייתכן ,מאותו טיעון כמו קודם.
כלומר קיבלנו כי לכל קשת מ־ Tל־ Sמתקיים .fvu = 0
.3אחרת.fuv = fvu = 0 :
סך הכל נקבל כי:
}|f | |{z
) = f (S, T
lemma 4
XX XX
= fuv − fvu
v∈T u∈S v∈T u∈S
XX
= cuv − 0
}|{z
v∈T u∈S f rom case 2: fuv =0
| {z }
f rom case 1: fuv =cuv
) = c(S, T
נוכיח :1 ⇐ 3ממסקנה 5לכל חתך ) (S, Tמתקיים ) .|f | ≤ c(S, Tלכן אם ) |f | = c(S, Tאז בהכרח fמקסימלית.
טענה 11.23אם כל הקיבולות מספרים שלמים אזי אלגוריתם פורד־פולקרסון יסיים עם תוצאה נכונה .ללא הוכחה.
53
דוגמת הרצה 11.2.4
סך הכל ,נקבל כי ללא הגדרה מסוימת לאופן בו מוצאים את המסלול המגדיל ,אלגוריתם ממשפחה זו יכול לבצע )| O(|fmax
איטרציות ,כך שכל איטרציה דורשת )| O(|Eעבודה ,לכן נקבל שהסיבוכיות הכוללת חסומה ב־)| O(|E||fmaxאם כל המספרים
שלמים .יש לציין כי אם נקח קיבולות לא שלמות ,יכול להיות שהאלגוריתם לא יעבוד כלל )יחזיר את הערך הלא נכון( ,או לא יסיים
לעולם.
הערה 11.24יש לציין שלכל קשת אותו משקל ,ואנחנו לא מבצעים חיפוש של מסלול בעל משקל קצר ביותר או משהו בסגנון ,אלא
מחפשים מסלול קצר ביותר רגיל )כלומר בעל מספר קשתות מינימלי( ,כפי שראינו בתחילת הקורס באלגוריתם .BFS
54
ניתוח סיבוכיות 11.3.2
נוכיח מספר למות שיובילו אותנו לכך שהאלגוריתם מבצע )| O(|V ||Eהוספות זרימה )כלומר מציאת מסלול מגדיל והוספת הזרימה
בו לזרימה הנוכחית(.
למה 11.25יהיו רשת זרימה ) ,G = (V, Eמקור sובור .tאזי המרחק בקשתות ברשת השיורית Gfבין sל־ ,vלכל },v ∈ V \{s, t
לא יקטן בין איטרציות של אלגוריתם אדמונדס־קארפ )כלומר הוא יכול רק לגדול(.
הוכחה :תהי רשת זרימה ) .G = (V, Eנסמן ב־) δf (s, vאת המרחק )מספר הקשתות( בין צומת sלצומת vכלשהו.
נניח בשלילה כי במהלך הרצת אלגוריתם אדמונדס־קארפ קיימת איטרציה בה לאחר הוספת המסלול המגדיל ,המרחק בין s
לצומת } v ∈ V \{s, tכלשהו קטן .נסמן ב־ fאת הזרימה לפני הוספת המסלול המגדיל בפעם הראשונה שמתקיים הנ”ל ,וב־ f 0
את הזרימה שהתקבלה לאחר ההוספה .אזי אנו מניחים כי קיים vעבורו )) δf 0 (s, v) < δf (s, vוכן שבכל איטרציה קודמת ,ולכל
,vהתקיים עד כה ) .(δf 0 (s, v) ≥ δf (s, vאילו קיימים כמה צמתים עבורם מתקיים ) δf 0 (s, v) < δf (s, vלאחר הוספת הזרימה
באיטרציה זו ,אז נבחר את vלהיות הצומת שמרחקו מ־ sלאחר ההוספה ,δf 0 (s, v) ,הוא מינימלי.
,(s כעת נסמן ב־ uאת הצומת שלפני vבמק”ב מ־ sברשת השיורית ) Gf 0כלומר המסלול הקצר ביותר מ־ sל־ vהוא u → v
כך שמתקיים )) δf 0 (s, u) + 1 = δf 0 (s, vתת־מסלול של מק”ב הוא מק”ב(.
∈ )) (u, vכאשר ) (u, vהיא הקשת האחרונה במסלול ל־ vשהגדרנו בהוכחה למעלה(.
טענה ) 11.26טענת עזר( נראה כי / Ef
הוכחה) :של טענת העזר( נניח בשלילה ש־ .(u, v) ∈ Efאזי מתקיים ) δf (s, v) ≤ δf (s, u) + 1מאי־שיוויון המשולש( .נשים לב שלא
ייתכן כי ) ,δf 0 (s, u) < δf (s, uכיוון שאם זה היה מתקיים ,אז uהיה צומת שיותר קרוב ל־ sמאשר ,vאשר מקיים את התנאי כי
) ,δf 0 (s, v) < δf (s, vוהרי בחרנו את vכך שהוא הצומת המינימלי שמקיים זאת .לכן .δf 0 (s, u) ≥ δf (s, u) ,סך הכל נקבל:
כלומר קיבלנו כי ,δf (s, v) ≤ δf 0 (s, v) − 2ובפרט ) ,δf (s, v) < δf 0 (s, vבסתירה להנחה הראשונית כי ) .δf (s, v) > δf 0 (s, vלכן
הנחת השלילה שגויה ,והלמה מתקיימת.
הגדרה 11.27קשת (u, v) ∈ Efהיא קריטית על מסלול מגדיל p ∈ Gfאם ).cf (p) = cf (u, v
10 2 8 2
לדוגמה ,במסלול ,s → u → v → w → tהקשתות ) (u, vו־) (w, tהן קשתות קריטיות ,שכן .cf (p) = cf (u, v) = cf (w, t) = 2
הערה 11.28
.1בכל מסלול מגדיל יש לפחות קשת קריטית אחת )בעלת הקיבול השיורי cfהמינימלי(.
55
.2נשים לב כי עבור רשת זרימה ) ,G = (V, Eומסלול מגדיל pשמעביר מזרימה fלזרימה ,f 0אם (u, v) ∈ Efקשת קריטית
∈ ) .(u, vכלומר ,לאחר הזרמה במסלול ,pהקשתות הקריטיות במסלול ”נעלמות” מהרשת השיורית.ב־ ,pאז / Ef 0
לכן מהרגע שבו ) (u, vקריטית ועד שהיא הופכת להיות שוב קריטית ,מרחקו של uמ־ sגדל לפחות ב־ .2כעת כיוון שהמסלול הארוך
ביותר מ־ sל־ uהוא באורך | ) |Vכי זה מק”ב( ,נקבל כי מספר הפעמים שקשת יכולה להיות קריטית הוא | , |V2כדרוש.
משפט 11.30כשמריצים ) EKאדמונדס־קארפ( על רשת זרימה ) ,G = (V, Eמקור sובור ,tאז מספר הוספות הזרימה הוא
)|.O(|V ||E
הוכחה :מהלמה ,כל קשת יכולה להיות קריטית | |V2פעמים לכל היותר .לכן סך הכל ,מספר הוספות הזרימה חסום ב־ | .|E| × |V2
הסיבה לכך היא שבכל הוספת מסלול מגדיל לזרימה ,לפחות קשת אחת הופכת מקריטית ללא־קריטית ,שכן במסלול מגדיל תמיד יש
קשת קריטית ,ולאחר ההוספה של המסלול הקשתות הקריטיות ”נעלמות” .לכן קיבלנו כי מספר הוספות הזרימה הוא )|,O(|V ||E
כדרוש.
לסיכום:
האלגוריתם מבצע )| O(|V ||Eהוספות זרימה ,כאשר הסיבוכיות למציאת מסלול מגדיל כנ”ל תהיה )|) O(|V | + |Eשכן זו הסיבוכיות
של .(BFSלכן סך הכל הסיבוכיות תהיה )| ) O(|E|2 |Vמתוך הנחה שלכל צומת יש לפחות קשת אחת ,כך ש־|.(|V | ≤ |E
הגדרה 11.31זרימה gב־ Gנקראת חוסמת ) (blockingאם בכל מסלול מ־ sל־ tיש קשת כך שהקיבול שלה שווה לזרימה ב־ gעליה
)כלומר קשת קריטית(.
הגדרה 11.32עבור רשת זרימה Gמ־ sל־ ,tנסמן ב־) L(Gאת הרשת שמכילה רק קשתות שנמצאות על מק”ב כלשהו מ־.s
הערה 11.33אפשר לחשב את ) L(Gע”י הרצת BFSמ־ sולקיחת קשתות ) (u, vעבורן מתקיים )) δ(s, u) + 1 = δ(s, vקשתות
שמחברות צמתים ברמות עוקבות בעץ ה־.(BFS
56
תיאור אבסטרקטי של האלגוריתם 11.4.2
מאתחלים את רשת הזרימה לזרימה 0בכל הקשתות .לאחר מכן באופן איטרטיבי ,כל עוד tנגיש מ־ sברשת השיורית :Gf
• בונים את ) L(Gf
• מוצאים זרימה חוסמת gמ־ sל־ tב־) L(Gf
• מעדכנים את הזרימה ע”י הוספת (f 0 = f + g) g
לכל איטרציה כזו באלגוריתם דיניץ קוראים פאזה .לבסוף ,מחזירים את ∗ fשהתקבלה.
אם אין קשת יוצאת מ־ uאז נמחק את uמהמסלול ,וגם את הקשת בין uלבין קודמו במסלול מהגרף. ][retreat
לאחר initננסה בכל פעם לעשות ,advanceאם נגיע ל־ breakthroughמצויין ,ואחרת אם נגיע ל־ dead endנבצע .retreatהריצה
תסתיים כאשר ננסה לעשות retreatמ־.s
• ] :[breakthroughאם מצאנו kמסלולים והמרחק δ(s, t) = lאז העבודה המושקעת לכל BTהיא ).O(l
– עבור עדכוני הקיבולים ,מחיקת המסלול וכו' ,סה”כ ).O(kl
– כיוון ש־| ) l ≤ |Vכי המסלולים הם מק”בים( ו־|) k ≤ |Eכי כל BTמוחק קשת אחת לפחות שהיתה קריטית( ,אז
)|.kl = O(|V ||E
• ] :[retreatכולם יחד לא יותר מ־|) |Eכי בכל פעם שנסוגים ,מוחקים קשת מהגרף(.
• ] :[advanceהבעיה כביכול עם advanceהיא שניתן להתקדם בקשת מסוימת יותר מפעם אחת .עם זאת ,נשים לב שעל מנת
להגיע למצב שאנחנו מתקדמים בקשת פעם נוספת היינו צריכים לחזור אחורה ע”י BTאו ע”י ,retreatלכן סך הכל כמות
העבודה של advanceחסומה ע”י כמות העבודה של .BT + retreat
סך הכל קיבלנו כי הסיבוכיות של פאזה היא )|) O(|E| + kl) = O(|E| + |V ||E|) = O(|V ||Eיש לציין שבניית הגרפים תעשה בזמן
לינארי ,לכן זה נבלע בסיבוכיות הכוללת(.
הערה 11.34יש מבנה נתונים שנקרא dynamic treesשמשפר את זמן הריצה של פאזה בודדת.
57
טענה 11.35מתקיים ש־) δGi+1 (s, t) > δGi (s, tכאשר fi , fi+1זרימות בפאזות עוקבות i, i + 1בהתאמה ,ו־ Gi , Gi+1הרשתות
השיוריות המתאימות.
sמאורך ≥ ) lאמנם דיניץ בכלל עובד על הגרף ) ,L(Giאבל הוכחה :נסמן ) .l := δGi (s, tרוצים להראות שאין ב־ Gi+1מסלול t
כיוון שזהו גרף מק”בים ברור שאורך המסלול המינימלי ב־ Giוב־) L(Giשווה( .כיוון שזרימה gשחישבנו בפאזה חוסמת עבור ) L(Gi
sעליו gלא ”מרווה” קשת )כלומר ,מזרימה כמות מקסימלית בקשת קריטית(. אז לא קיים ב־) ) L(Giוגם לא ב־ (Giמסלול t
sב־ Gi+1צריך להשתמש בקשתות ”חדשות” )שלא היו ב־) ,(L(Giשהן הפוכות לקשתות מ־ Giאו ששייכות למסלול לכן מסלול t
ארוך יותר ,מאורך l + 1לפחות )לכן הוא לא הופיע בגרף המק”בים( .נבחין כי גם במקרה שבו המסלול כולל קשתות הפוכות ,אורכו
יגדל לפחות ב־) 1ייתכן שנשאר באותה רמה ,או שממש נחזור אחורה ,ורק אז נתקדם ,אבל בכל מקרה המסלול יהיה ארוך יותר( .סך
sב־ Gi+1יהיה באורך גדול ממש מ־.l הכל קיבלנו כי כל מסלול t
מסקנה 11.36מספר הפאזות חסום ע”י ,|V | − 1כי בהתחלה המרחק ≤ ,1ומרחק מקסימלי )כל עוד יש מסלול מ־ sל־ (tיהיה
≥ .|V | − 1
לסיכום:
קיבלנו כי הסיבוכיות של פאזה היא )| ,O(|V ||Eוכן מספר הפאזות הוא )| ,O(|Vלכן קיבלנו כי הסיבוכיות הכוללת של האלגוריתם
היא )|.O(|V |2 |E
רשתות מיוחדות:
ישנן רשתות מיוחדות בהן הסיבוכיות של דיניץ קטנה מ־)|:O(|V |2 |E
• בהרבה שימושים הקיבולים כולם .1רשתות כאלה נקראות לעיתים רשתות 0/1או ”מטיפוס .”I
– הבחנה :1במהלך BTכל הקשתות על המסלול הן קריטיות )כי הקיבולים שווים( ,לא רק אחת ,לכן כולן ימחקו .זה
| ,k ≤ |Eכי כל BTמוחק lקשתות .מכאן נובע שזמן הריצה של פאזה מגביל את מספר ה־ ) BTשסימנו ב־ (kכך ש־ l
הוא )| ,O(|E| + kl) = O(|Eוזמן הריצה הכולל הוא )|.O(|V ||E
– הבחנה :2כמות הפאזות נמוכה יותר.
p
טענה 11.37ברשת 0/1דיניץ מבצע לכל היותר | 2 |Eפאזות.
הוכחה :נתבונן בזרימה fxאחרי פאזה .xהמרחק ) δGx (s, tהוא לכל הפחות ) xביצענו xפאזות ,וכל אחת מגדילה את
המרחק לפחות ב־ .(1נסמן ב־ ∗ fאת הזרימה המקסימלית ברשת המקורית .אם כן ,הרי שהזרימה f ∗ − fxהיא הזרימה
המקסימלית ב־ .Gfxנפרק אותה ל־ kמסלולים כאשר | ,k = |f ∗ − fxוהמסלולים האלו זרים בקשתות )כי לכל קשת
קיבול של ,1וכל מסלול ”מרווה” את כל הקשתות שלו(.
|) k ≤ |Eיש kמסלולים זרים בקשתות ,וכל אחד באורך של לפחות .(xכיוון שכל פאזה מעלה ב־ 1לפחות את ערך לכן x
הזרימה ,אז תוך לכל היותר | k = |f ∗ − fxפאזות האלגוריתם יעצור.
| x) x + |Eהפאזות הראשונות עד זרימה ,fxועוד לכל היותר kהפאזות הבאות(. pהכולל הוא x קיבלנו כי מספר הפאזות
|.x + |E ||E
p p
x = ||E + √ = 2 ||E החסם את ונקבל ,x = עכשיו נוכל לבחור ||E
||E
3
זה מוריד את זמן הריצה על רשת 0/1ל־) .O(|E| 2
• נאמר שרשת 0/1היא פשוטה או ”מטיפוס ”IIאם לכל צומת דרגת הכניסה ≥ 1או דרגת היציאה ≥ ) 1למשל הרשת לחישוב
זיווג מקסימלי בגרף דו”צ שנראה בהמשך(.
p
טענה 11.38ברשת 0/1פשוטה מספר הפאזות חסום ע”י | .2 |V
הוכחה :אחרי xפאזות ,התקבלה הזרימה .fxעד לזרימת מקסימום ∗ fנותרו לכל היותר | k = |f ∗ − fxפאזות .כעת f ∗ − fx
מתפרקת למסלולים זרים בצמתים פנימיים בגלל התנאי )לכל צומת אנחנו יכולים ”לבזבז” את דרגת הכניסה/יציאה פעם אחת
בלבד(.
| |V |V |−2 | |V
p ∗
לכן ,k ≤ |f − fx | ≤ x−1 ≈ xכך שכמות הפאזות תהיה ,x + xועבור | x = |Vנקבל את החסם.
p
מסקנה 11.39ברשת 0/1פשוטה דיניץ לוקח )| .O(|E| |V
2
טענה 11.40ברשת ,0/1לאו דווקא פשוטה ,בלי קשתות מקבילות ,מספר הפאזות חסום ע”י .2|V | 3
מסקנה 11.41ברשת כזו זמן הריצה של Dinicהוא )} .O(min{|E| 2 , |E||V | 3כמובן שאם הרשת היא פשוטה החסם )| O(|E| |V
p 3 2
58
צימוד )זיווג( בגרפים לא מכוונים )(Maximum Matching in Bipartite Graphs 12
־ המשך פרק 26בספר
הגדרה 12.1בהנתן גרף לא מכוון ) ,G = (V, Eזיווג ) (matchingהוא תת־קבוצה של קשתות ,M ⊆ Eכך שלכל v ∈ Vיש לכל
היותר קשת אחת e ∈ Mכך ש־ .v ∈ eצומת v ∈ Vנקרא מזווג ) (matchedע”י זיווג Mאם קיימת קשת ב־ Mהקשורה ל־.v
הגדרה 12.2זיווג מקסימלי ) (maximum matchingהוא זיווג בעל עוצמה מקסימלית ,כלומר זיווג Mהמקיים כי לכל זיווג אחר M 0
מתקיים | .|M 0 | ≤ |M
הגדרה ) 12.3זו הגדרה שלא קיימת בספר ,אך היא הופיעה בהרצאה של פרופ' פיאט ובתרגול(
זיווג מקסימלי נקודתי ) (maximal matchingהוא זיווג שלא ניתן להוסיף לו אף קשת כך שיתקבל זיווג חוקי .יש להבחין בין
maximum matchingל־ ,maximal matchingשכן הראשון הוא המקסימלי על פני כל הזיווגים האפשריים בגרף מסויים ,בעוד
שהשני מתייחס רק לזיווגים שניתן לקבל כתוצאה מהוספת קשתות לזיווג נתון .לכן ייתכן שזיווג הוא מקסימלי נקודתי ,אך איננו
מקסימום )ההפך כמובן לא נכון(.
59