, V תרגול מס' 01 אלגוריתם דיניץ הגדרה: רשת שכבות : תהי N רשת שיורית אשר קיים בה מסלול קצר ביותר מ- אל t באורך k. u V d ( u מכילה את הקודקודים 0 k ). E שכבה של רשת השכבות עבור. ( V, E d הוא המרחק המינימאלי בצלעות מ- ל- u ב ) כאשר (u) ( u, v ) E u V, 1 v V מכילה את כל הצלעות בין השכבות. E. L V 0 V1... Vk, E1... Ek גרף השכבות השיורי יהיה. L L רשת השכבות תסומן,,t: c,. L, וזרימה. 0 תיאור סכמטי של האלגוריתם : N א. ב. אתחול הרשת השיורית כל עוד יש מסלול מ- ל- t ברשת השיורית בצע:. N L עבור a. בנה רשת שכבות b. מצא זרימה חוסמת b לרשת השכבות. N, ועדכן את V b עדכן.c תיאור בניית רשת שכבות: הכנס את א. השכבה מכילה את הקדקודים שמרחקם המינימלי מ- הוא. V 1 V. 0,V 0 ל- V אינו ריק ו- t לא שייך ל- כל עוד ב. עבור כל קדקוד u ב- בצע: בצע:,j,V j הוסף את v ל- עבור כל שכן v של u, אם v לא נמצא באף. L והוסף את (u,v) ל- 1.b t. ל אין מסלול בין V, אם t לא שייך ל V( : הפלט הוא רשת השכבות. אחרת ( t שייך ל V.a ג. 0
Algorthm 1 Dntz (G, c,, t) 1. 0 contruct the redual network N G,c,,t 2. whle there a path rom to t n G do 3. nvarant aerton: a low n N 4. contruct the layered network L,c,,t L 5. nd a blockng low b or L aerton : d +b (t) > d (t) 6. b 7. contruct the redual network N 8. Pot-condton o whle loop : a maxmum low n N Algorthm 2 LayeredNetwork_Contructon (N ) 1. V 0 0 2. whle V and t do 3. V E 1 1 V 4. or each u V do 5. or each V 6. V v uch that u, v and v V j j v then 1 7. add v to V +1 8. add u, v to E +1 9. 1 V then 10. 11. return,,t 12. L V V, E... E E, do L,c aerton: there no path rom to t n N 0... 1 13. return L,c,,t L Pot-condton : t reachable rom n N, then L the layered network or N 2
Algorthm 3 BlockngFlow ( ) 1. 0 2. repeat b V, M EM L M c c 3. aerton : the only vertex n wth zero ndegree 4. nd a path p rom to t n let t bottleneck capacty be c (p) 5. or each edge u, v p do 6. bu, v bu, v cmp b v, u bu, v 7. c u, v c u, v c p 8. c (u,v) = 0 then M 9. remove u, v rom 10. cleanup o 11. ndegree (v) = 0 then 12. CleanForward (v,) 13. untl ndegree (t) = 0 M M Algorthm 4 CleanForward (u,) Pre-condton: ndegree (u) = 0 1. or each v uch that u, v M do 2. remove u, v rom 3. ndegree (v) = 0 then 4. CleanForward (v,) Pot-condton: Let x be any vertex uch that at the tart o CleanForward all path back rom x n M end at u. Then all edge gong out o x have been removed. 3
הערות חשובות על אלגוריתם דיניץ: המושג "שלב" באלגוריתם יציין איטרציה בודדת של הלולאה באלגוריתם 0 )עדכון זרימה על סמך זרימה חוסמת ברשת השכבות(. שורה 4 באלגוריתם 3: מציאת מסלול ברשת השכבות מתבצעת על ידי סריקה אחורה מ- t עד ל-. כיוון שדואגים לנקות את הרשת בכל שלב,)CleanForward( מובטח כי סדרת הצעדים בהכרח תוביל בחזרה ל-, כאשר כל קשת היא בין שכבות עוקבות. הזמן הדרוש למציאת מסלול ברשת השכבות הוא כסדר גודל מספר השכבות. המושג "זרימה חוסמת" ברשת השכבות: שימו לב כי זרימה זו אינה בהכרח זרימה מקסימאלית ברשת השכבות. אולם, בשלב זה לא מעדכנים את קיבולי הקשתות ההפוכות לקשתות בהן עברה זרימה על ידי קשתות חרטה )אלו הן קשתות משכבה לשכבה אשר לפניה, ולכן הן לא חלק מרשת השכבות(. לכן, ייתכן כי לא יעודכן מסלול מ- ל- t ברשת השכבות למרות שניתן היה להעביר בה זרימה גדולה אף יותר. שלא כמו באלגוריתם,Ford-Fulkeron אשר בו אין מידע על המסלול הבא בו "נעביר" זרימה, האלגוריתם של דיניץ מנצל את מבנה הנתונים "רשת השכבות" על מנת למצוא בעזרת סריקה אחת ב- מספר מסלולים קצרים ביותר, מבחינת מספר קשתות. G דוגמא לבניית רשת שכבות: נתון הגרף הבא : b c t a d e g קודקוד המקור הוא, קודקוד הבור הוא t. שלבי בניית רשת השכבות יהיו כדלקמן : בשלב הראשון, שכבה בודדת אחת: V 0 4
בשלב השני, שתי שכבות: b c d V 0 V 1 בשלב השלישי, שלוש שכבות: b c d t e כעת t מצוי בשכבה האחרונה, כלומר קיים מסלול מ- ל- t ברשת השיורית, ואין לנו צורך בשכבות נוספות לעת עתה. ניתוח זמן ריצה עבור שלב אחד: אתחול בניית הרשת השיורית: ( E )O. 0. בניית רשת שכבות: )על ידי BFS מ- עד )O. E ( t(: 2. נגדיר את זמן מציאת זרמה חוסמת לרשת השכבות ע"י ( V )t. E, 3. עדכון הזרימה: ) E.O(.4 סה"כ זמן ריצה עבור שלב: )) V O( E t( E, ננסה כעת לספק חסם עבור מציאת הזרימה החוסמת ) V : t ( E + תיאור מציאת זרימה חוסמת לרשת שכבות א. ב. ג. : L אתחל זרימה חוסמת b. 0 כל עוד יש מסלול P מ- ל- t ב- L.a בצע: הוספת קשתות חרטה נגדיות ב- L (. ללא ל- FF )בדומה P לפי מסלול,b L עדכן את עבור כל קשת (u,v) שהתאפסה בעקבות שינוי הזרימה במסלול P. מחק את (u,v) מ-. L..b אם דרגת הכניסה של v היא אפס וגם.) L v, ( בצע ניקוי-קדימה. v t V 0 V 1 V 2 החזר b. x t תיאור ניקוי-קדימה :(v,(v,e)) לכל קשת ), vx ( )קשת היוצאת מ- v ( בצע:.( vx, ) את a.מחק b.אם דרגת הכניסה של הקודקוד x היא 0 וגם בצע: ניקוי-קדימה)( x,(v,e (. 5
L ניתוח זמן ריצה עבור מציאת זרימה חוסמת לרשת שכבות ( V )t: E, 0. מציאת מסלול ברשת השכבות ( V - )O כיוון שאנו מבצעים "ניקוי", אשר אחריו כל סריקה הפוכה מ- t מובילה ל- )לכול קודקוד שניתן להגיע ע"י סריקה מ- יש דרגת כניסה גדולה מ- 1, מלבד אולי t עצמו(. מציאת מסלול ברשת השכבות מתבצע O(E) פעמים, כיוון שבכל פעם מוצאת קשת אחת, לפחות, מרשת השכבות. סה"כ הזמן הדרוש למציאת כל המסלולים אם כן הוא ) V. O( E.2 עדכון : ) V,O( מתבצע E פעמים לכל היותר, ולכן ) V. O( E כדי לחשב את הזמן הכללי של ניקוי רשת השכבות נשתמש בשיטת פיזור החיוביים )ניתוח 3. פחת(: כל קשת יכולה להימחק לכל היותר פעם אחת )O ( E עבור כל הקשתות. a. בדיקת הדרגות עבוד קודקודים מתבצעות בכל פעם שאנו מוחקים קשת )ניתן לבדוק b. )O ( E עבור כל בדיקות דרגת קודקוד בזמן קבוע ע"י שמירת מוני דרגה( הקודקודים. לפיכך קיבלנו את החסם: ) V. t( E, V ) O( E אם כן, זמן ריצה עבור שלב אחד באלגוריתם הוא ) E. O( E t( E, V )) O( V * ישנם לכל היותר V שלבים )בשיעור ראיתם כי בכל שלב מספר השכבות ברשת השכבות גדל, כאשר 2 הוא חסום ע"י V (, לכן זמן הריצה לאלגוריתם כולו הוא ( E. )O V ניתוח זמן הריצה עבור אלגוריתם דיניץ המפורט לעיל נכון עבור גרף כללי עם משקולות כלשהן. אך ישנם גרפים עבורם ניתן למצוא חסמים טובים יותר. האלגוריתם עצמו לא ישתנה, אך הניתוח יהיה עדין יותר ויתבסס על תכונות הגרף. 6
דוגמה: גרפים בעלי קשתות בקיבול 1 בלבד: נראה שבגרפים כאלה ניתן להגיע לחסם זמן ריצה של.O( E E ) כדי להראות זאת, נראה שבגרפים בעלי קיבול 0 ניתן לחסום בצורה הדוקה יותר את עלותו של כל שלב ואת מספר השלבים. O E א. נראה קודם כי עלותו של כל שלב באלגוריתם אורכת בלבד, במקום החסם : t( E, V ) O( E V ) הוכחת א: נתבונן בגרף הרשת השיורית בעלת m שכבות, בתחילת שלב כלשהו. ברשת זו, אורך כל מסלול שיפור. כמה מסלולי שיפור יכול האלגוריתם למצוא? הוא ברשת השיורית נסתכל על סכומי הזרימה בצלעות שנמצאות ברשת השיורית בלבד. בהינתן זרימה, מפני שאנו סופרים זרימה לאורך כל השכבות ולא רק הצלעות שיוצאות מ- כמובן שערך זה גדול מ-.. נסמן את סכומי הזרימה בצלעות שנמצאות ברשת השיורית בלבד ב- תמיד חסום ע"י סך קיבולי הצלעות. בנוסף, ולכן תחילה, צלעות לכן שנבחרו לרשת השכבות. לכל צלע ברשת השכבות הקיבול שווה ל- 0 או 2,יש לכל היותר. תמיד יתקיים : צלעות וצוואר הבקבוק הוא 0 או 2. לפיכך,לאחר בחירת מסלול שיפור כעת,בכל מסלול יש. או גדל ב- התוצאה היא שניתן למצוא לכל היותר כעת ניתן לראות שכל שלב עולה לכל היותר מסלולי שיפור. :O E E עדכון L ומציאת מסלול עולים ) ( Om ומתבצעים לכל היותר פעמים )אלו הן הפעולות היחידות m 1 שעולות יותר מ- E בניתוח הכללי(. ניזכר שזמן בניית רשת השכבות הוא O E וכך גם הזמן הכללי של פעולת הניקוי בה. כלומר, כעת גם החלק "הכבד" בשלב, אורך זמן הריצה של כל האלגוריתם חסום ע"י O. E כעת ניתן לומר כי זמן. O( V E ) 7
ב. עתה נראה כי ניתן להקטין גם את החסם עבור מספר השלבים שמתבצעים ע"י האלגוריתם. נגדיר בתחילת כל שלב חתכים ברשת השיורית כאשר היא קבוצת כל הקודקודים במרחק עד. u t צלע זו לא נספרת בקיבול החתך ברשת השיורית המצוירת לא ייתכן שיש קשתות משכבה לשכבה גדולה מ- 1. הדבר נובע באופן ברור מאופן בניית רשת השיורית על ידי האלגוריתם. )בדוגמא הקשת הכחולה )זו עם ה- X למדפיסים בשחור לבן( לא תיתכן ברשת השיורית הנ"ל, כלומר הקשתות האדומות הן היחידות שיוצאות מהחתך הירוק )השמאלי((. מסקנה: החתכים המפרידים את קודקודי הגרף בין שכבה לבין השכבה העוקבת זרים בצלעות. )ההפרדה נעשית בין שכבות עוקבות ברשת השיורית(: ישנם חתכים כאלה אשר כולם זרים בקשתות, וכן ישנן לכל היותר קשתות. לכן מספר הקשתות הממוצע לחתך הוא לכל היותר. לפיכך, קיים חתך אשר מספר הקשתות בו הוא לכל היותר. כיוון שקיבולי כל הקשתות הם לכל היותר 2 )מכיוון שבגרף המקורי כל הצלעות הם בקיבול 0(, קיבולו של חתך זה חסום על ידי. מכאן נובע שקיים חתך ברשת השיורית שקיבולו הוא לכל היותר. ניזכר בטענה: "הזרימה המקסימאלית שווה לחתך המינימאלי". על פיה, הזרימה המקסימאלית ברשת השיורית בשלב זה היא לכל היותר וכל מסלול שיפור מגדיל את הזרימה ב- 0 לכל הפחות )וב- 2 לכל היותר(. לכן הינו חסם על מספר מסלולי השיפור שעדיין ניתן למצוא ברשת השיורית! נשים לב שאמנם ייתכנו עוד מסלולים נוספים ברשת השיורית, אשר אינם מופיעים בגרף הרשת השיורית. אך יחד עם זאת, גם מסלול כזה )מסלול לקודקוד t שאורכו גדול מ- 1-m ) ייאלץ לעבור ב- 1-m מבין הקשתות שכבר הושמו ברשת השכבות )קשת אחת לפחות המקשרת בין שכבה לעוקבת אחריה(, ולפיכך הרוויית אותו חתך מינימאלי תחסום גם מסלול כזה. הזרימה המקסימלית היא אזי הזרימה המקסימלית שווה ל-. טענה )ללא הוכחה(: אם ברשת השיוריות )נסו להוכיח זאת בבית כתרגיל נחמד לשעות הפנאי(. עוד נשים לב כי בכל שלב אנו מוצאים לפחות מסלול שיפור אחד )כל שלב מוצא את המסלולים הקצרים ביותר שקיימים בגרף(. לכן יהיו לנו לכל היותר שלבים עתידיים אחרי השלב הנוכחי. לפיכך, אם נבצע את החישוב עבור שלב כלשהו באלגוריתם בו מספר השכבות בגרף השכבות הוא m, הרי שבסך הכול היו לנו לכל היותר m שלבים ראשונים )עד לנקודה שבה המסלול הקצר ביותר הוא m(, ועוד לכל היותר שלבים להרוויית שאר הזרימה. 8
דבר זה נובע מכך שבכל שלב משפרים את הזרימה לפחות ב 0, אך לפי האבחנה לא ניתן לשפר ביותר מגודל זרימה מקסימלית ברשת השיורית,ולפי מה שראינו זרימה מקסימלית ברשת השיורית היא לכל היותר )החתך שמצאנו(. לכן יש עוד לכל היותר שלבים. סה"כ קיבלנו ביטוי למספר השלבים בהרצת האלגוריתם:. בו אזי נחפש את החסם העליון ההדוק ביותר מכיוון שהביטוי נכון עבור כל לביטוי )אנו רוצים למצוא את המספר המינימלי של האיטרציות(. מתי ביטוי זה יקבל את הערך המינימאלי? נגזור הביטוי לפי הוכחנו כבר כי כל שלב אורך הסבר נוסף למה, נשווה לאפס ונקבל את המינימום בשלב.O( E E ). לכן לאורך כל האלגוריתם יהיו לכל היותר O. E אי לכך, קיבלנו כי סך כל זמן הריצה הינו E m )מספר האיטרציה באלגוריתם(: שלבים. בה"כ ניתן להניח ש- m E אך אם אין כזאת, נסתכל על שתי איטרציות עוקבות, כאשר בראשונה יש פחות מהכמות הנדרשת של שכבות ובאיטרציה העוקבת יש יותר מהכמות הזו. נסתכל על השלב ה 1+m ועל הרשת השיורית הנוצרת בשלב הזה. אזי בהכרח יהיו לנו בגרף של הרשת השיורית )אותו הגרף כמו שהוגדר ב-ב'( לפחות 1+m שכבות. מכיוון שבס"כ יש לנו צלעות אזי משובך היונים המוכלל: קיים לנו חתך בין שכבות בגודל קטן מ-. E אחרת, מכיוון שהצלעות בין החתכים שונות אזי כל חתך גדול מ- E ונקבל: E *( m 1) E * m E שזה לא יתכן. לכן נקבל שיש לנו חתך בגודל E לכן זה יקח לנו E איטרציות לכל היותר. שובך היונים המוכלל אם יש m תאים בשובך שלתוכם יש להכניס n יונים, אז בהכרח בתא אחד יהיו לפחות יותר) p הוא המספר השלם הקרוב )בעיגול כלפי מעלה( למספר הוא לפחות כמו הממוצע. יונים או ( :כלומר יש תא שמספר היונים בו 9