אלגוריתמים – )443432( 1אביב תש"ע חיפוש לרוחב – :BFS BFSסורק את G V , E ומייצר עץ שבו כל הצמתים Rשהם ברי הגעה מ . s -בנוסף ,המרחק בקשתות על העץ מ s -לכל צומת ב R -הוא מינימאלי. נותן פיתרון ל: מציאת מסלול קצר ביותר מהמקור לכל צומת. גלוי צמתים ברי הגעה מהמקור. הרעיון: החיפוש בוחן בכל איטרציה " iחזית" המורכבת מצמתים במרחק iמ . s -עבור i 0האלגוריתם יגלה את כל הצמתים במרחק iלפני כל הצמתים במרחק i 1 מ. s - האלגוריתם: קלט :גרף G V , E וצומת מקור . s פלט :לכל , d [ v ] , v Vהמרחק מ s -ל. v - for each u V \ { s } : p [ u ] null . d [u ] , Q em pty enqueue Q , s while Q is not empty do: u d eq u eu e Q for each v in a d j u do: d [v ] d [u ] 1 if p [ v ] u en q u eu e Q , v סיבוכיות. O V E : למה :1-לכל קשת u , v מתקיים. d ist s , v d ist s , u : למה :2-בסיום האלגוריתם ,הערך ] d [ vמקיים d [ v ] dist s , v לכל צומת . v למה :3-נניח שבמהלך ביצוע BFSהתור מכיל את } , v n . d [ v r ] d [ v1 ] 1 ] d [ v i ] d [ v i 1 , {v1 ,אז מתקיים: כלומר :בת ור יש צמתים משתי רמות לכל היותר ,ויש מונוטוניות ברמות הצמתים שבתור. מסקנה :נניח ש vi -נכנס ל Q -לפני , v jאז בזמן ש v j -נכנס לתור מתקיים. d [ v i ] d [ v j ] : משפט :הרצת BFSעל גרף ( Gמכוון או לא מכוון) עם צומת מקור , sמגלה כל צומת ישיג מs - ובסיום האלגוריתם. d [ v ] dist s , v : 1 ©ענת עציון אלגוריתמים – )443432( 1אביב תש"ע מיון טופולוגי: מיון טופולוגי של Gהוא סידור ליניארי של Vכך שאם , u v Eאז uלפני vבסידור. אם בגרף יש מעגל מכוון אז אין לגרף מיון טופולוגי. ) -DAG (Directed Acyclic Graphגרף מכוון שאין בו מעגלים מכוונים. אלגוריתם למיון טופולוגי של :DAG קלט :גרף G V , E שהוא .DAG פלט :מיון טופולוגי של הגרף. .1חשב את קבוצת כל המקורות בגרף ,נסמנה ב. S - .4אתחל . l 1 .4כל עוד : V 4.1בחר v S 4.4קבע L v l 4.4קבע . l l 1 4.3הסר את vמהגרף ,יחד עם הקשתות היוצאות ממנו. 4.3קבע }. S S \ {v 4.3הוסף ל S -את כל הצמתים מבין } {u : vu Eשהם מקורות. .3החזר את . L סיבוכיות. O V E : טענה :1-בכל G V , E DAGכך ש , V קיים מקור. סיבוכיות ואורך הקלט: לצורך ייצוג מספר בגודל nנדרשים m log 2 n :ביטים ולכן אורך הקלט הוא . lo g n :אם יש לנו מספר nבקלט ,הסיבוכיות צריכה להיות פולינומיאלית ב . log n -אם זה לא המצב והסיבוכיות היא פולינומיאלית דווקא ב , n -נאמר שהאלגוריתם -פסאודו פולינומיאלי. אם נתון לנו גרף G V , E אז הסיבוכיות צריכה להיות פולינומיאלית ב. | V |, | E | - 2 ©ענת עציון אלגוריתמים – )443432( 1אביב תש"ע גרף דו-צדדי: בהינתן גרף לא מכוון , G V , E האלגוריתם מכריע האם Gהוא גרף דו-צדדי. טענה :1-יהא G V , E גרף לא מכוון ,ויהא G . s Vהוא גרף דו-צדדי אם"ם ( uv E d s u 2 d s v שקילות מודולו .)4 טענה :2-יהא G V , E גרף דו-צדדי עם צדדים . L , Rיהא pמסלול בין uו . v -אזי אורך המסלול pהוא זוגי אם"ם u , vנמצאים באותו צד. האלגוריתם: .1הרץ BFSמצומת שרירותי . s V .4החזר " Gדו צדדי" אם"ם לכל קשת u v Eמתקיים . d s u 2 d s v סיבוכיות. O V E : אפיון נוסף :גרף הוא דו-צדדי אם"ם הוא אינו מכיל מעגלים באורך אי-זוגי. מסלולים זוגיים קצרים ביותר: רדוקציה: שכפול צמתי הגרף לקבוצה 1-וקבוצה 4-וחיבור קשתות בין צמתים מעותקים בקבוצות שונות ,אשר בגרף המקורי הייתה קשת שחיברה בין הצמתים המתאימים .זהו גרף דו-צדדי. טענה :יהא G V , E גרף לא מכוון ויהא . s Vאז . d seven v d s v 1 1 האלגוריתם: קלט :גרף G V , E וצומת . s V פלט :לכל צומת , v Vאורך המסלול הקצר ביותר מ s -ל v -מבין המסלולים שאורכם זוגי ,או אם לא קיים מסלול כזה. .1בנה את הגרף ( G V 1 V 2 , E לכל קשת u v Eנגדיר שתי קשתות . u 1v 2 , u 2 v 1 E .4הרץ BFSעל G החל מהצומת . s 1 .4לכל צומת v Vהחזר. d s v 1 : 1 סיבוכיות. O V E : 3 ©ענת עציון אלגוריתמים – )443432( 1אביב תש"ע חיפוש לעומק – :DFS נותן פיתרון ל: מציאת מעגלים בגרף. מציאת שורשים בגרף. כיוון קשתות הגרף. הרעיון: האלגוריתם ינסה להתקדם לעומק ,כאשר נבקר בצומת , vאם ישנה קשת v , u לצומת uשעוד לא נתגלה -נחצה את הקשת ונמשיך את החיפוש מ. u - האלגוריתם: קלט :גרף G V , E וצומת sב. V - פלט :לכל v Vנקבל ] - d [ vזמן הגילוי של vו , p [ v ] -הצומת שגרם ל v -להתגלות. סימון color [ u ] :צבע לבן או אפור - f [ u ] .זמן היציאה האחרון מ. u - for each u V : color[ u ] = white p[ u ] = null i 0 for each u V : if color( u ) = white then: ) DFS_VISIT( u DFS_VISIT( u ): color( u ) = gray i d [u ] i for each v in a d j u : if color( v ) = white then: p[ v ] u DFS_VISIT( v ). color( u ) = black. i f [u ] i סיבוכיות. O V E : הערות: בהרצות שונות ייתכנו פלטים שונים לאלגוריתם. DFSימצא גם צמתים שאינם ישיגים מ. s - DFSאינו בהכרח מוצא מרחקים קצרים ביותר. 4 ©ענת עציון אלגוריתמים – )443432( 1אביב תש"ע בסיום האלגוריתם נקבל גרף , G זהו תת גרף של Gשבו לכל צומת vשעבורו , p [ v ] null תופיע הקשת מהאב p [ v ] -אל vכפי שנמצא ע"י האלגוריתם. סיווג קשתות: קשתות עץ :מופיעות ב. G - קשתות אחוריות :קשת u , v שמחברת את uלאב קדמון של uבעץ ( DFSלולאה עצמית תחשב כקשת אחורית). קשתות קדמיות :קשתות שאינן ב . G -כל קשת u , v מ u -לצאצא של uבעץ .DFS קשתות חוצות :כל הקשתות האחרות ב G -בין צמתים באותו עץ DFSללא יחס אב קדמון-צאצא ,או בין עצי DFSשונים. תכונות של :DFS הגרף G הוא יער ,היות והמבנה של עצי החיפוש משקף את הקריאות ל.DFS_VISIT הצומת vהוא צאצא של uבעץ DFSאם vנתגלה כאשר uהיה אפור ולפני שקבענו ערך ל ] . f [u תכונת הסוגריים :נייצג את הגילוי של צומת vע"י סוגר שמאלי (vואת סיום הטיפול ב v -ע"י סוגר ימני ) . vאז ההיסטוריה של גילוי וסיום הטיפול בצמתים מגדירה ביטוי שבו הסוגריים מקוננים היטב .למשל. ( u ( v ( y ( xx ) y ) v ) u )( w ( zz ) w ) : משפט הסוגריים :בכל חיפוש לעומק בגרף מכוון או לא מכוון , Gלכל שני צמתים u , vמתקיים בדיוק אחד מ 4-התנאים: .1האינטרוולים d [ u ], f [ u ] ו d [ v ], f [ v ] -זרים לחלוטין ואז אין קשר של אב קדמון/צאצא בין הצמתים . u , v .4האינטרוול d [ u ], f [ u ] מוכל ממש ב , d [ v ], f [ v ] ואז uצאצא של vבעץ .DFS .4האינטרוול d [ v ], f [ v ] מוכל ממש ב d [ u ], f [ u ] -ואז uאב קדמון של vבעץ \.DFS מסקנה :צומת vהוא צאצא של צומת uביער DFSעבור גרף מכוון/לא מכוון Gאם"ם ] . d [u ] d [ v ] f [ v ] f [u משפט המסלול הלבן :ביער DFSמכוון/לא מכוון ,צומת vהוא צאצא של uאם"ם בזמן ] , d [ uהזמן בו uהתגלה ,ניתן להגיע מ u -ל v -על מסלול המורכב כולו מצמתים לבנים. תכונות מהתרגול: בגרפים מכוונים יש רק קשתות עץ או קשתות אחוריות. הרצת DFSתסווג קשת כאחורית אם"ם יש מעגל בגרף. בהרצת DFSעל גרף מכוון , G V , E נסמן את הקשתות שסווגו כאחוריות ב . F E -אז הגרפים V , F ו V , E \ F -הם .DAG הסדר ההפוך לזה המושרה ע"י זמני הנסיגה מהצמתים הוא מיון טופולוגי. בכל הרצת ,DFSעץ ה DFS-האחרון מכיל את - RGקבוצת שורשי הגרף. 5 ©ענת עציון אלגוריתמים – )443432( 1אביב תש"ע רכיבים קשירים היטב: רכיב קשיר היטב :בגרף מכוון G V , E זו קבוצה מקסימאלית של צמתים Cב V -כך שלכל זוג צמתים u , vב C -יש מסלול מכוון מ v -ל u -ומ u -ל( . v -ייתכן מצב בו צומת בודד הוא הכי קשיר היטב). הגרף ההפכי :עבור גרף מכוון G V , E הוא T V , E T Gכך ש u , v | v , u E T E דהיינו ,הופכים את כיווני הקשתות ב . G -ב G -וב G T -יש אותם רכיבים קשירים היטב. ניתן ליצור את G Tב. O V E - האלגוריתם: .1מצא בעזרת DFSאת ערכי ] f [ vלכל צומת. .4הפוך את כיווני הקשתות וצור את הגרף . G T .4הפעל DFSעל הגרף ההפוך אבל בחר את הצמתים בלולאה הראשית לפי סדר יורד של ] . f [ v .3כל עץ DFSשמתקבל הוא רכיב קשיר היטב. סיבוכיות. O V E : למה :1-יהיו C , C שני רק"ה שונים בגרף מכוון . G -ויהיו u , vב C -ו u , v ב . C -נניח שיש מסלול מכוון מ u -ל u -ב , G -אז לא ייתכן מסלול מכוון מ v ל. v - מסקנה :גרף הרכיבים הוא .DAG הרחבת הגדרות "זמן גילוי" ו"זמן סיום" לקבוצת צמתים: U V , u d u u U f u U m in d U f U m ax למה :2-יהיו C , C שני רק"ה בגרף מכוון . G V , E נניח שיש קשת u , v כאשר , u C , v C אז . f C f C T מסקנה :יהיו C , C רק"ה שונים בגרף מכוון . G V , E נניח שיש קשת u , v Eכאשר , u C , v C אז. f C f C : גרף הרכיבים הקשירים היטב: גרף )Strongly Connected Components( G SC Cהוא גרף אשר צמתיו מייצגים רכיבים קשירים היטב ב G -וקשת מחברת בין שני צמתים u , vאם"ם קיים צומת u ברכיב הקשיר היטב המיוצג ע"י uוקיים צומת v ברכיב הקשיר היטב המיוצג ע"י vכך ש u v -קשת ב. G - 6 ©ענת עציון אלגוריתמים – )443432( 1אביב תש"ע מציאת שורשי הגרף: טענה :1-בהרצת DFSעל גרף מכוון החל מצומת , uמתקבל עץ DFSיחיד ביער ה DFS-אם"ם u הוא שורש של הגרף. אלגוריתם למציאת שורש אחד: קלט :גרף מכוון . G V , E פלט :שורש של הגרף או הודעה כי . R G .1הרץ DFSעל . G .4נסמן ב v -את שורש עץ ה DFS-האחרון. .4הרץ DFSעל Gהחל מ. v - .3אם התקבל עץ DFSאחד החזר את , vאחרת החזר כי . R G סיבוכיות. O V E : טענה :2-אם R G אז RGהוא רכיב קשיר היטב. טענה :3-אם R G אז הצומת הראשון במיון הטופולוגי של G SC Cהוא . RG רכיבים קשירים היטב ועצי :DFS טענה :4-יהא G V , E גרף מכוון ויהא Uרק"ה של . Gאם pהוא מסלול מ u -ל v -כאשר u , v Uאז pמוכל בשלמותו ב. U - משפט :יהא G V , E גרף מכוון ,ויהא Uרק"ה של . Gאז לכל ריצת U ,DFSמוכל בשלמותו בעץ .DFS גרפים קשירים למחצה: קשיר למחצה :גרף מכוון G V , E שעבור כל זוג צמתים u , vקיים מסלול מכוון מ u -ל v -או מסלול מכוון מ v -ל( u -או שניהם). האלגוריתם: קלט :גרף מכוון . G V , E פלט :הכרעה בדבר האם Gקשיר למחצה. .1חשב את . G SC C .4הרץ מיון טופולוגי על . G SC C .4הכרז "הגרף קשיר למחצה" אם"ם יש קשת בין כל שני צמתים עוקבים במיון. 7 ©ענת עציון אלגוריתמים – )443432( 1אביב תש"ע עצים פורשים מינימאליים: בהינתן גרף קשיר לא מכוון G V , E שבו לכל קשת u , v יש משקל , w u , v יש למצוא עץ פורש של הגרף שסה"כ משקל הקשתות בו הוא מינימאלי. הרעיון: נתקדם ע"י צביעת קשתות תוך הוספת קשתות קלות לעץ והשמטת קשתות כבדות .האלגוריתם יקיים בכל של את שמורת הצבע -קיים עפ"מ שמכיל את כל הקשתות הכחולות ואף אחת מהקשתות האדומות. חתך ( :)cutחתך בגרף G V , E הוא חלוקה של Vלשתי קבוצות זרות Xו . V \ X -נאמר שקשת חוצה את החתך אם קצה אחד שלה ב X -והשני ב. V \ X - האלגוריתם הגנרי: הכלל האדום :בחר מעגל חסר קשתות אדומות וצבע באדום את הקשת הלא צבועה הכבדה ביותר. הכלל הכחול :בחר מעגל חסר קשתות כחולות וצבע בכחול את הקשת הלא צבועה הקלה ביותר. האלגוריתם החמדן :הפעל את הכלל האדום והכחול (לא דטרמיניסטית) עד שכל קשתות הגרף צבועות .הקשתות הכחולות מהוות עפ"מ. משפט :1-האלגוריתם הגנרי צבוע את כל הקשתות של גרף קשיר Gומקיים את שמורת הצבע. האלגוריתם של :Prim .1הגדר עץ Tוהכנס לתוכו צומת כלשהו בגרף. .4כל עוד יש בגרף קשתות לא צבועות: 4.1בחר קשת קלה ביותר בחתך בין Tלשאר הגרף וצבע אותה בכחול. 4.4הכנס את הצומת אליו הייתה הקשת אל . T 4.4צבע באדום את כל הקשתות האחרות בחתך שמובילות אל הצומת. .4כל הקשתות הכחולות מגדירות עפ"מ. סיבוכיות במימוש בעזרת מערך. O V 2 : סיבוכיות במימוש בעזרת ערימה. O E lo g V : האלגוריתם של :Kruskal .1מיין את הקשתות לפי משקל בסדר לא יורד ואתחל את Tלהיות ריק. .4עבור על הרשימה הממוינת ולכל קשת eבצע: 4.1אם eסוגרת מעגל בעץ הכחול ,צבע את eבאדום 4.4אחרת ,צבע את eבכחול ובצע. T T {e} : .4החזר את אוסף קשתות Tכעפ"מ. סיבוכיות( O E lo g E O E lo g V :כי .) log E log V 2 log V 2 Kruskalמגדל את העפ"מ כיער ההולך ומתאחד Prim ,מתחיל מעץ קטן ובכל שלב מוסיף לו צומת. האלגוריתמים הללו הם "שלמים" -כל עפ"מ יכול להימצא על ידם. 8 ©ענת עציון אלגוריתמים – )443432( 1אביב תש"ע עפ"מ צהוב ביותר: כל קשת בגרף צבועה בצהוב או בשחור .נרצה לתת לקשתות צהובות עדיפות על-פני קשתות שחורות מאותו משקל .לשם כך נגדיר פונקצית משקל חדשה: e is yellow otherw ise 2 w e 1 / n w e w e טענה T :1-הוא עפ"מ צהוב ביותר לפי פונקצית המשקל wאם"ם Tהוא עפ"מ לפי פונקצית המשקל . w הערה :המונוטוניות של משקלי העצים נשמרת ללא קשר לצבע הקשתות. האלגוריתם: קלט :גרף לא מכוון וקשיר G V , E ופונקצית משקל . w : E N פלט :עפ"מ צהוב ביותר של . G .1חשב את פונקצית המשקל . w .4מצא עפ"מ Tלפי פונקצית המשקל w והחזר את Tכפלט. סיבוכיות. O E lo g V : הערה :בבעיית עפ"מ ,כל שמשנה הוא סדר המשקלות ולא ערך המשקלות עצמם .ולכן אם שתי פונקציות משקל שומרות על אותו יחס סדר בין המשקלות ,כל עפ"מ לפי פונקציה ראשונה יהיה עפ"מ אם"ם הוא עפ"מ לפי הפונקציה השנייה. מספר קשתות ממשקל זהה בעפ"מ: טענה :2-יהא G V , E גרף לא מכוון וקשיר עם פונקצית משקל . w : E Rאז לכל משקל נתון ,כל עפ"מ של Gמכיל את אותו מספר של קשתות ממשקל זהה. האם קיים עפ"מ המכיל קשת מסוימת. האלגוריתם הלא יעיל: קלט :גרף G V , E לא מכוון וקשיר עם פונקצית משקל , w : E Rוקשת . e E פלט :הכרעה בדבר האם קיים עפ"מ של Gהמכיל את . e .1צבע את eבצהוב ואת שאר הקשתות בשחור. .4הרץ את האלגוריתם למציאת עפ"מ צהוב ביותר .נסמן את העץ המתקבל ב. T - .4החזר "כן" אם"ם eהיא קשת ב. T - סיבוכיות. O E lo g V : טענה :1-קשת eנמצאת באיזשהו עפ"מ של Gאם"ם כל מעגל המכיל את , eמכיל קשת e e כך ש. w e w e - האלגוריתם היעיל: .1בנה את הגרף G V , E כך שE e E : w e w e - .4החזר "כן" אם"ם לא קיים מסלול המחבר בין שני צמתים u , vב. G - 9 ©ענת עציון אלגוריתמים – )443432( 1אביב תש"ע סיבוכיות. O V E : האם קשת מסוימת מופיעה בכל העפ"מים: האלגוריתם הלא יעיל: קלט :גרף G V , E לא מכוון וקשיר עם פונקצית משקל , w : E Rוקשת . e E פלט :הכרעה בדבר האם כל עפ"מ של Gמכיל את הקשת . e .1צבע את eבשחור ואת שאר הקשתות בצהוב. .4הרץ את האלגוריתם למציאת עפ"מ צהוב ביותר .נסמן את העץ המתקבל ב. T - .4החזר "כן" אם"ם eהיא קשת ב. T - סיבוכיות. O E lo g V : אלגוריתם לא יעיל נוסף: .1חשב את משקלו של עפ"מ של . G .4הסר את eוחשב את משקלו של עפ"מ בגרף החדש (אם בכלל קיים). . 4אם לא קיים עפ"מ בגרף החדש ,או שמשקלו של העפ"מ בגרף החדש גדול ממשקלו של העפ"מ בגרף המקורי ,החזר" :כן" .אחרת ,החזר" :לא". סיבוכיות. O E lo g V : טענה :2-קשת eנמצאת בכל עפ"מ של Gאם"ם כל מעגל המכיל את eמכיל קשת e כך ש- . w e w e האלגוריתם היעיל: .1בנה את הגרף G V , E כך שE e E : w e w e \ { e} - .4החזר "כן" אם"ם לא קיים מסלול המחבר בין שני צמתים u , vב. G - סיבוכיות. O V E : 11 ©ענת עציון אלגוריתמים – )443432( 1אביב תש"ע מסלולים קלים ביותר: מסלול :בהינתן גרף מכוון /לא מכוון G V , E שבו לכל קשת u , v משקל , w u , v המשקל של מסלול v k p v 0 v1הוא סכום המשקלות על הקשתות , v i k i 1 w v .w p i 1 מסלול קל ביותר :מסלול קצר ביותר מ u -ל v -הוא כל מסלול pשמקיים. w p dist u , v : מסלולים קצרים ממקור יחיד: טענה :1-יהי pמסלול קל ביותר מ s -ל u -אזי כל תת-מסלול של , pגם הוא קל ביותר. טענה( 2-אי-שוויון המשולש) :לכל קשת e u v מתקיים. s , v s , u w u v : הרעיון :נעדכן כל הזמן הפרות של אי-שוויון המשולש האלגוריתם הגנרי: , d s 0 .1ולכל . d v , v .4כל עוד יש קשת u , v עבורה סימוני dמפרים את אי-שוויון המשולש בצע שיפור מקומי: d v d u w u, v .4כשאין קשת עליה ניתן לבצע שיפור מקומי ,אז לכל צומת מתקיים. d v v : האלגוריתם של דייקסטרה: קלט :גרף ממושקל מכוון ללא קשתות שליליות וצומת . s פלט :לכל צומת . d v d ist s , v - v .1לכל v Vאתחל d v ואתחל . d s 0 .4ואתחל - Q ( Q Vקבוצת הצמתים עבורם .) d v v .4כל עוד Q בצע: 4.1מצא ב Q -צומת uבעל סימון d u מינימאלי. 4.4הוצא את uמ Q -ולכל קשת u , v בצע שיפור . u , v סיבוכיות. O E lo g V : טענה :1-יהי d u הערך d u כאשר uהוצא מ . Q -אם vהוצא מ Q -באיטרציה העוקבת אז: . d u d v מסקנה :1-הטענה נכונה גם לאיטרציות שאינן עוקבות. מסקנה :2-הסימון של צומת , d v vאינו משתנה אחרי הוצאת vמ. Q - טענה :2-בסיום ריצת האלגוריתם לכל קשת u , v מתקיים , d v d u w u , v :כלומר -לא ניתן לשפר מקומית. 11 ©ענת עציון אלגוריתמים – )443432( 1אביב תש"ע האלגוריתם של בלמן-פורד: קלט :גרף מכוון G V , E ממושקל ,ללא מעגלים שליליים וצומת . s פלט :לכל צומת . d v d ist s , v - v .1לכל v Vאתחל . d v :ואתחל . d s 0 .4בצע | V | 1פעמים: 4.1לכל קשת u , v בצע שיפור מקומי אם צריך. סיבוכיות. O V E : טענה :לכל צומת , vאם קיים מסלול קל ביותר מ s -ל v -שמכיל kקשתות ,אז לאחר kאיטרציות: . d v d ist s , v מציאת מסלולים קלים ביותר עם קשת אחת שלילית: האלגוריתם: קלט :גרף מכוון G V , E עם משקלות אי-שליליים על הקשתות ,פרט לקשת אחת e a , b שמשקלה שלילי .וכן ,הגרף חסר מעגלים שליליים .ונתון צומת . s V פלט :לכל צומת , v Vמשקל המסלול הקל ביותר מ s -ל. v - .1הסר את eמ. G - .4בגרף המתקבל חשב את d s v ואת d b v לכל , v Vבעזרת שתי הרצות דייקסטרה. .4לכל צומת v Vהחזר את הערך. m in d s a w e d b v , d s v : סיבוכיות. O V E lo g V : :All-Pairs Shortest Paths טענה :1-תהא h : V Rפונקצית משקל המתאימה לכל צומת מספר ממשי .נגדיר w h : E R באופן הבא :לכל קשת u v Eנגדיר . w h uv h u w uv h v :אזי: .1מסלול pמ u -ל v -הוא קל ביותר לפי wאם"ם הוא קל ביותר לפי . w h .4אין מעגלים שליליים לפי . w h האלגוריתם: קלט :גרף מכוון G V , E עם פונקצית משקל על הקשתות w : E Rללא מעגלים שליליים. פלט :משקל מסלול קל ביותר מכל צומת לכל צומת. .1בנה גרף G V , E כך ש V V { s } -ו. E E { sv : v V } - .4חשב את s v לכל vבעזרת האלגוריתם בלמן-פורד. .4חשב את פונקצית המשקל . w w uv s u s v 0 s 12 ©ענת עציון אלגוריתמים – )443432( 1אביב תש"ע .3מכל צומת u Vהרץ דייקסטרה לחישוב משקל מסלולים קלים ביותר מ u -לכל הצמתים ,ביחס לפונקצית המשקל . w נסמן את הערך המתקבל ב. d u , v - s .3עבור כל זוג צמתים u , v Vהחזר כפלט. d u , v s v s u : סיבוכיות: . O V 2 E V log V מציאת מעגל שלילי בגרף: האלגוריתם: קלט :מטריצת שערי חליפין Aשל nסוגי מטבעות. פלט :קיומה של סדרת החלפת מטבעות המבטיחה לנו רווח. .1בנה את הגרף G V , E על nצמתים .כל צומת ייצג מטבע .בין כל זוג צמתים i , jתהיה קשת עם משקל . w i , jונגדיר . w i , j log Ai , j .4הרץ את בלמן-פורד מצומת שרירותי s Vלהכרעה בדבר קיומו של מעגל שלילי בגרף ,והחזר כמוהו. סיבוכיות. O V E O n 3 : הערה :מכיוון שכל צמתי הגרף הם שורשים ,אם קיים מעגל שלילי אז הוא ישיג מכל צומת ולכן ניתן לבחור בשלב ( )4צומת שרירותי. 13 ©ענת עציון אלגוריתמים – )443432( 1אביב תש"ע אלגוריתמים חמדניים: בגישה חמדנית מבצעים בכל שלב את הצעד הטוב ביותר כרגע. קבוצה ב"ת גדולה ביותר בגרף אינטרוולים: נתונות nמשימות ,לכל משימה iנתון זמן התחלה siוזמן סיום . f iיש מכונה בודדת המסוגלת לבצע בכל רגע נתון משימה אחת לכל היותר. גרף אינטרוולים :גרף לא מכוון כך ש: .1אוסף הצמתים הם אינטרוולים. .4יש קשת בין שני אינטרוולים אם:ם הם נחתכים. מחפשים תת-קבוצה של צמתים שבין כל שניים אין קשת" -זרים בזוגות". קבוצה בלתי תלויה :קבוצה X Vשבה לכל u , v Xאין קשת . u , v E האלגוריתם: קלט :אוסף משימות , a n . S a1 ,לכל משימה זמן התחלה siוזמן סיום . f i פלט :תת-קבוצה מקסימאלית A Sשל משימות (או אינטרוולים) הזרים בזוגות. .1אתחל A ומיין את המשימות לפי זמני סיום לא יורדים (ונוכל להניח מעכשיו ש- fn .) f1 f 2 .4בנוסף אתחל i 0ו - i ( . f 0 -האינדקס האחרון שהוכנס ו f i -זו נקודת הסיום שלו). .4עבור m 1עד nבצע: 4.1אם a mזר לכל המשימות ב , A -אז } A A { a m סיבוכיות. O n lo g n : הערה :הרעיון הוא שאם המשימה שהסתיימה אחרונה ב( A -המזוהה עם האינדקס ) iלא נחתכת עם a mאז אף-אחת לא נחתכת איתו. טענה :1-בסיום האיטרציה ה , k -קיים פיתרון אופטימאלי * Xכך שלכל , 1 j k * .I j X IJ X 14 ©ענת עציון אלגוריתמים – )443432( 1אביב תש"ע עצי הופמן וקודים פרפיקסים: נתונים nתווים ,רוצים לקודד (להחליף) כל אחד מהם במחרוזת בינארית שונה .המטרה היא למצוא קידוד עבור טקסט המביא למינימום את אורך הטקסט המקודד. מילה :רצף של ביטים. קוד :אוסף לא ריק של מילים. קוד חד-פענח :בהינתן סדרה כלשהי של אותיות ,אחרי שנקודד את הסדרה נוכל גם לשחזר אותה. שתי סדרות שונות לא יקודדו לאותה סדרת ביטים. קוד פרפיקסי :קוד שבו אף מילה היא לא פרפיקס של מילה אחרת .קוד פרפיקסי הוא חד-פענח. התאמה בין קודים פרפיקסים לעצים בינאריים: לכל קוד פרפיקסי מתאים עץ בינארי .עלי העץ הם מילות הקוד .יהי Tעץ בינארי כזה ותהי xאות שקודדנו .המחרוזת שתייצג את התו xתופיע כמסלול משורש העץ לעלה המתאים. נסמן ב d T x -את עומק העלה ששווה גם לאורך מילת הקוד שמתאימה ל . x -אם לכל אות xיש תדירות , f x מספר הביטים הדרוש לקידוד הקובץ הוא f x d T x : . B Tנאמר כי T x הוא אופטימאלי (עבור הקוד והתדירות הנתונים) אם הסכום הנ"ל הוא המינימאלי האפשרי. הערה :ניתן להראות כי קוד אופטימאלי ייוצג ע"י עץ בינארי מלא (לכל צומת פנימי שני בנים) .מספר העלים , n :מספר הצמתים הפנימיים. n 1 : למה :1-קיים עץ אופטימאלי בו שתי מילים x , yבעלות תדירויות מינימאליות מתאימות לזוג עלים אחים בעלי עומק מקסימאלי. הרעיון :לעבור מבעיה עם nמילים- n 1מילים , z, f z y , x, f x , y, f C w1 , f1 ,לבעיה עם C w1 , f1 ,כאשר . f z f x f y :ולאחר שנפתור בעיה זו עבור n 1מילים ,נחליף את zונתייחס אליה כאל צומת פנימית עם בנים . x , y למה :2-יהי C הקוד המתקבל מ C -ע"י החלפת זוג אותיות בעלות תדירויות מינימאליות באות חדשה zכך ש , f z f x f y ויהי T עץ אופטימאלי עבור , C אז העץ Tהמתקבל מ- T ע"י הפיכת העלה המתאים ל z -לצומת פנימי ולו שני בנים , x , yהוא עץ אופטימאלי עבור . C אלגוריתם הופמן רקורסיבי לקוד פרפיקסי אופטימאלי: ):Recursive_Huffman(Q קלט :ערימה . Q פלט :עץ הופמן של איברי . Q .1אם , | Q | 2קודד אות אחת ב '0'-ואת השנייה ב.'1'- .4אחרת, 4.1הוצא מ 4 Q -איברים x , yבעלי תדירות מינימאלית ,והכנס ל Q -איבר חדש z שתדירותו . f z f x f y 4.4קרא ל Recursive_Huffman(Q) -שמחזיר את . T הוסף לעלה המתאים ל z -את xו y -כבנים ב , T -והחזר את העץ שהתקבל. T - סיבוכיות. O n lo g n : 15 ©ענת עציון אלגוריתמים – )443432( 1אביב תש"ע קבוצה ב"ת גדולה ביותר ממושקלת עם אינטרוולים: נתון אוסף משימות כאשר משימה מאופיינת כמו קודם בזמני התחלה וסיום אבל גם במשקל . w iיש למצוא תת-קבוצה ב"ת של אינטרוולים שמשקלה הוא המקסימאלי האפשרי. . a1 , - o p t i המחיר של פיתרון אופטימאלי כלשהו עבור המשימות , a i - p red i האינדקס של האינטרוול שהסתיים מאוחר ביותר מבין האינטרוולים a iשמסתיימים עד , siאו 0אם אין כאלה. נגדיר . o p t 0 0 טענה :לכל 1 i nמתקיים: opt i 1 . opt i m ax opt pred i w i האלגוריתם: .1אתחל A 0 , o p t 0 0ומיין את המשימות בסדר לא יורד לפי זמני הסיום. .4לכל 1 i nמצא את . p red i .4לכל 1 i nבצע: 4.1אם o p t i 1 o p t p red i w i :אזי: A i A p red i { a i } 4.1.1 . o p t i o p t p red i w i 4.1.4 4.4אחרת: . A i A i 1 4.4.1 o p t i o p t i 1 4.4.4 .3החזר את . A n סיבוכיות. O n lo g n : מילה בינארית רחוקה: מרחק בין שתי מחרוזות בינאריות באורך x n : n x x1 x 2וy n - y y1 y 2מוגדר להיות: . d x , y i [ n ] : xi y i המרחק של מחרוזת wמקבוצת מחרוזות Aנתון ע"י. d w , A m in d w , a : a A : הרעיון :לבנות את wבצורה חמדנית -את w iנקבע לערך ההפוך מהביט ה i -המתקבל ע"י רוב המחרוזות ב A -אשר קרובות ביותר ל w -כרגע. האלגוריתם: קלט :קבוצה Aשל kמחרוזות בינאריות מאורך . n פלט :מחרוזת בינארית wכך ש. d w , A n log k - 16 ©ענת עציון אלגוריתמים – )443432( 1אביב תש"ע . B A .1 .4עבור על iמ 1-עד: n - 4.1חשב כמה וקטורים יש ב B -כך שהכניסה ה- i -ית שלהם היא 0וכמה כאלה יש עם 1 בכניסה זו .אם יש יותר וקטורים עם כניסה 0קבע , w i 1אחרת :קבע. w i 0 : 4.4הסר מ B -את כל הוקטורים שהכניסה ה- i -ית שלהם שונה מהכניסה של . w i 4.4אם Bריקה קבע . B A סיבוכיות. O nk : צביעה של גרפים: צביעה חוקית :יהא G V , E גרף לא מכוון .צביעה חוקית של Gהיא פונקציה c : V Nכך שלכל u v Eמתקיים. c u c v : המספר הכרומאטי :המספר המינימאלי של צבעים הדרוש לצביעה של גרף . Gסימון. G : נסמן ב d n - d 1 d 2 את הדרגות של צמתי הגרף ,מסודרים בסדר לא עולה. האלגוריתם: קלט :גרף לא מכוון G V , E וסדר כלשהו על הצמתים. פלט :צביעה חוקית cשל Gהמשתמשת בלכל היותר d 1 1צבעים. .1עבור צומת עם הסדר הנתון של הצמתים .יהא vהצומת הנוכחי. .4קבע את c v להיות הצבע המינימאלי שאינו בשימוש ע"י שכניו של . v סיבוכיות. O V E : אלגוריתם חמדן משופר: קלט :גרף לא מכוון . G V , E פלט :צביעה של Gבלכל היותר d G 1צבעים. .1מיין את צמתי הגרף לפי דרגותיהם ,מהגבוה לנמוך. .4הרץ את האלגוריתם הקודם עם הצמתים מסודרים לפי המיון משלב (.)1 סיבוכיות. O V E lo g E : הערה :האלגוריתם הוכיח אי-שוויון קומבינטורי מעניין. G d G 1 : שברים מצריים: טענה :כל מספר רציונאלי בתחום 0,1 ניתן לכתיבה כסכום סופי של שברים מצריים שונים. האלגוריתם :כל עוד אין בידינו דבר מצרי ,מצא את השבר המצרי הגדול ביותר שנכנס בתוך (כלומר, הקטן מ) השבר שבידינו -שבר זה יהיה אחד המחוברים .על ההפרש נריץ את האלגוריתם ברקורסיה. 17 ©ענת עציון אלגוריתמים – )443432( 1אביב תש"ע כיסוי בצמתים של עצים: כיסוי בצמתים ( :)Vertex Coverבהינתן גרף לא מכוון , G V , E כיסוי בצמתים של Gהוא קבוצת צמתים U Vכך שלכל קשת , u v Eלפחות אחד מהצמתים u , vשייך ל. U - הרעיון :נביט בעלה vשל העץ .יהיה uהשכן (היחיד) שלו .כל כיסוי חייב לכסות את הקשת uv ולכן בהכרח מכיל אחד מבין . u , vנבחין כי אין טעם לקחת את vלכיסוי שכן vמכסה אך ורק את uvוזאת לעומת uשאולי מכסה גם קשתות נוספות. האלגוריתם: קלט :עץ לא מכוון . G V , E פלט :כיסוי צמתים לG - . U .1 .4כל עוד לא קיים עלה vב: G - 4.1הוסף את , uהשכן של vל. U - 4.4הסר את כל הקשתות הנוגעות ב. u - סיבוכיות. O V E : טענה :1-בכל יער בו יש קשת אחת לפחות ,יש שני עלים .ולכן כל עוד יש קשתות בגרף ,יש עלה. טענה :2-לכל iקיים כיסוי מינימאלי המכיל את הצמתים , v i ( v1 , v 2 ,סדר הכניסה ל.) U - קידוד הופמן: טענה :אם כל תו מופיע בקובץ בתדירות קטנה ממש מ 1 3 -אזי בהכרח בעץ הופמן לא תהיה מילת קוד מאורך .1 טענה :לכל אלגוריתם כיווץ ולכל אורך nטבעי ,קיימת מילה x {0,1} nשהאלגוריתם אינו מכווץ. 18 ©ענת עציון אלגוריתמים – )443432( 1אביב תש"ע תכנות דינאמי: סידור אופטימאלי לכפל של nמטריצות: נתונה סדרה של nמטריצות, An : A1 , A2 ,ונרצה לחשב את המכפלה An : . A1 A2 הסדר בו נבצע את ההכפלות ישפיע במידה רבה על סיבוכיות החישוב. האלגוריתם: קלט n :מטריצות , An A1 ,כאשר מטריצה Aiממימד . p i 1 p i . A1 פלט :סידור סוגריים אופטימאלי למכפלה An נחזיק מערך דו-מימדי ] , m [ i , jשישמור בכניסה ה i , j -את מספר ההכפלות המינימאלי בהכפלת Aj . Ai ונרצה לקבל כפלט את ] . m [1, n נחשב את ] m [ i , jבאופן רקורסיבי: אם , i jאז השרשרת מכילה מטריצה בודדת ולכן . m [ i , j ] 0 אם , i jנניח שיש השמת סוגריים אופטימאלית שמפצלת את , A jמספר המכפלות עבור , A j , Ai ,בין Akל , Ak 1 -אז Ai ,הוא . m [ i , j ] m [ i , k ] m [ k 1, j ] p i 1 p k p j :כעת יש B1 B 2 B1 B2 j 1 אפשרויות לבחירת kולכן: i j i j 0 m [i, j ] m in m [ i , k ] m [ k 1] p i 1 p k p j i k j .1עבור 1 i nבצע. m [ i , i ] 0 : .4עבור j 1עד n 1בצע( :אורך הרצפים נקבע ע"פ .) j 4.1עבור l 1עד n jבצע( :המטריצה השמאלית ביותר נקבעת לפי ) l . m [ l , l j ] m in m [ l , k ] m [ k 1, l j ] p l 1 p k p l j 4.1.1 lk l j סיבוכיות. O n 3 : 19 ©ענת עציון אלגוריתמים – )443432( 1אביב תש"ע אלגוריתם פלויד וורשל למציאת כל המסלולים הקלים ביותר: i j 0 w i, j w i, j פונקצית המשקל המוכללת i , j E : otherw ise פונקצית חסם עליון המוכללת :פו' d : V V Rשמקיימת. dist i , j d i , j w i , j : כלל שיפור מקומי :עבור השלשה : i , k , j אם d i , k d k , j d i , j אז: . d i, j d i, k d k , j טענה :אם dפונקצית חסם עליון מוכללת והופעל עליה כלל שיפור מקומי ,אז אחרי העדכון d נותרה פונקצית חסם עליון מוכללת. האלגוריתם: קלט , G V , E :פונקצית משקל w : E Rובה"כ, n} : . V {1, 2, פלט :לכל זוג צמתים לכל זוג צמתים . d i , j d ist i , j - i , j V .1לכל זוג צמתים i , j בצע. d i , j w i , j : .4עבור k 1עד nבצע: 4.1לכל זוג צמתים i , jבצע שיפור i , k , j כלומר: . d i , j m in d i , j , d i , k d k , j k סיבוכיות. O V 3 : רמה :k-מסלולים שמכילים בתור צמתים פנימיים רק צמתים מ 1-עד.k - : dist i , j משקל המסלול המינימאלי מבין כל המסלולים ברמה ה k -מ i -ל j -או אם אין k מסלול כזה. למה :1-לכל , o k nאחרי איטרציה kמתקיים. d i , j dist i , j : k dist k 1 i , j טענה :לכל : 1 k n i , j m in k 1 k 1 i , k dist k , j dist k . dist 21 ©ענת עציון אלגוריתמים – )443432( 1אביב תש"ע :Knapsack a1 ,עם משקלים חיוביים נתון תרמיל גב שלו קיבולת משקל Wונתונים nעצמים , a n . w1 ,לכל עצם a iמותאם מספר p iהמציין את החשיבות של העצם .רוצים להכניס לשק , wn קבוצת עצמים שחשיבותם מקסימאלית .כלומר: wi W p i m ax p j 1 i n wj W and נסמן ב F k , w -את הרווח המקסימאלי כאשר בוחרים עצמים מתוך , a k 1 i n a1 ,בלבד ,וגודל התרמיל הוא . wאנו רוצים לחשב את . F n , W טענה :1-אם k 0או w 0אז . F k , w 0אחרת: wk w otherw ise F k 1, w F k, w m ax F k 1, w , p k F k 1, w w k כלומר :אם המשקל חוקי ,נרצה את המקסימאלי מבין רצף ההכנסות שכולל את הפריט ורצף ההכנסות שלא כולל את הפריט. האלגוריתם: צור מטריצה Aמגודל n 1 W 1 ומלא את השורה המתאימה ל k 0עד לשורה המתאימה ל , k n -כאשר כל שורה מלא בסדר כלשהו .את חישוב כניסות המטריצה בצע לפי הנוסחה שבטענה .1-בסיום החזר את ] . A[ n , W סיבוכיות( O n W :כל כניסה ב .) O 1 -סיבוכיות פסאודו פולינומיאלית. הערה :ניתן למצוא מהו הפיתרון (ולא רק את ערכו) ע"י סימון איזו כניסה עדכנה את הכניסה הנוכחית במטריצה. קבוצה בלתי תלויה מקסימאלית בעץ: מציאת קבוצה בלתי תלויה מקסימאלית בעץ מכוון . T V , E הרעיון :נכוון את העץ ונסמן ב r -את השורש .ולכל צומת vנסמן: : S v גודל קבוצה ב"ת מקסימאלית בתת עץ ש v -שורשו הכוללת את . v : S v גודל קבוצה ב"ת מקסימאלית בתת עץ ש v -שורשו שאינה כוללת את . v : S v -גודל קבוצה ב"ת מקסימאלית בתת עץ ש v -שורשו ,ללא הגבלות. v , S v טענה :2-לכל v Vמתקיים: u S S v m ax S v 1 S u child v S u v S u child v 21 ©ענת עציון אלגוריתמים – )443432( 1אביב תש"ע האלגוריתם: קלט :עץ לא מכוון . T V , E פלט :גודל קבוצה בלתי תלויה מקסימאלית. .1הרץ DFSעל Tעם הווריאציה הבאה :בכל פעם שמבצעים נסיגה מצומת , vחשב את . S v, S v, S v .4החזר את . S r סיבוכיות. O V E : קבוצה בלתי תלויה מקסימאלית בגרף כללי: האלגוריתם: . S .1 .4כל עוד : V 4.1בחר צומת v Vבעל דרגה מינימאלית dבגרף הנוכחי. 4.4הוסף את vל. S - 4.4מחק את vואת כל שכניו _עם הקשתות החלות עליהם) מ. G - .4החזר את . S סיבוכיותO V E : משפט :האלגוריתם מחזיר קבוצה ב"ת עם n 1 צמתים ,כאשר זו הדרגה המינימאלית בגרף. תת-סדרה מונוטונית ארוכה ביותר: תהא , a n a1 , a 2 ,סדרת מספרים .נחפש תת-סדרה מונוטונית לא יורדת ארוכה ביותר של הסדרה. הרעיון :נמצא לכל , kאורך תת-סדרה מונוטונית לא יורדת ארוכה ביותר של הסדרה המסתיימת ב- . a kכלומר הערך המבוקש הוא. m ax T k : k n : - A k j : j k and a j a k קבוצת האינדקסים של כל האיברים שיכולים להופיע לפני a k בתת-סדרה מונוטונית. טענה: Ak Ak j A k j: m ax T T k 1 0 סיבוכיות :כל ערך T k ניתן לחשב ב O k -ולקיחת מקסימום על כולם תיתן. O n 2 : 22 ©ענת עציון אלגוריתמים – )443432( 1אביב תש"ע בעיית הסוכן הנוסע האוקלידית הביטונית: נתונות nנקודות במישור ,יש לחשב את המעגל הקצר ביותר המחבר את כל הנקודות. מעגל ביטוני :מסלול המתחיל בנקודה השמאלית ביותר ,מתקדם ימינה דרך חלק מהנקודות ואז חוזר שמאלה דרך כל הנקודות הנותרות. הרעיון :נסמן את הנקודות ב, p n - p1 , p 2 ,לפי קואורדינאטת xעולה .ניסוח שקול לבעיה :שני סוכנים שרוצים לנוע מ p1 -ל p n -תוך שהם נעים ימינה בלבד ,יחדיו מבקרים בכל הנקודות אך אינם מבקרים באותה נקודה .מציאת זוג מסלולים כאלה משרה מסלול ביטוני. - d i , j המרחק בין הנקודות . p i , p j - B i אורך מסלול ביטוני קצר ביותר עבור הנקודות , p i . p1 ,נרצה לחשב את . B n - B i , j נתנה את המסלול בנקודה j -שבה מבקר הסוכן לפני שביקר בנקודה האחרונה. i - i 1 d k , k 1 k j 1 j, i d d is tan ce for 1 st ' till i j 1 j, d no one visit both j & j 1 B j 1 B i, j length w hrn both finish at j 1 dis tan ce for 2 nd : all dots from j 1 to i ואז החישוב המבוקש יהיהB i m in B i , j : j [ i 2] : סיבוכיות. O n 3 : רווח מקסימאלי בתורת המשחקים: משחק שבו הרווח המקסימאלי של כל שחקן הינו סכום מספריו פחות סכום השחקן השני. הרעיון: עבור i jנסמן ב T i , j -את הרווח של אליס עבור משחק על הסדרה , a j הרקורסיבי הוא היחס הבא: i j i j . a i , a i 1 ,היחס ai T i, j m ax a i T i 1, j , a j T i , j 1 אם : i jיש רק איבר אחד בסדרה ולכן אין ברירה אלא לקחת אותו ולהרוויח . a i אחרת ,יש בחירה בין לקחת a iל-לקחת . a jואז לפי הבחירה ,התור עובר לשחקן השני והסכום שהוא הרוויח עקב בחירה זו ,יורק מסכום השחקן הראשון ולכן המינוס. סיבוכיות. O n 2 : 23 ©ענת עציון אלגוריתמים – )443432( 1אביב תש"ע רשתות זרימה וזרימת מקסימום: אפיוני רשתות זרימה: קיבולת על הקשתות שחוסמת את כמות הזרימה על כל קשת. צומת מקור שמייצר זרימה. צומת בור (או "יעד") שקולט את הזרימה. זרימה על הקשתות.תכונות של זרימה ברשתות: נסמן ב f e -את הזרימה על הקשת המכוונת . e E אילוץ הקיבול :הזרימה דרך הקשת eאינה יכולה לחרוג מקיבול הקשת ,כלומר: .0 f e c e שימור הזרימה :לכל הצמתים } , v V \ { s , tסה"כ הזרימה שנכנסת ל v -שווה לסה"כ הזרימה שיוצאת מ. v - ערך פונקצית הזרימה :סה"כ הזרימה מהמקור לבור ,סימון | f | :או F f e f e e out t .F e in t חתך s-tברשת זרימה: חתך S , Sכך ש S V , S V \ S -ומתקיים. s S , t S : קיבול של חתך c e : S , S למה :1-לכל חתך s-t e S , S ( c S , S סכום קשתות שיוצאת מ Sל.) S - S , Sולכל פונקצית זרימה fמתקייםf e : e S , S f e מסקנה :אפשר לחשב את ערך פונקצית הזרימה Fע"י הסתכלות על חתך כלשהו .F e S , S , S , Sאו ע"י חישב סה"כ הזרימה מהמקור או ע"י חישוב סה"כ הזרימה לבור. למה :2-לכל חתך S , Sולכל פונקצית זרימה fמתקיים: מסקנה :אם קיים חתך s-t .F cS,S S , Sכך ש F c S , S -אז Fהיא זרימת מקסימום. מסלולי שיפור: קיבול שיורי :לכל קשת e u , v עם קיבול c e וזרימה f e נגדיר שתי קשתות עם קיבול שיורי: .1קשת קדמית u , v עם קיבול . c e f e .4קשת אחורית v , u עם קיבול . f e הערה :למעשה ,קיבול כל קשת הינו סך הזרימה שניתן להזרים עליה בנוסף לזרימה הקיימת. הגרף השיורי :יסומן G fהוא אוסף כל הקשתות עם קיבול שיורי חיובי ממש. מסלול שיפור :מסלול מ s -ל t -בגרף השיורי. 24 ©ענת עציון אלגוריתמים – )443432( 1אביב תש"ע למה :3-עבור מסלול שיפור pתהי הקיבול השיורי הקטן ביותר לאורך . pאז א נגדיל את הזרימה ב -בכל קשת המתאימה לקשת קדמית ב p -ונטין את הזרימה ב -בכל קשת המתאימה לקשת אחורית ב , p -נקבל פונקצית זרימה חוקית כך שערך הזרימה גדל ב. - משפט חתך מינימום-זרימת מקסימום (:)Min Cut – Max Flow תהי fפונקצית זרימה ברשת זרימה . N G , s , t , c אזי הטענות הבאות שקולות: f .1זרימת מקסימום. .4אין מסלול שיפור מ s -ל t -ברשת השיורית. .4קיים חתך s-t טענה :1-אם S , Sעבורו ( F c S , Sוזהו חתך מינימום). e S , Sאז . f e c e כלומר e ,רוויה. טענה :2-אם e S , S אזי . f e 0 האלגוריתם של Ford-Fulkersonלמציאת זרימת מקסימום: האלגוריתם הגנרי: .1אתחול -זרימה 0בכל הקשתות. .4כל עוד קיים מסלול שיפור pמ s -ל t -ב , G f -שפר עליו את הזרימה (ניתן למצוא מסלול שיפור ע"י הרצת ,BFSלמשל). הערות: אם הקיבולים על הקשתות לא רציונאליים ,לא מובטח שהאלגוריתם יעצור. אם הקיבולים על הקשתות שלמים ,האלגוריתם ימצא זרימת מקסימום בשלמים ,שהרי יש שיפור ב 1-לפחות בכל איטרציה .נשים-לב שמספר האיטרציות עלול להגיע עד ל , F -ערך זרימת המקסימום. * סיבוכיות :מספר האיטרציות , O | f * | :זמן לביצוע כל איטרציה . O V E :סה"כ. O f * E : האלגוריתם של אדמונדס-קרפ: בכל איטרציה בוחרים את מסלול השיפור הקצר ביותר מ s -ל. t - גרעין של רשת זרימה :אוסף קשתות ב G , s , t , c -על מסלול קצר ביותר מ s -ל . t -סימון. S G : טענה :1-תהי G , s , t , c רשת זרימה ותהי v S G uאז הוספת הקשת v u לG - אינה משנה את הגרעין . S G מסקנה :אם נוסיף kקשתות שהפוכות לקשתות גרעין ,הגרעין יישמר. טענה :2-יהיו G ו G -שתי רשתות שיוריות באיטרציות עוקבות של האלגוריתם .אז לפחות אחד מהשניים מתקיים: ( G s , t G s , t .1המסלול הקצר ביותר מתארך). ( | S G | | S G | .4גודל הגרעין קטן). מסקנה :מקרה 1-יכול להתרחש | | Vפעמים לכל היותר .בין שתי פעמים עוקבות שבהן 1התרחש, הגרעין יכול היה לקטון בלכל היותר | . | Eולכן כמות האיטרציות היא. O V E : 25 ©ענת עציון אלגוריתמים – )443432( 1אביב תש"ע סיבוכיות :איטרציה בודדת לוקחת O E :ולכן בסה"כ: . O E 2V האלגוריתם של דיניץ: גרף שכבות :בהינתן גרף שיורי , G fגרף השכבות L f -הוא תת-גרף של הגרף השיורי ,המכיל רק את הקשתות המעבירות אותנו משכבה אחת לאחרת ועוצר כשמגיע ל. t - זהו תת-גרף המכיל את כל המסלולים הקצרים ביותר מ s -ל . t -סימון - f v :אורך המסלול הקצר ביותר מ s -ל. v - מכיל רק קשתות u vב G f -עבורן. f v f u 1 : הגרף מכיל רק צמתים vכך ש. f v f t - זרימה חוסמת בגרף השכבות :זרימה שאין עבורה מסלולי שיפור בגרף השכבות (כלומר ,אין מסלולים מכוונים מ s -ל t -בגרף השכבות לאחר שמוחקים קשתות עם קיבול אפס). האלגוריתם: f e 0 .1לכל קשת . e E .4כל עוד רשת השכבות L f , s , t , c fמכילה מסלול מ s -ל: t - 4.1מצא זרימה חוסמת f ברשת השכבות. ( f f f 4.4שיפור fבאמצעות הזרימה החוסמת). .4החזר את . f טענה :1-בסיום ריצת האלגוריתם f ,היא זרימת מקסימום של . G , s , t , c טענה :2-יהיו ( G הראשונה) ו( G -השנייה) שתי רשתות שיוריות באיטרציות עוקבות של האלגוריתם של דיניץ .אז מתקיים. G s , t G s , t : מסקנה :האלגוריתם של דיניץ מבצע לכל היותר | | Vאיטרציות. מציאת זרימה חוסמת: f 0 .1לכל eברשת השכבות. .4כל עוד יש קשתות שיוצאות מ: s - 4.1הרץ DFSמ s -עד שתגיע לצומת עם דרגת יציאה .0 4.4אם הצומת הזה אינו , tמוחקים את כל הקשתות שנכנסות אליו. 4.4אם הצומת הזה הוא : t 4.4.1יהי pהמסלול מ s -ל t -בסריקה הנוכחית. 4.4.4מוסיפים ל f -את הזרימה הגדולה ביותר שניתן להזרים על-פני . p 4.4.4מוחקים את כל הקשתות ב p -שלא ניתן להזרים עליהן עוד זרימה. סיבוכיות. O V E : 26 ©ענת עציון אלגוריתמים – )443432( 1אביב תש"ע זרימה עם חסמים תחתונים: רשת זרימה עם קיבולים עליונים ותחתונים היא b : E R . G , s , t , c , b :מציין את הקיבולים התחתונים על כל קשת. הערה :לא תמיד קיימת זרימה חוקית ,בניגוד לזרימה ללא חסמים תחתונים בה תמיד יש זרימה אפס שהיא חוקית. הכרעה האם יש זרימה חוקית: נבנה רשת זרימה N G , s , t , c בעלת קיבולים עליונים בלבד. } , V V { s , t } , E E {t s , s t } { s u , u t : u V ועבור כל c e c e b e : e Eו. c t s - b e b e c s u e in e c u t e out u משפט :קיימת זרימה חוקית ב N -אם"ם קיימת ב N -זרימת מקסימום שערכה הוא. b e : e E 27 ©ענת עציון אלגוריתמים – )443432( 1אביב תש"ע שידוך מקסימום בגרף דו-צדדי: עבור G V L R , E גרף דו-צדדי: שידוך :תת-קבוצה של קשתות Mכך שלכל שתי קשתות אין נקודת קצה משותפת. שידוך מקסימום :שידוך Mכך שלכל שידוך M אחר מתקיים. | M | | M | : שידוך מושלם :שידוך Mכך שכל צומת בגרף היא נקודת קצה של איזושהי קשת מ. M - מציאת שידוך מקסימום בעזרת זרימה: נגדיר את הגרף המכוון G V , E באופן הבא: }V V { s , t E s , u : u L u , v : uv E , u L , v R v , t : v R טענה :1-ב G -יש שידוך בגודל kאם"ם ב G -יש זרימה בגודל . k האלגוריתם: קלט :גרף דו-צדדי . G V L R , E פלט :שידוך מקסימום ב. G - .1בנה את רשת הזרימה N G , s , t , c עם G כפי שהוגדר לעיל ו. c 1 - .4הרץ את פורד-פולקרסון לחישוב זרימת מקסימום ב. N - .4החזר. M uv : f u , v 1 : סיבוכיות. O V E : כיסוי מינימאלי במסלולים: כיסוי במסלולים :יהי G V , E גרף מכוון .כיסוי במסלולים של צמתי Gהוא קבוצת מסלולים זרים בצמתים ב G -כך שכל צומת ב G -מוכל באחד המסלולים בכיסוי (מסלול עשוי להיות מורכב מצומת יחיד). הרעיון :לייצג מסלול ע"י כך שנשדך לכל צומת את הצומת העוקב לו במסלול. נגדיר גרף דו-צדדי לא מכוון G V L R , E באופן הבא: } E {u 1 v 2 : u , v E } R {v 2 : v V } L { v1 : v V טענה :2-ב G -יש כיסוי במסלולים בגודל kאם"ם ב G -יש שידוך בגודל . n k האלגוריתם: קלט :גרף .DAG G V , E פלט :כיסוי מינימאלי במסלולים. .1חשב את . G .4מצא שידוך מינימום Mב. G - .4החזר כיסוי שקשתותיו הן כל הקשתות uvכך ש. u1v 2 M - סיבוכיות. O V E : 28 ©ענת עציון אלגוריתמים – )443432( 1אביב תש"ע משפט החתונה של :Hall הגדרה :יהא G V , E גרף לא מכוון .בהינתן קבוצת צמתים , Aנסמן ב A -את קבוצת השכנים של צמתי , Aכלומר. A v V : u A , u v E : המשפט :יהא G V L R , E גרף דו-צדדי עם . | L | | R | nב G -קיים שידוך מושלם אם"ם לכל A Lמתקיים. | A | | A | : הקשירות בקשתות: קשירות בקשתות :בהינתן גרף לא מכוון , G V , E הקשירות בקשתות של , Gהוא המספר המינימאלי של קשתות שהסרתן מ G -הופכת אותו ללא קשיר .סימון. G : טענה :1-נסמן ב e A -את מספר הקשתות החוצות חתך A , V \ A כלשהו בגרף (זהו אינו חתך .)s-tאז מתקיים , G m i n e A : A V , A { , V } :כלומר :מספר הקשתות המינימאלי בחתך כלשהו בגרף. הגדרת רשת זרימה עבור הבעיה: נגדיר גרף מכוון G V , E באופן הבא . E u , v , v , u : uv E :ניתן לכל קשת קיבול יחידה ונקבע את sלהיות צומת שרירותי מ. V - טענה :2-לכל t Vנסמן ב f t * -זרימה מקסימאלית ברשת . N t G , s , t , c אז מתקיים: . G m in f t * : t V האלגוריתם: קלט :גרף לא מכוון וקשיר . G V , E פלט. G : .1חשב את . G .4קבע sבאופן שרירותי ,ולכל t sחשב את * . f t .4החזר. m in | f t * |: t V \ { s } : סיבוכיות :להרצה אחת לחישוב זרימת מקסימום: O V E * ( O E fכי | f t | nלכל .) tולn - * הרצות. O V 2 E : 29 ©ענת עציון אלגוריתמים – )443432( 1אביב תש"ע קונבולוציות והתמרת פורייה המהירה (:)FFT כפל פולינומים: נתון פולינום ממעלה , a n 0 n n j x j a . Ax j0 ייצוג :1-שמירת הפולינום בעזרת וקטור המקדמים שלו, a n - חישוב ערך בנקודה; O n : . a a 0 , a1 , חיבור שני פולינומים; O n : כפל שני פולינומים: 2 O n ייצוג :2-פולינום ממעלה nניתן לייצוג בעזרת n 1נקודות שמקיימות. y i A x i : חיבור שני פולינומים (עבור אותן נקודות ; O n :) x סיבוכיות הכפל. O n : מעבר מייצוג ע"י וקטור לייצוג ע"י נקודות: בוחרים n 1ערכי xשונים ,מציבים ומקבלים את ערכי yהמתאימים. מעבר מייצוג ע"י נקודות לייצוג ע"י וקטור -משפט האינטרפולציה: בהינתן n 1נקודות שונות x i , y i כך ש x i x j -אז קיים פולינום יחיד Aממעלה , n -כך ש- . A xi y i סיבוכיות מעבר בין הייצוגים. O n lo g n : אלגוריתם יעיל לכפל פולינומים – קונבולוציה: .1נבחר 2 nערכים , x 2 n x1 ,ונמצא את ערכי הפולינומים A x j , B x j עבור . 1 j 2 n .4נחשב את C x j A x j B x j לכל . j .4נחשב את המקדמים של , c 2 n 2 - C x c 0 , c1 ,מהערכים שחישבנו, C x 2 n - C x1 ,תוך שימוש במשפט האינטרפולציה. הבעיה :בשלב ( :)1חישוב ישיר של ערך הפונקציה ממעלה n 1ב 2 n -נקודות דורש n 2 ולכן נתגבר על הבעיה ע"י לקיחת 2 nנקודות שיש ביניהן קשר :שורשי היחידה המרוכבים. למה :1-ניתן לחשב את A x ב 2 n -שורשי היחידה ב O n lo g n -צעדים. 2 n 1 למה :2-לכל פולינום s x s c C x והפולינום המתאים s0 , d s C w s , 2 n מתקייםD w 2 n s , 2 n : 2 n 1 s dsx D x כאשר s0 1 2n ( c s כלומר נוכל לקבל את מקדמי הפולינום C x ע"י חישוב ערכי D x בשורשי היחידה). 31 ©ענת עציון אלגוריתמים – )443432( 1אביב תש"ע חיבור איברי קבוצות ביעילות: יהיו }, n . A , B {1, 2,נגדיר. A B { a b : a A , b B } : אלגוריתם לחישוב :A+B . A , B {1, 2, קלט :קבוצות A , Bומספר nכך ש, n} - פלט :הקבוצה . A B n .1חשב את הפולינומים: i bx i n bx i ai x , i 1 i B 1 bi 0 i B i A a x כאשר i 1 1 ai 0 i A .4חשב את הפולינום a b x :כאשר עבור כל , 1 k 2 nהמקדם של x kבפולינום a bהוא: 2n k i ab i . c k אך כך c k 1אם"ם . k A B i 1 .4החזר. {i : c k 1} : סיבוכיות. O n lo g n : מחזור מינימאלי של מחרוזת בינארית: תהא s n 1 s s 0 s1מחרוזת בינארית. מחזור של מחרוזת :נאמר כי sהיא בעלת מחזור tאם לכל ( i t jמודולו ) tמתקיים . s i s j סימון - T s :המספר המינימאלי tשמקיים תכונות מחזור של מחרוזת. האלגוריתם: קלט :מחרוזת בינארית s n 1 . s s 0 s1 פלט. T s : n 1 .1חשב את הפולינומים x s n 1 1 n 1 x x 2 s0 s2 1 x 1 1 s1 x sn 2 1 s0 p x 1 s n 1 q x 1 .4חשב את הפולינום , p q x :כאשר עבור 1 k n 1המקדם של x n k 1בפולינום הוא: | } n k 2 | {i : s i s k i or 0 i n k 1 s n 1 n k 1 i 1 1 s1 c k ולכן c k n kאם"ם ל s -יש מחזור ( kואחרת .) c k n k .4החזר את ה k -המינימאלי עבורו c k n kואם לא קיים כזה ,החזר. n : סיבוכיות. O n lo g n : 31 ©ענת עציון אלגוריתמים – )443432( 1אביב תש"ע תרגילים לדוגמא: א .אלגוריתם: .1נמיין את nהאינטרוולים ,פעם לפי נקודת התחלה ופעם לפי נקודת הסיום שלהם. .4נאתחל S( S , x 0יכיל את האינטרוולים בכיסוי). .4מצא מבין כל האינטרוולים שמתחילים לפני או ב x0את זה שמסתיים הכי רחוק ,נסמנו. I i - , S S { I i } .3ונזרוק את כל האינטרוולים שעברנו עליהם והם לא . I i ( .3נקודת הסיום של . x ) I i .3חוזרים לשלב 1ומפסיקים כאשר , x 1כלומר ,כאשר האינטרוול שלקחנו לכיסוי מכסה את הנקודה האחרונה בקטע. סיבוכיות: מיון מערך האינטרוולים פעמיים . O n lo g n -עוברים על מערך האינטרוולים פעם אחת וכל איבר שעברנו זורקים ולכן המעבר ב O n -כי בכל איבר שאנחנו עוברים ,מבצעים מספר קבוע של פעולות. נכונות: יהי I jהאינטרוול עם נקודת הסיום הכי גדולה מבין אלה שמכילים את .0כל כיסוי חוקי חייב להכיל את הנקודה .0נראה כי קיים כיסוי מינימאלי שמכיל את . I i נניח בשלילה כי הכיסוי האופטימאלי מכיל אינטרוול אחר , I jאזי גם } S { I j } { I iהוא כיסוי חוקי כי I iמכסה יותר נקודות מ I j -והוא כיסוי באותו גודל .מצאנו לכן כיסוי מינימאלי שמכיל את . I iכמו- כן ,בהינתן ש I i -שייך לכיסוי המינימאלי צריך לכסות את שאר הקטע גם ע"י כיסוי מינימאלי לכן באותה השיטה נעבור על שאר הקטעים ונמצא כיסוי אופטימאלי המכיל את כולם .ולכן האלגוריתן מחזיר כיסוי אופטימאלי. 32 ©ענת עציון אלגוריתמים – )443432( 1אביב תש"ע שאלות על אינטרוולים: סעיף ראשון נפתר ע"י אלגוריתם חמדן ,מוכיחים ע"י השוואה ליפתרון אופטימאלי והחלפת האיברים בו. סעיף שני עם משקלים ע"י תכנון דינאמי -מוכיחים באינדוקציה או ע"י גרף מסלולים קצרים. שאלות שיש להתאים זוגות -ע"י שידוך. א. ( 6נק') נתון גרף מכוון ופשוט G V , E ושני צמתים sו . t -ברצוננו לחשב את המספר המקסימאלי של מסלולים מכוונים זרים בקשתות בין sל . t -נגדיר את רשת הזרימה הבאה: N G , s , t , c כך ש . e E , c e 1 -הוכיחו כי ערך זרימת המקסימום ב Nשווה למספר המקסימאלי של מסלולים מכוונים זרים בקשתות בין sל. t - נסמן ב M-את המספר המקסימאלי של מסלולים מכוונים זרים בקשתות בין sל. t - .a בהינתן זרימה מקסימלית עבור כל קשת בה עוברת זרימה נוסיפה למסלולים המכוונים .כלומר ,אם בין uו v-יש זרימה ,אזי נאחד את uו v-להיות באותו מסלול ,.ואת הקשת שלהן נאחד למסלול כמו כן .לא יתכן כי תשתתף קשת אחת בשני מסלולים ,כי קיבולת הקשתות היוצאת מ u-היא , 1כלומר סה"כ הזרימה העוברת דרכו לא יכולה להיות יתר מכמות הקשתות הנכנסות .לכן קיבלנו מסלולים זרים בקשתות ,ומן הסתם זה קטן מהמספר המקסימלי האפשרי של מסלולים מכוונים זרים בקשתות בין sל. t - .b עבור כל 2קשתות באותו מסלול ובעלות צומת משותף ,כלומר v-u-w :נעביר זרימה בגודל 1מהצומת vל u-ומהצומת uל .w-קיבלנו זרימה חוקית ,כי קיבולת הקשתות היוצאת מ u-היא , 1כלומר סה"כ הזרימה העוברת דרכו לא יכולה להיות יתר מכמות הקשתות הנכנסות אחרת היתה קשת המשתתפת בשני מסלולים .ולכן הזרימה החוקית לבטח קטנה מהזרימה המקסימלית האפשרית. 33 ©ענת עציון
© Copyright 2024