תרגיל - Algorithms
Download
Report
Transcript תרגיל - Algorithms
תרגול – 10עוד זרימה
W
t
1
U
s
שאלה – 1זרימה בשלמים
תרגיל :נתונה רשת זרימה ) G (V , Eמ s -ל t -עם
קיבולים שלמים .הוכיחו שהשיטה של FordוFulkerson-
מוצאת זרימה מקסימלית fכך שלכל u , v Vהערך
) f ( u , vהינו שלם.
0 .7 / 1
t
2
0 .7 / 1
1 /1
0 .3 / 1
s
Ford - Fulkerson – תזכורת
Ford-Fulkerson ( G , s , t )
1) Initialize flow ( f 0 ).
2) While there is an augmenting path p ,
Augment flow f along p .
3) Return f .
3
תזכורת
Ford-Fulkerson( G , s , t )
1) Initialize flow ( f 0 ).
2) While there is an augmenting path p ,
Augment flow f along p .
3) Return f .
רשת זרימה
רשת שיורית
0/2
10 //11
10 //11
s
0 /1
t
10 //11
2
1
1
s
1
t
1
4
תזכורת
Ford-Fulkerson( G , s , t )
1) Initialize flow ( f 0 ).
2) While there is an augmenting path p ,
Augment flow f along p .
3) Return f .
רשת זרימה
רשת שיורית
01 / 2
1 /1
10 //11
s
01 / 1
t
1 /1
2
1
1
s
1
t
1
5
תזכורת
Ford-Fulkerson( G , s , t )
1) Initialize flow ( f 0 ).
2) While there is an augmenting path p ,
Augment flow f along p .
3) Return f .
רשת זרימה
רשת שיורית
1/ 2
1 /1
1
0 /1
s
1 /1
1
1
t
1 /1
1
s
1
t
1
6
שאלה – 1זרימה בשלמים
תרגיל :נתונה רשת זרימה ) G (V , Eמ s -ל t -עם
קיבולים שלמים .הוכיחו שהשיטה של FordוFulkerson-
מוצאת זרימה מקסימלית fכך שלכל u , v Vהערך
) f ( u , vהינו שלם.
0 .7 / 1
t
7
0 .7 / 1
1 /1
0 .3 / 1
s
שאלה – 1פתרון
נוכיח את הטענה באינדוקציה על מספר הזרימות שהאלגוריתם חיבר
עד כה:
בסיס האינדוקציה( :מצאנו 0מסלולים) לכל קשת יש זרימה .0
צעד האינדוקציה :עד כה מצאנו זרימה fשבה בכל קשת עוברת
זרימה שלמה .יהי pמסלול ברשת השיורית של . fנראה שגם
לאחר הוספת המסלול החדש pל , f -עדיין יש זרימה שלמה בכל
קשת.
מההנחה ,כל הקיבולים ברשת השיורית שלמים.
גודל הזרימה שנעביר דרך pהינו הקיבול המינימאלי מקיבולי
קשתות , pולכן מדובר בערך שלם.
8
שאלה – 2סוסים ורוכבים
תרגיל :יש מאה סוסים ומאה רוכבים .כל רוכב מכין
רשימה של סוסים שהוא מוכן לרכב עליהם .מצא
אלגוריתם שימצא את המספר המקסימאלי של סוסים
ורוכבים שיוכלו לדהור אל החופש.
9
תזכורת – גרף דו-צדדי
הגדרה :גרף לא מכוון נקרא דו צדדי אמ"מ אפשר לצבוע את
קודקודיו בשני צבעים ,כך שאף קשת לא מחברת בין שני קודקודים
בעלי אותו צבע.
אפשר להגדיר גרף דו צדדי בתור שלשה ) G (U , W , Eכך שU -
ו W -הן שתי קבוצות זרות של קודקודים ,ואין אף קשת בין שני
קודקודים מאותה קבוצה.
W
10
U
זיווגים
הגדרה :עבור גרף לא מכוון ) ,G (V , Eזיווג הינו
קבוצת קשתות זרות בקודקודים .S Eגודל הזיווג
הינו מספר הקשתות בקבוצה .זיווג מקסימום הינו זיווג
עם מספר מקסימאלי של קשתות מבין הזיווגים שבגרף.
11
שאלה :2ניסוח אחר
תרגיל :נתון גרף דו-צדדי
מקסימום בגרף.
W
12
) .G (U , W , E
תארו אלג' המוצא זיווג
U
שאלה :2פתרון
נהפוך את Gלרשת זרימה:
נכוון את כל הקשתות מ U -ל.W -
נוסיף קודקוד sוניצור קשתות ממנו לכל קודקודי
נוסיף קודקוד tוניצור קשתות אליו מכל קודקודי
ניתן לכל הקשתות קיבול .1
t
13
.U
.W
s
המשך פתרון
קיבלנו רשת זרימה (רשת .)0-1נריץ עליה אלג' למציאת זרימה
מקסימאלית מ s -ל.t -
בניית רשת הזרימה לוקחת זמן לינארי ,ולכן זמן הריצה תלוי רק
באלג' למציאת זרימה מקסימאלית.
בשיעור נראה שבמקרה כזה האלג' של דיניץ רץ בזמן
V
.O E
נוכיח שגודל הזרימה המקסימאלית שווה לגודל הזיווג המקסימום,
ושקבוצת הקשתות הרוויות מ U -ל W -הינה זיווג מקסימום.
14
הוכחה (המשך)
נראה שגודל הזרימה המקסימאלית
המקסימום : m
f
שווה לגודל הזיווג
• :| f | mלכל זיווג ניתן למצוא זרימה מתאימה באותו גודל
באופן הבא .עבור כל קשת ) ( u , wבזיווג ,נעביר זרם 1דרך
הקשתות ) .( s , u ), ( u , w ), ( w , t
u
w
t
15
s
הוכחה (המשך)
נראה שגודל הזרימה המקסימאלית
המקסימום : m
f
שווה לגודל הזיווג
• :| f | mבהינתן זרימה שלמה ,נוכל לקחת רק את הקשתות
שלה מ U -ל W -ולקבל את הזיווג המתאים.
W
t
16
U
s
הוכחה (המשך)
מצאנו התאמה בין הזרימות השלמות לזיווגים האפשריים.
גודל זיווג יהיה זהה לגודל הזרימה שמתאימה לו.
זרימה מקסימאלית תתאים לזיווג מקסימום.
17
שאלה – 3מכונות ומשימות
תרגיל :נתונות nמכונות ו m -משימות שצריכות
להתבצע ע"י המכונות .מכונה n iיכולה לבצע iמשימות.
בנוסף ,עבור כל משימה נתונה רשימה של מכונות שיודעות
לבצע אותה .תארו אלג' אשר בוחר לכל משימה את המכונה
שתבצע אותה (תחת ההגבלות הנ"ל) ,או מודיע שלא
קיימות השמה כזו.
18
שאלה – 3דוגמא
תרגיל :נתונות nמכונות ו m -משימות שצריכות להתבצע ע"י המכונות.
מכונה iיכולה לבצע n iמשימות .בנוסף ,עבור כל משימה נתונה רשימה של
מכונות שיודעות לבצע אותה .תארו אלג' אשר בוחר לכל משימה את המכונה
שתבצע אותה (תחת ההגבלות הנ"ל) ,או מודיע שלא קיימות השמה כזו.
Caffè latte
Cappuccino
Decaf
Doppio
Espresso
Filter
Half-caf
Raspberry Mocha
Red Eye
Turkish coffee
19
פתרון
Mocha
n1
Filter
n2
s
1
Cappuccino
1
Decaf
t
n3
n4
m נחפש זרימה בגודל
Turkish
20
סיבוכיות
נסמן את סך אורכי הרשימות של המשימות ב-
גודל רשת הזרימה:
◦ האם זו רשת ?0-1לא!
◦ מספר הקודקודים – .m n 2
◦ מספר הקשתות – .m n M
האלג' של דיניץ ירוץ בזמן
2
2
O m n M m n
ניתן להריץ FFבזמן
21
.O E V
.O m m n M
.M
- kקשירות
הגדרה :גרף מכוון נקרא - kקשיר אם בין כל זוג
קודקודים שלו יש לפחות kמסלולים זרים
בקשתות (בכל כיוון).
22
גרף -2קשיר
שאלה 4
תרגיל :נתון גרף מכוון ) G (V , Eוקבוע
תארו אלג' אשר בודק האם Gהוא - kקשיר.
.k
23
פתרון
ניסיון ראשון:
◦ עבור כל זוג קודקודים , v , u Vנבדוק האם יש ביניהם
מסלולים זרים בקשתות (בשני הכיוונים).
◦ ראינו בתרגול הקודם איך לעשות את זה באמצעות זרימה
ברשתות .0-1
k
סיבוכיות -
1/ 2
, E
2/3
V
E min
2
.O V
מספר הפעמים שצריך
למצוא זרימה מקסימאלית.
24
שיפור הפתרון
אין צורך למצוא זרימה מקסימאלית .צריך רק לבדוק
האם קיימת זרימה בגודל .k
נוכל להריץ את האלג' של Ford-Fulkersonולעצור
לאחר kמסלולים משפרים.
סיבוכיות -
25
E
2
.O k V
עוד שיפור
נבחר קודקוד כלשהו v Vונבדוק שיש kמסלולים
זרים בינו לבין כל אחד מהקודקודים האחרים (בשני
הכיוונים).
סיבוכיות -
26
.O k V E
הוכחת נכונות
נראה שהבדיקות שהאלג' מבצע נכשלות אם"ם הגרף אינו
- kקשיר.
כיוון ראשון :אם אחת הבדיקות שהאלג' ביצע נכשלה,
ברור שהגרף אינו - kקשיר.
כיוון שני :אם קיימים u , w Vכך שאין kמסלולים זרים
בקשתות מ u -ל: w -
◦ קיים חתך u S , w Tשגודלו קטן מ.k -
◦ אם v Sאז זהו גם חתך מ v -ל , w -ולכן בדיקת המסלולים
מ v -ל w -תכשל.
◦ אחרת , v T ,ובדיקת המסלולים מ u -ל v -תכשל.
27
שאלה - 5מציאת חתך מינימאלי
תרגיל :נתונה רשת זרימה ) G (V , Eוזרימה מקסימאלית
עבורה . f ,תארו אלג' למציאת חתך מינימאלי של הרשת.
2/5
d
1/1
2/5
1/1
c
t
1/1
4/5
s
0/3
e
3/3
28
a
3/7
b
3/3
שאלה - 5פתרון
נבנה את הרשת השיורית ביחס לזרימה
נריץ BFSמהמקור ונכניס את כל הקודקודים שבעץ הBFS-
לתוך . S
שאר הקודקודים יהיו ב.T -
זמן ריצה – ) .O ( V E
.f
29
דוגמא
רשת זרימה
2/5
d
1/1
c
t
1/1
4/5
1
d
2
t
4
1
30
2
1
3
3
c
3
s
1
e
a
4
3
3
3
b
e
3/7
2/5
1/1
רשת שיורית
a
s
0/3
3/3
b
3/3
הוכחת נכונות
נכונות :נראה שהחתך שקיבלנו מינימאלי.
◦ ממשפט ה ,max-flow min-cut-חתך הוא מינימאלי אם"ם
הוא בגודל . fנראה שגודל החתך שמצאנו. f c ,
כל הקשתות של החתך שמצאנו רוויות( .אם הייתה
◦
בחתך קשת שאינה רוויה ,אז צריך להוסיף את הקודקוד שהיא
מובילה אליו ל.) S -
אין זרימה מ T -ל . S -אם הייתה ,אז ברשת
◦
השיורית הייתה קשת לא רוויה מ S -ל . T -לכן ,כיוון שסך
הזרימה בכל חתך הוא , fויש זרימה רק בכיוון אחד של
החתך. f c ,
31