Algorithms Algoproblems

160
ןןןןן ןןןןןן ןןןןןןןןןן1 הההה: ןןן ןןןןןןןן ןןןןןן ןן ןן ןןןןן ןןןןG=(V, E) ןןןן ןןןןן, ןןןןO(m + n) . ההההה: רררר ררררררררר: ןןןן ןן ןןןן ןן ןןןןןןןןBFS * ןןןןןן ןןןן:BFS * (G, s) 1. for each vertex u V 2. color[u] WHITE 3. d[u] 4. [u] NIL 5. color[s] GRAY 6. d[s] 0 7. Q {s} 8. while ( Q ) 9. u head[Q] 10. for each v Adj[u] 11. if ( color[v] = WHITE ) 12. color[v] GRAY 13. d[v] d[u] + 1 14. [v] u 15. Enqueue(Q, v) 16. if ( color[v] BLACK ) 17. PrintEdge (u, v) 18. Dequeue(Q) 19. color[u] BLACK ןןןן: ןןןן ןןBFS * ןן ןן ןןןןןן ןןןןןןן. רררררררר: ןןןן ןןןןןןןןןן ןןן ןןן ןןBFS "ןןןןן":O(m + n) . רררררר: ןןןןןBFS ןןןןןן ןן ןן ןןןןןן ןןןןןןן, ןןןןן ןןן ןןןןןן ןןןן. ןןןןןן"ןןןןן" ןןןןןןן- ן ןןןןן ןןןן ןן ןן ןןןןןן ןןן. ןןן ןןןןן ןןןן ןןןןןן ןןן ןןן, ןןןן ןןןןןן ןןןן ןןןןןן ןן ןן ןןןןןן ןןןןןןן ןןןן. ןןן, ןן ןןןן ןןןןןן ןן ןןןן ןןןן ןןןןןןןןןן) " "ןןןן ןןןן ןןןן ןןןןןן17- 16 , ןןן( ןןןן ןןןןןן ןן ןן ןןןןן ןןןן.

Transcript of Algorithms Algoproblems

Page 1: Algorithms Algoproblems

1 אלגוריתמים וניתוח תכנון

שאלה:.O(m + n) כלשהו, בזמן בסדרG=(V, E) הגרף צלעות כל את המדפיס אלגוריתם הצע

פתרון:

האלגוריתם: תאורלהלן: המתואר*BFS אלגוריתם את הגרף על נריץ

BFS * (G, s) 1. for each vertex u V2. color[u] WHITE3. d[u] 4. [u] NIL5. color[s] GRAY6. d[s] 07. Q {s}8. while ( Q )9. u head[Q]10. for each v Adj[u]11. if ( color[v] = WHITE )12. color[v] GRAY13. d[v] d[u] + 114. [v] u15. Enqueue(Q, v)16. if ( color[v] BLACK )17. PrintEdge (u, v)18. Dequeue(Q)19. color[u] BLACK

הערה:הקשירות. מרכיבי כל על*BFS את נריץ

סיבוכיות:.O(m + n) "הרגיל":BFS של לזו זהה שהסיבוכיות ברור

נכונות: מסוים ב-"טיפול" בקודקוד הגרף. הכוונה קדקודי בכל הקשירות, מטפלת מרכיבי כל על שעוברתBFS סריקת

שלו. השכנים כל על מעבר –בגרף. שקיימים הצלעות כל על עוברים כולה בסריקה צלע, ולכן דרך מתבצעת לשכן ההגעה אבל

שנדפיס ברור ( , אזי17-16 בשורות קורה שאכן "דרכה" )כפי שעוברים ברגע הצלע את להדפיס נדאג לכן, אםהגרף. צלעות כל את

Page 2: Algorithms Algoproblems

2 אלגוריתמים וניתוח תכנון

: שאלה.O(m + n) קשיר, בזמן הואG=(V, E) גרף האם הבודק אלגוריתם הצע

פתרון:

האלגוריתם: תאוראקראי. מקודקודBFS הגרף על נריץ.1הקדקודים: קבוצת את נבדוק.2

קשיר. אינו הגרף אזי – לבנים קדקודים , קיימיםBFS ריצת אם, לאחרקשיר. הגרף – אחרת

סיבוכיות:1.BFS:O(m + n)..O(n)הקדקודים: קבוצת בדיקת.2

.O(m + n)סה"כ:

נכונות:.BFS מנכונות ישירות נובעת הנכונות

Page 3: Algorithms Algoproblems

3 אלגוריתמים וניתוח תכנון

: שאלה.O(n) מעגלים, בזמן - חסר יער, כלומר הואG=(V, E) מכוון לא גרף האם הבודק אלגוריתם הצע

פתרון:

האלגוריתם: תאורלהלן: , המתואר*BFS את נריץ.1

BFS * (G, s) 1. for each vertex u V2. color[u] WHITE3. d[u] 4. [u] NIL5. color[s] GRAY6. d[s] 07. Q {s}8. while ( Q )9. u head[Q]10. for each v Adj[u]11. if ( color[v] = WHITE )12. color[v] GRAY13. d[v] d[u] + 114. [v] u15. Enqueue(Q, v)16. if ( color[v] = GRAY )17. return FALSE18. Dequeue(Q)19. color[u] BLACK20. return TRUE

קיימים. האחרים, אם הקשירות מרכיבי כל , על1 לסעיף נחזור שלילית, אזי תשובה קיבלנו לא אם.2

סיבוכיות:יער: שאינו לא גרף עבור ננתחא.

האלגוריתם. את נעצור – מעגל מצאנו מעגל. אם בו קיים יער, אזי אינו הגרף אם.O(n) היא הסיבוכיות |E| |V| אחת. מפעם יותר מקדקודיו אחד על שחוזר מסלול הוא מעגל

יער: שהוא גרף עבור ננתחב..O(n) היא הסיבוכיותE| = |V| - 1. |מתקיים: שבעץ עצים. ידוע של קבוצה הוא יער

.O(n)סה"כ:

נכונות:יער. אינו שהגרף ברור מעגל, ולכן של סגירתו על מעיד אפור קודקוד של שגילויו ברור

– מעגל. כלומר מצא הקשירות, ולא מרכיבי כל על שעבר שלילית, הרי תשובה ללא סיים האלגוריתם אםיער. בדיוק זהו מעגל. אבל נמצא הקשתות, לא כל הקדקודים, דרך כל של בסריקה

Page 4: Algorithms Algoproblems

4 אלגוריתמים וניתוח תכנון

: שאלה.O(n) מעגלים, בזמן וחסר קשיר – עץ, כלומר הואG=(V, E) מכוון לא גרף האם הבודק אלגוריתם הצע

פתרון:

האלגוריתם: תאורלהלן: , המתואר*BFS את נריץ.1

BFS * (G, s) 1. for each vertex u V2. color[u] WHITE3. d[u] 4. [u] NIL5. color[s] GRAY6. d[s] 07. Q {s}8. while ( Q )9. u head[Q]10. for each v Adj[u]11. if ( color[v] = WHITE )12. color[v] GRAY13. d[v] d[u] + 114. [v] u15. Enqueue(Q, v)16. if ( color[v] = GRAY )17. return FALSE18. Dequeue(Q)19. color[u] BLACK20. return TRUE

עץ, וסיימנו. אינו הגרף – שלילית תשובה קיבלנו אם.2הקדקודים: קבוצת על נעבור – אחרת

עץ. אינו הגרף אזי – לבנים קדקודים קיימים אםעץ. הוא הגרף – אחרת

סיבוכיות:עץ: שאינו לא גרף עבור ננתחא.

האלגוריתם. את נעצור – מעגל מצאנו מעגל. אם בו קיים עץ, אזי אינו הגרף אם.O(n) היא הסיבוכיות |E| |V| אחת. מפעם יותר מקדקודיו אחד על שחוזר מסלול הוא מעגל

עץ: שהוא גרף עבור ננתחב..O(n) היא הסיבוכיותE| = |V| - 1. |מתקיים: שבעץ ידוע

.O(n)סה"כ:

נכונות:מעגלים: וחסר קשיר הוא הגרף אם"ם חיובית תשובה מחזיר שהאלגוריתם נוכיח

קשיר:טענה:

לבנים. קדקודים יהיו יחידהBFS סריקת בסיום אזי – קשיר אינו הגרף אםהוכחה:.BFS מנכונות ישירות נובעת

מעגלים: חסרטענה:

מעגל. אותו( סוגר שגילתה הקשת )עם זה קודקוד אזי – אפור קודקוד מגליםBFS סריקת במהלך אםהוכחה:.BFS מנכונות ישירות נובעת

עץ. שהוא ברור אזי – וכקשיר מעגלים כחסר התגלה הנסרק , והגרףBFS סריקת בוצעה אם – לכן(.BFS ב-17-16 )שורות שלילית תשובה מחזיר האלגוריתם אזי – מעגלים בעל הגרף אםהאלגוריתם(. של2 )סעיף שלילית תשובה מחזיר האלגוריתם אזי – קשיר אינו הגרף אם

Page 5: Algorithms Algoproblems

5 אלגוריתמים וניתוח תכנון

Page 6: Algorithms Algoproblems

6 אלגוריתמים וניתוח תכנון

שאלה:שורש. עם מכוון עץ הוא הגרף האם הקובע אלגוריתם מכוון. הצעG=(V, E) גרף נתון

פתרון:

האלגוריתם: תאור:0ל- ( השווהdin) כניסה דרגת בעלי קדקודים הקדקודים, למציאת קבוצת את נבדוק.1

כנדרש, ונסיים. עץ אינו שהגרף נודיע – כזה קודקוד קיים לא אםכנדרש, ונסיים. עץ אינו שהגרף נודיע – אחד מקודקוד יותר קיימים אם.v נסמנו – כזה יחיד קודקוד קיים אם

להלן: , המתואר*BFS אלגוריתם , אתv מקודקוד , החלG על נריץ.2BFS * (G, s)

1. for each vertex uV2. color[u] WHITE3. d[u] 4. [u] NIL5. color[s] GRAY6. d[s] 07. Q {s}8. while ( Q )9. u head[Q]10. for each vAdj[u]11. if ( color[v] = WHITE )12. color[v] GRAY13. d[v] d[u] + 114. [v] u15. Enqueue(Q, v)16. else17. return FALSE18. Dequeue(Q)19. color[u] BLACK20. return TRUE

כנדרש, ונסיים. עץ אינו שהגרף נודיע – שלילית תשובה נקבל אםלבנים. קדקודים הקדקודים, ונחפש קבוצת על נרוץ.3

כנדרש. עץ אינו הגרף – לבנים קדקודים נמצא אם.v שרש עם מכוון עץ הוא הגרף – אחרת

סיבוכיות:.O(m + n)הקדקודים: ( שלdin) הכניסה דרגות בדיקת.12.BFS*:O(m + n)..O(n)הקדקודים: רשימת על מעבר.3

.O(m + n)סה"כ:

נכונות:טענה:

.din=0אפס, כלומר: שווה שלו הכניסה שדרגת בעץ יחיד קודקוד יש שרש, אזי עם מכוון עץ הוא הגרף אםהוכחה:

.din=0 מתקיים השרש שעבור ברוראחרu קודקוד לכל , ולפיכך, לכלu לקודקוד הנכנסת קשת קיימת אליו, ולכן מהשורש מסלול קיים בעץ

.din>0 אחר, u קודקודטענה:

שבו: מכוון גרף,din=0 עם יחיד קודקוד קייםא.מעגלים, איןב.היותר, לכל אחד מסלול קיים קדקודים שני ביןג.הקדקודים לשארvמ- להגיע ניתןד.

.v שרש עם מכוון עץ הואהוכחה:

Page 7: Algorithms Algoproblems

7 אלגוריתמים וניתוח תכנון

שורש. עם מכוון עץ של מהגדרה ישירות

שאלה: ליצור , מבליG קשתות את , המכווןO(m) בסיבוכיות אלגוריתם , הצעG=(V, E) מכוון ולא סופי גרף בהינתן

מכוונים. מעגלים

פתרון:

האלגוריתם: תאורההסתכלות. לכיוון בהפוך אחוריות קשתות שנכוון בכך הרגילDFSמ- הגרף, השונה על*DFS נריץ

סיבוכיות:.O(m + n) ה"רגיל":DFS לסיבוכיות זהה*DFS האלגוריתם שסיבוכיות ברור

נכונות:מעגלים(. חסר – עץ, ולפיכך )זהו מעגלים מכילות אינן העץ שקשתות - ברור ראשית

מהקודקוד ומכוונת מצאצאיו אחד עם קודקוד מקשרת כזו קשת ההפוכות: כל אחוריות בקשתות נתבונן כעת שמסלול לקשת, וברור עץ(, המקביל או קדימה הן )שקשתותיו מכוון מסלול בעץ קיים כזו קשת לצאצא. לכל

מכוון. מעגל סוגר אינו זהמכוון. מעגל סוגרת לא הקשת גם – מכאן

Page 8: Algorithms Algoproblems

8 אלגוריתמים וניתוח תכנון

לה: שא הגרף את לכוון ניתן לא לינארי. אם בזמן היטב קשיר שיהיה כך מכוון ולא קשיר גרף המכוון אלגוריתם הצע

כך. כל הודע – כזה באופן

פתרון:

האלגוריתם: תאור מכוון.'G גרף שרירותי(, ונקבל )מקודקודG גרף עלDFS אלגוריתם את על נריץ.1.SCC אלגוריתם את'G על נריץ.2הנדרש. באופן הגרף את לכוון ניתן לא – אחד היטב קשיר מרכיב יותר קיימים אם.3

הנדרש. הקשתות כיוון את מהווה'G- אחרת

סיבוכיות:1.DFS:O(m + n).2.SCC:O(m + n)..O(1)בדיקה:.3

.O(m) קשיר: Gש- , ומכיווןO(m + n)סה"כ:

נכונות: פשוט!!!( אחד בהכרח )לא מעגל על נמצאים שלו קדקודים שני כל אם"ם קשיר הוא מכוון לא שגרף ברור

לפחות. )לא מעגל על נמצאים קודקודים שני כל אם"ם היטב קשיר שיהיה כך מכוון לא גרף לכוון שניתן ברור ולפיכךלפחות. פשוט!!!( אחד בהכרח

.G בגרף כלשהו מעגלC מכוון, ויהי לא גרףG יהיטענה:

.'C מכוון מעגל מכוון, ובו'G גרף נקבל– DFS של הסריקה בכיווןG קשתות את נכוון אםהוכחה:

מכוון. לא בגרף מעגל הואCש- נניחמעגלים. ללא גרף יצרDFSה- הרצת על-ידי הקשתות שכיוון בשלילה נניחקשתות2 לפחות , קיימותCל- השייכות והקדקודים הקשתות , באותן'Gב- אזי כלשהוv לקודקוד הנכנסות

מעגל(. היה )אחרת קדימה. קשת או חוצה קשת היא עץ. כלומר קשת אינה האלו מהקשתות אחת

קשתות או חוצות קשתות אחוריות, ולא קשתות או עץ קשתות רק מניבה מכוון לא גרף עלDFS הרצת אבלקדימה.

.סתירה ריצת על-ידי שכוון בגרף מעגל יישאר מכוון הלא בגרף קיים שהיה מעגל DFS.

.'G בגרף מעגל על נמצאים קדקודים שני כל היטב, אזי קשיר שיהיה כךG את לכוון ניתן שאם קיבלנו שיתן הכיוון הואDFS הרצת על-ידי שמתבצע הקשתות כיוון היטב, אז קשיר שיהיה כךG את לכוון ניתן ולכן, אם

הנדרשים. הקשתות כיווני את

Page 9: Algorithms Algoproblems

9 אלגוריתמים וניתוח תכנון

שאלה:.O(m + n) בזמן ביותר הארוכה המסילה את מעגלים. מצא חסר מכווןG=(V, E) גרף נתון

פתרון:

האלגוריתם: תאור.'G הממוין הגרף את . נסמןG עלTopSort נריץ.1להלן: , כמתוארSetLongestDistance השגרה את'G על נריץ.2

SetLongestDistance(G ' ) 1. for i 1 to n2. [vi] 03. for i 1 to n4. for each vertex uAdj[vi]5. if ( [u] < [vi] + 1 )6. [u] [vi] + 17. [u] vi

ביותר. הגדולה- עם הקדקוד את הקדקודים, ונמצא קבוצת על נרוץ.3.ה- – האב שדה על מעבר על-ידי נשחזר עצמו המסלול המקסימלי, ואת האורך הוא שנמצאה-

סיבוכיות:1.TopSort:O(m + n).2.SetLongestDistance:O(m + n)..O(n) המקסמלי:ה- מציאת.3

.:O(m)ה- – האב שדה על-ידי המסלול מציאת.O(m + n)סה"כ:

נכונות:)נתון(. מעגלים חסר שהגרף , משוםTopSort להפעיל ניתן

בלבד. אחד לכיוון המכוונות קשתות יהיו – הטופולוגי המיון לאחריותר. אליו נשוב מסוים, לא בקודקוד לטפל שנסיים לאחר – לכן המסילה(, ושדה אורך את )שמצייןה- שדה עדכון . אופןSetLongestDistance השגרה בנויה זו עובדה בסיס עלנכונותו. ישירות נובעת גם לחלוטין, ומכאן האב( ברור את )שמצייןה-

Page 10: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

10

: שאלה פשוט, העובר דווקא מעגלי, לאו מסלול – )כלומר אויילר מסלול , המדפיסO(m) בזמן הפועל אלגוריתם תארכך. על מודיע – כזה מסלול קיים לא . אםG מכוון לא גרף בדיוק( של אחת פעם קשת בכל

פתרון:

האלגוריתם: תאורהקשת. דרך עברנו האם – , שמשמעותוbeen_here בשם בוליאני שדהeE קשת כל עבור נתחזק

: FindOyler(G, s) אלגוריתם את נריץFindOyler(G, s)

1. for each edge eE2. been_here[e] FALSE3. L 4. FindCircle(L, s)

FindCircle(L, s)1. InsertTail (L, s) // inserts s to the end of the list L 2. for each vertex vAdj[s]3. e (s, v)4. if ( been_here[e] = FALSE)5. been_here[e] TRUE6. FindCircle(L, v)7. break for loop8. h Head(L) // Head(L) returns the first vertex on the list L9. if ( s h )10. return FALSE11. if ( s = h )12. go back recursively on list L, and find such vertex u that there is vertex wAdj[u],

that for the edge e=(u, w), been_here[e] = FALSE.if such vertex u does not exist in L, then

return TRUE13. L' 14. FindCircle(L', u)15. chain list L' in list L, instead of the vertex u.

הנדרש. המסלול אתLסיומו, ב- יחזיק, עםFindOyler(G, s) האלגוריתם

סיבוכיות:.next ו-prev שדות , עםL כיוונית דו רשימה נתחזק קשת, נעדכן עדכון על זה, כשנדבר . באופן(v, u)- שלה למקבילה(u, v) קשת ביןtwin מצביע נתחזק בנוסף קשתות.2 בעצם

FindOyler(G, s)O(m)הקשתות: על מעבר.2-1

O(1)פשוטה: הצבה.3

FindCircle(L, s).O(1)כיוונית: דו רשימה נתחזק באם.1

.O(m)הקשתות: על מעבר.7-311-8.O(1).

15-12.O(m).

.O(m) סה"כ:

Page 11: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

11

נכונות: אוילר: מעגלG בגרף קיים אם"ם אוילר מעגל מוצאFindOyler(G, s) אלגוריתם כי נוכיח אוילר, משום מעגלGב- שקיים ברור אוילר, אזי מעגל מוצאFindOyler(G, s) אלגוריתם שאם ברור כיוון

מחזיר האלגוריתם בלבד, וכן אחת פעם הקשתות כל דרך עוברLב- שנבנה הבניה, המסלול שעל-פיTRUEהרשימה בתחילת אם Lמעגל. נסגר אם כלומר – הקודקוד אותו נמצא ובסיומה

אותו. מוצאFindOyler(G, s) האלגוריתם אוילר, אזי מעגלGב- קיים שאם נוכיח כיוון.FALSE מחזירFindOyler(G, s) שאלגוריתם בשלילה אוילר, ונניח מעגלGב- שקיים נניחנתקענו" בקודקוד" t sהתחלנו(. אתו מהקודקוד השונה בקודקוד נתקענו – )כלומר

שנכנסנו הפעמים למספר שווהt מקודקוד שיצאנו הפעמים זה, מספר לרגע האלגוריתם, עד פי עלזוגית. הייתהt קודקוד של זה, דרגתו לרגע עד – אליו. ולכן

קודקוד של כעת, דרגתו tתישאר. גם אי-זוגית, וכך היא כל אם"ם אוילר מעגל קיים מכוון ולא סופי, קשיר בגרף – דיסקרטית ממתמטיקה משפט על-פי

זוגיות. בו הדרגותלהנחה. אוילר, בסתירה מעגלGב- אין זה משפט ולכן, על-פי

Page 12: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

12

: שאלה צומת שבכל כך הקשתות כל את לכוון שניתן זוגית. הוכח היא בו צומת כל שדרגת וסופי מכוון בלתי גרף נתון

זו. משימה לביצוע שתוכל ככל יעיל אלגוריתם בקצרה היציאה. תאר לדרגת שווה הכניסה דרגת

פתרון:

האלגוריתם: תאורהיטב. קשירים רכיבים למציאתSCC אלגוריתם נריץ.1מכוון( לא גרף ניצור – )כלומרSCC על-ידי שנוצר הקשתות כיוון את נבטל.2 שכל עליהן, עד בעבר הקשתות כיוון כדי אוילר, תוך מסלולי המוצא אלגוריתם נריץ קשירות רכיב לכל.3

כוונו. בגרף הקשתות

סיבוכיות:.SCC:O(m + n) סיבוכיות.1.O(m)מכוון: לא גרף יצירת.2.O(m)הגרף: קשתות כל על מעבר – למעשה.3

.O(m + n): סה"כ

נכונות: מעגלי. אוילר הוא בו קשירות רכיב קשיר. אולם, כל בהכרח אינו שהוא מעגלי, משום אוילר בהכרח אינו הגרף לדרגת שווה הכניסה שדרגת המסלול, ונקבל לאורך הקשתות את אוילר, נכוון מעגל קשירות רכיב בכל נמצא

היציאה.

Page 13: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

13

: שאלהדו-צדדי. גרף הואG האם הבודק יעיל אלגוריתם וקשיר. הצע , סופיG=(V, E) מכוון לא גרף נתון

הקבוצה( באותה קדקודים זוג המחברת קשת שאין כךV2 ו-V1 קבוצות2 ל-V את )לחלקהצבע( באותו קדקודים2 המחברת קשת שאין שונים, כך צבעים2ב- הגרף קדקודי את )לצבוע

פתרון:

האלגוריתם: תאורלהלן: המתוארBi-Sided(G, s) אלגוריתם את נריץ

Bi-Sided(G, s)1. for each vV2. color(u) WHITE3. color[s] BLUE4. Q {s}5. while ( Q )6. u head[Q]7. for each vAdj[u]8. if ( color[v] = color[u] )9. return FALSE10. if ( color[v] = WHITE )11. [v] [u]12. if ( color[u] = BLUE )13. color[v] RED14. else15. color[v] BLUE16. Enqueue(Q, v)17. Dequeue(Q)18. return TRUE

סיבוכיות:2-1 O(n).4-3 O(1).

17-5 O(m).18 O(1).

.O(m + n)סה"כ:

נכונות:טענה:

קודקוד כל של צבעו ואדום, כאשר כחול בצבעים הגרף קדקודי כל את לסמן ניתן אם"ם דו-צדדי הוא גרףשכניו. משל שונה

הוכחה:הצבע. משלימות, על-פי קבוצות2ל- הגרף קדקודי את נחלק : כיוון

תעבור קשת שכל הרי – שונה ההנחה, צבעם קדקודים, ועל-פי2 בין מחברת בגרף קשת שכל כיווןהקדקודים. קבוצות2 בין

דו-צדדי. גרף וזהוזהה. , וצבעםv מקודקודu לקודקוד שהגענו נניח : כיוון

בגרף. אי-זוגי באורך מעגל קייםv. קודקוד של צאצא הואu שקודקוד ברורו-u בין המסלול על הקדקודים צבעי vיהיו , ששיךv לקודקוד שנגיע כחול-אדום, לסירוגין, עד

הכחולה. לקבוצההכחולה. לקבוצה הוא גם שייךu קודקוד . אבלu לקודקוד קשת קיימתv מקודקוד

דו-צדדי. הוא שהגרף ייתכן לא לכן

Page 14: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

14

: שאלה.O(m·n) בזמן וקשיר מכוון גרף של טרנזיטיבי סגור המחשב אלגוריתם הצע

פתרון:

האלגוריתם: תאור.vV קודקוד כל עבורDFS-VISIT נריץ.1.*G הטרנזיטיבי הסגור של לגרף(v, u) קשת נוסיףv ששורשוDFSה- בעץu קודקוד לכל.2

סיבוכיות:1.DFS-VISITקודקוד: לכלO(n · (n + m) )..G*:O(n)ל- הקשתות הוספת.2

.O(n·m)קשיר: שהגרף , ומכיווןO(n² + n·m)סה"כ:

נכונות:הטרנזיטיבי. הסגורG*=(V, E*) יהי

טענה:(u, v ) E* uה- לעץ שייךDFSששורשו vברף G.

הוכחה:.* E( u, v) באלגוריתם2 סעיף על-פי , אזיG ב-v ששורשוDFS לעץ שייךu אם : כיוון DFSה- לעץ שייךu . לכןvמ- להגעה ניתןu הטרנזיטיבי הסגור הגדרת על-פי , אזי* E( u, v) אם : כיוון

.v ששורשו

Page 15: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

15

: שאלה מעגל שכלO(m) הזמן הבודק אלגוריתם . הצעUV צמתים של קבוצה , ותתG=(V, E) קשיר, מכוון גרף נתון

.Uמ- אחד קודקוד לפחות דרך עוברGב-

פתרון:

האלגוריתם: תאור.G עלDFS נריץ.1

הקבוצה תת קדקודי דרך העוברים כאלה כלל, לרבות מעגליםGב- אין אזי – אחורית קשת נמצא לא אםUבגרף", ונסיים. מעגלים כלל קיימים "לא תשובה נחזיר . לכן

, כאשר:G'=(V', E') גרף נבנה.2V' = V \ UE' = { (u, v) | (u, v) E u, v V' }

", ונסיים.Uמ- אחד קודקוד לפחות דרך עוברGב- מעגל תשובה: "כל נחזיר – ריק גרף הוא'G אם.'G עלDFS נריץ.3

.U הקבוצה תת קדקודי דרך עובר שלא מעגלGב- יש אחורה, אזי קשת נמצא אם.U הקבוצה מתת אחד קודקוד לפחות דרך בכלל(, עוברים )אםGב- הקיימים המעגלים - כל אחרת

סיבוכיות:1.DFS:O(m + n)..G':O(m + n) הגרף בניית.23.DFS:O(m + n).

.O(m)קשיר: שהגרף , ומשוםO(m + n)סה"כ:

נכונות: - ברור.1 סעיף נכונות:2 סעיף נכונות

ב- מעגל שכל התשובה , ולכןUמ- אחד קודקוד לפחות דרך דובר שלא מעגל קיים לא ריק, אזי החדש הגרף אםGמ- אחד קודקוד לפחות דרך עוברU.

:3 סעיף נכונותG' Gהקבוצה לתת השייך קודקוד אף מכיל אינו בנייה, והוא , על-פי U.

בגרף אם G'הקבוצה תת מקדקודי אף-אחד דרך עובר שלא מעגל זהו מעגל, הרי קיים Uנמצא זה , ומעגל .G בגרף גם

אחורה. קשת מוצאתDFS הרצת מעגל קייםG משפט, בגרף על-פי מעגל.'Gב- אוG בגרף קיים ( אם3 ו-1 )בסעיפים מזהים אנו זה משפט על-פי

Page 16: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

16

שאלה:נגדיר:

גם . )יתכן6 ל-0 בין שלם מספר מופיע ריבוע ריבועים, ובכל2ל- מחולק , אשר12x מלבני קלף- דומינו אבןהריבועים. בשני המספר אותו

,x, y {0, 1, 2, ... , 6} [x, y]נסמן: מתקיים:i=2, 3, ... , k לכל , כאשר[x1, y1[ ]x2, y2[ ... ]xk, yk]דומינו: אבני של שרשרת- דומינו שרשרת

xi = yi-1..[y, x] ל-[x, y] בין הבדל אין – דומינו. כלומר אבני להפוך הערה: מותר

הבודקO(N) בסיבוכיות אלגוריתם חזרות(, תן גם )יתכנו דומינו אבניN של אוסף בהינתן ליצור ניתן האם הדומינו. אבניN כל את תכיל הנתונים. כלומר, שהשרשרת הדומינו מאבני אחת דומינו שרשרת

פתרון:

האלגוריתם: תאור, כאשר:G=(V, E) מכוון לא גרף ניצור.1

V = {0, 1, 2, 3, 4, 5, 6} E = {(u, v) | u, v V}

דומינו. אבן מייצגת קשת כל.(x, y) הקשת על-ידי תיוצג[x, y] הדומינו אבן – כלומר

קשירים. רכיבים , למציאתG גרף עלSCC אלגוריתם את נריץ.2דומינו. שרשרת ליצור ניתן לא – אחד קשירות מרכיב יותר קיימים אם

אתG על נריץ.3 מסלול קיים – אויילר למסלול התנאי בגרף. על-פי אויילר מסלול למציאת האלגוריתם קדקודים.2ל- זוגיות, מלבד, אולי קדקודיו דרגות קשיר, וכל הגרף אםG בגרף אויילר

הדומינו, אבניnמ- דומינו שרשרת ליצור שניתן - הרי אויילר מסלול נמצא אם.4דומינו. שרשרת ליצור ניתן לא – אחרת

סיבוכיות:הדומינו: אבני מספר לפי תהא הגרף בניית סיבוכיות קבועה, ולכן הקדקודים קבוצת – הגרף יצירת.1

O(N).קבועה: הקדקודים שקבוצת , ומכיווןSCC אלגוריתם הרצת.2

O(N).דרגתם: הגרף, ובדיקת קדקודי כל על מעבר למעשה – אויילר מסלול בגרף קיים האם מציאת.3

O(1)..O(1)בדיקה:.4

.O(N)סה"כ:

נכונות:טענה: זוגיות, קדקודיו דרגות קשיר, וכל הגרף אם – )כלומרG בגרף אויילר מסלול קיים אם"ם דומינו שרשרת קיימת

קדקודים(. לשני מלבד, אוליהוכחה:

שרשרת. להרכיב אויילר, ניתן מסלול קיים אם כיוון.x, y – מספרים שני במסלול, שלה הראשונה בקשתx מקודקוד נתחילהלוח. על ונשים בהתאם[x, y] דומינו אבן ניקח

.[y, z] הדומינו לאבן , שתתאים(y, z) קשת תהא , ולכןy מקודקוד תצא הבאה הקשתהקשתות. כל עבור באינדוקציה נמשיך כך

אבן בכל נשתמש אויילר במסלול – בלבד. לכן אחת קשת קיימת דומינו אבן לכל – הגרף בניית על-פישרשרת. אחת, ונקבל פעם בדיוק דומינו

בדיוק דומינו אבן בכל משתמשים שבשרשרת זהה, ומכיוון שרשרת על-פי אויילר מסלול של הבנייה כיווןאחת. פעם בדיוק קשת כל על אחת, נעבור פעם

מאותו תצא הקשת זהים, וכן מספרים מצמידים הגדרה, אנו בשרשרת, על-פי כי אויילר מסלול נקבלאליו. נכנסה הקודמת שהקשת הקודקוד

Page 17: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

17

: שאלה הקודקוד את לינארי בזמן המוצא אלגוריתם הקדקודים. מצא על חיוביים מכוון, ומשקלותG=(V, E) גרף נתוןפשוט(. בהכרח )לאv ל-u בין במסלול המקסימלי המשקל בעל

פתרון:

האלגוריתם: תאורהיטב. קשירים רכיבים למציאתSCC אלגוריתם את נריץ.1הבא: באופן'G גרף נבנה.2

יהיהGב- היטב קשיר רכיב כלהקדקודים: קבוצת המשקל יהיה זה קודקוד . משקל'Gב- קודקוד .Gב- קשיר רכיב באותו הקדקודים משקלי של המקסימלי

'G ב-'u קודקוד נסמן , אזיc[ cv[u] ] קשירות ברכיב מקסימליw(u)ש: נניח – כלומר(.G ב-u קודקוד את )המכיל הזה הקשירות לרכיב המקביל כקודקוד

שונים. קשירות רכיבי בין , המחברותGב- הקשתות כל יהיו 'Gב- הקשתותהקשתות: קבוצת.''Gכ- הנוצר הגרף את , ונסמן'G עלTopSort אלגוריתם את נריץ.3, כאשר:''G לגרףGT=(V, ET) מכוון גרף ניצור.4

ET = { (u, v) | (v, u) E[G''] }:v מקודקוד , החלGT גרף להלן( על )המתוארFindMaxVertex אלגוריתם את נריץ.5

FindMaxVertex(G T , s) 1. for i s downto 1 // i is the index of the vertex array.2. if ( indegree(vi) = 0 ) // when there are no incoming edges to vi

3. [vi] w(vi)4. [vi] vi

5. else // there are edges incoming to vi.6. for each vertex vj Adj[vi]7. if ( w(vi) < [vj] )8. [vi] [vj]9. [vi] [vj]10. else11. [vi] w(vi)12. [vi] vi

.[u]ב- יהיה המקסימלי המשקל.6.[u]- שווה שלוה- ששדה לקודקוד שנגיע , עדה- שדה לפי עצמו, נרוץ הקודקוד את למצוא בכדי

סיבוכיות:1.SCC:O(m + n)..G':O(m + n) בניית.2.O(m + n)טופולוגי: מיון.3.GT:O(m + n) בניית.45.FindMaxVertex:O(n).

.O(m + n)סה"כ:

נכונות: רכיב בכל המקסימלי המשקל הוא מקדקודיו אחד של המקסימלי המשקל – חזק קשירות רכיב כל שעבור ברור

הקשירות.הטופולוגי: המיון תכונות על ישירות מסתמך הנכונות הוכחת המשךיהיהGT – לו ההופכי הגרף שגם ברור יחיד. לכן בכיוון מכוון טופולוגית , הממוין''G הגרף אחד, בכיוון מכוון

.''G של לכיוונו בהפוךיותר. אליו נשוב מסוים, לא קודקוד שנעבור שלאחר שיטתי, מכיוון באופן הקדקודים כל על לעבור לכן, נוכל

שלמדנו. רבים לאלגוריתמים בנכונותו, בדומה לחלוטין ברורה- ושדהה- שדה של העדכון אופן נכון. האלגוריתם

Page 18: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

18

אלה: ש נגיד:vV קודקוד הקדקודים. לכל על משקלים עם מעגלים חסר מכוון גרףG=(V, E) יהי

w(u) { max = p(v)פשוט( | בהכרח )לאu ל-vמ- מסלול קיים{.G בגרףv קודקוד , לכלp(v) את לינארי בזמן המוצא אלגוריתם תאר

פתרון:

האלגוריתם: תאור, כאשר:GT = (V, ET) גרף נבנה.1

ET = { (u, v) | (v, u) E }.'G הממוין הגרף את . נסמןTopSort אלגוריתם אתGT על נריץ.2להלן: , המתואר'G עלFindMaxVertex אלגוריתם את הרץ.3

FindMaxVertex(G)1. for each vertex vV2. p[v] w[v]3. for i n downto 14. for each vertex u Adj[vi]5. p[u] max { p(vi), p(u) }

סיבוכיות:.GT:O(m + n) הגרף בניית.12.TopSort:O(m + n).3.FindMaxVertex:O(m + n).

.O(m + n)סהכ:

נכונות:טענה: vמ- היוצאים המסלולים קדקודי כל בין המקסימלי הקודקוד משקל הואp(v) , ערךG בגרףv קודקוד כל עבור

בגרף GTהערך p(v)ל- הנכנסים המסלולים קדקודי בין המקסימלי הקודקוד משקל הואv.הוכחה:

באינדוקציה: נוכיח.FindMaxVertex ( של2-1 )שורות האתחול על-פי . מתקייםv, p(v) = w(v) הראשון הקודקוד עבור נבדוק:

נכונים.iה- בשלבpה- שערכי נניח:.i+1ה- השלב עבורנוכיח:.k 0 , כאשרvi+k הקדקודים את הקשתות , ובודקים, על-פיvi בקודקוד עומדים אנוi+1ה- בשלב זהה להיות צריך להשתנות, והוא אמור לא שלהםpה- ערך – קשתות קיימים לא שאליהם הקדקודים עבור.iה- בשלב כמו

נכון. זה ערך – האינדוקציה הנחת על-פיפי: להשתנות, על אמור שלהםpה- שדה – קשתות קיימים שאליהם הקדקודים עבור

p(vi+k) = max { p(vi), p(vi+k) }האינדוקציה. הנחת על-פי נכונים אלו ערכים

Page 19: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

19

שאלה:מ- המסלול את המוצא אלגוריתם . תארs, tV קדקודים הקדקודים, ושני על משקלים , עםG=(V, E) גרף נתון

s-ל tמ- במסלולים המקסימליים הקדקודים מכל ביותר הקטן המקסימלי, יהיה הערך בעלת שהקודקוד , כךs .O(m log n) , בזמןtל-

פתרון:

האלגוריתם: תאורהקדקודים: עלDijkstra מעין נריץ

הקודקוד. לאותו עד במסלול המקסימלי הקודקוד את שיכילmax שדה נגדירנבדוק– u הוא אביו כלשהו, כאשרv לקודקוד נגיע כאשר – בלבד. כלומר אחת פעם יעודכן זה ערך האם

max[v]בין נשווה – לא עודכן. אם max[v]לבין max[u]ב- מביניהם הגדול את . נשמורmax[v] :כלומר .max[v] = max{ max[v], max[u] }ישתנה. לא , ויותר

המינימלי. המקסימלי הערך בעל הקודקוד את נבחר התקדמות בכל u של האב , אזיv מ-uל- הראשונה בפעם הגענו אם לקודקוד, כלומר שהגיע הראשון לפי יהיה האבות עדכון.v יהיה

סיבוכיות:Dijkstra:O(m log n).

נכונות:.Dijkstra של הנכונות מהוכחת ישירות נובעת הנכונות

Page 20: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

20

שאלה:,G=(V קשיר מכוון לא גרף נתון E)על שמירה בגרף, תוך הקשתות מספר את המפחית אלגוריתם . תאר

.O(m + n) בסיבוכיות קשירותו

פתרון:

האלגוריתם: תאורהבא: באופן'G גרף נבנה.1

לקבוצת נוסיף – דרכן שנעבור הצלעות את הגרף, כאשר על כלשהו מקודקודBFS אלגוריתם את נריץ.'G של'E הצלעות

.'E \ Eעל-ידי: המתקבלות הקשתות הם בקשירותו פגיעה ללאG מהגרף להוריד שניתן הקשתות.2

סיבוכיות:1.BFS:O(m + n)..O(m)הקשתות: על מעבר.2

.O(m + n)סה"כ:

נכונות:הגרף. של הקדקודים לכל הגיעBFS קשיר, אז היהG הגרף אם

עץ. למעשה הוא שנוצר'G , הגרףBFSה- ריצת על-פיקשיר...( הוא שעץ )ברור קשיר גרף , נקבל'G בגרף נמצאות שאינןG מהגרף הקשתות כל את נזרוק אם – לכן

Page 21: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

21

שאלה:(, )u, v( ,)u, w)ש: , כאלהu, v, w V קדקודים שלושה קיימים האםO(m) בזמן . מצאG מכוון לא גרף נתוןv, w ) Eשהגרף – קשיר. כלומר לא גרף תתן שהורדתם , כך G \ {u, v, w}קשיר. לא יהיה

פתרון:

האלגוריתם: תאור \ Gש: מקיימים E( u, v( ,)u, w( ,)v, w)ש: , כךu, v, w V קדקודים שלושה כל קשיר, אחרתGש- נניח

{u, v, w}קשיר. אינו

בנושא(. שאלה בגרף. )ראה גשרים נמצא.1, כאשר:G'=(V, E')חדש: גרף ניצור.2

E' = { (u, v) | (u, v)E גשר אינה(u, v) הקשת{.DFSה- ביער שיווצר עץ בכל הקדקודים את , ונספור'G עלDFS נריץ.3

, כנדרש.V{u, v, w} הקבוצה הוא קדקודים שלושה בעל דו-קשיר רכיב כל

סיבוכיות:.O(m)קשיר: בגרף גשרים מציאת.1הקשתות( בקבוצת רק מטפלים . )כיG':O(m) יצירת.23.DFSעץ: עלO(m).

. O(m)סה"כ:

נכונות:טענה:דו-קשירים. רכיבים רק'Gב- , יהיוGמ- הגשרים כל הוצאת לאחר

הוכחה:דו-קשיר. לרכיב שייכת כלשהו, ולכן פשוט מעגל על נמצאת בגרף שנשארה קשת כל כי נובע הגשר מהגדרת

בגרף G'דו-קשירים. רכיבים רק ישטענה:

קשיר. אינו שיתקבל , הגרףGמ- דו-קשיר רכיב נוציא אםהוכחה:

פשוט מעגל על נמצאות קשתות שתי שכל קשתות, כך של מקסימלית קבוצה הוא דו-קשיר ההגדרה, רכיב לפימשותף.

קשיר. נשאר דו-קשיר, והגרף רכיב הוצאנו כי בשלילה נניח סתירה לא. מהקשתות דו-הקשיר, וחלק לרכיב שייכות שלו מהקשתות שחלק פשוט מעגל קיים אזי

הדו-קשיר. הרכיב של למקסימליות

Page 22: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

22

שאלה: u ביןGב- מסלול קיים אם קשיר , נקראu, vV, uv צמתים קשיר. זוג בהכרח , שאינוG=(V, E) פשוט גרף נתון

.Gב- קשיריםה הזוגות מספר את הניתן, המחשב ככל יעיל אלגוריתם . תארvל-

פתרון:

האלגוריתם: תאור.T1, T2, ... , Tkקשירות. נסמנם: רכיבי , למציאתDFS אלגוריתם אתG על נריץ.1.ni(, כ-|Vi| את – )כלומר שלו הקדקודים קבוצת עוצמת את נסמןTi קשירות רכיב כל עבור.2 באותו אחר אחד לכל קשור קודקוד שכל כך על המתבסס קומבינטורי חישוב , נחשבTi קשירות רכיב לכל.3

רכיב.קיימיםiה- הקשירות שברכיב נניח – כלומר niזה קשירות ברכיב הקשירים הזוגות מספר קדקודים, אזי

הוא: .ciכ- זה חישוב נסמן

.i=1, ... , k-ים, ciה- כל את נסכום.4

סיבוכיות:1.DFS:O(m + n)..O(n), ולכן:|V|ל- , שווהi=1, ... , k-ים, Tiה- של הקדקודים קבוצות שסכום ברור.2.O(n), ולכן:O(1)ב- מתבצע הקומבינטורי קשירים, והחישוב רכיבים|V| קיימים היותר לכל.3.O(n)קשירים, ולכן: רכיבים|V| קיימים היותר לכל.4

.O(m + n)סה"כ:

נכונות:.DFS מנכונות ישירות נובעים2 ו-1 סעיפיםקומבינטוריים. חוקים על ברורה, ומושתתת הקומבינטורי החישוב נכונותכולו. האלגוריתם נכונות נובעת ומכאן

) (ni

2

Page 23: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

23

שאלה:.v⇝u , אוu⇝v מתקיים: u, vV הקדקודים זוגות כל עבור אם למחצה קשיר נקראG=(V, E) מכוון גרףלמחצה. קשירG האם הקובע יעיל אלגוריתם הצע

פתרון:

האלגוריתם: תאורהיטב. הקשירים הרכיבים למציאתSCC נריץ.1.'Gב- לקודקוד הופךGב- רכיב שכל מעגלים(, כך )ללא הרכיבים של'G גרף נצור.2.f[u] של עולה סדר לפי למחסנית הקדקודים את , ונכניס'G עלTopSort נריץ.3הבא. לקודקוד ממנו קשת קיימת האם הראשון, ונבדוק מהקודקוד נתחיל.4

הבאים. הקדקודים עבור האופן באותו הבא, ונמשיך הקודקוד אל נעבור – כזו קשת קיימת אםלמחצה. קשיר הגרף , אזיi+1 לקודקודi קודקוד כל בין קשת קיימת אם

למחצה. קשיר אינו הגרף – אחרת

סיבוכיות:1.SCC:O(m + n)..G':O(m + n) בניית.23.TopSort:O(m + n)..O(m + n)וקדקודים: קשתות בדיקת.4

.O(m + n)סה"כ:

נכונות: מסלול ביניהם שיש קדקודים מאחדSCC היטב, כי קשיר רכיב מהווה קודקוד , כל2 בסעיף שבנינו'G בגרףלמחצה(. קשיר רכיב הוא היטב קשיר רכיב כל – )בפרט היטב קשיר לרכיב.y⇝x , אוx⇝y מתקיים: x, y קשירות רכיבי של זוג כל עבור האם לבדוק נותר.4 בסעיף המתוארות הבדיקות וביצועTopSort ישירות נובע זה אבל

Page 24: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

24

שאלה: השייכים הצמתים כל רשימת את המדפיס יעיל אלגוריתם קשיר. הצע בהכרח שאינוG=(V, E) מכוון גרף נתון

כלשהו. למעגל

פתרון:

האלגוריתם: תאור.G עלSCC נריץ.1 1 , עבורc[i]| > 1|)כלומר: יחיד מאיבר יותר המונה קשירות רכיב אחר הקשירות, בחפשנו רכיבי על נעבור.2

i COMP.)כלשהו .c[i] איברי כל את נדפיס – כזה קשירות רכיב מצאנו אם.3

בגרף. מעגלים קיימים לא כי נודיע – אחרת

סיבוכיות:1.SCC:O(m + n)..O(n)קשירות: רביכי מקסימום.2.O(n)בגרף: הקדקודים כל הדפסת מקסימום.3

.O(m + n)סה"כ:

נכונות:מעגלים...( מוצאת . )שכידועSCC מנכונות ישירות נובעת הנכונות

Page 25: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

25

שאלה: 1 בין שונה סידורי מספר מתאים צומת לכל – . כלומרU={1,..., n} הצמתים על ומספורG=(V, E) מכוון גרף נתון

אתR[v]ב- . נסמןnל- על-ידיvמ- אליהם להגיע שניתן הקדקודים קבוצת = צמת[v] . נגדירGב- מסלול מינימלי. הסידורי , שמספרוR[v]ל- השייכת

.vV לכל[v] את המוצא האפשר ככל יעיל אלגוריתם תאר

פתרון:

האלגוריתם: תאור.G עלDFS נריץ.1, כאשר:Gל- הפוך גרףGT=(V, ET) נבנה.2

ET = { (u, v) | (v, u) E }.v של הקודם הוא' , כאשר['[v]] של המינימום לפי[v] את ביותר, ונעדכן הקטןfה- לפי נתחיל כעת.3

סיבוכיות:1.DFS:O(m + n)..GT:O(m + n) בניית.2.O(m + n)וקדקודים: קשתות על מעבר.3

.O(m + n)סה"כ:

נכונות: יוצאות. קשתות ממנו אליו, ואין נכנסות הקשתות שכל קודקוד שזהו אומר זה – ביותר הקטןfמה- נתחיל כאשר.R[v] קדקודים קבוצת קיימת לא – כלומרלו. שניתן הסידורי המספר כערך נשאר הערך עצמו, ולכן הקודקוד היא היחידה הצומת

מבטיח זה – ביותר הקטןfה- בעל מצומת שהתחלנו הצאצאים, ומכיוון לפי מעדכנים בעצם צומת כל עבור"למעלה" להורים. מהצאצאים הולכים שאנו

מכל המינימלי יהיה תקבל שהיא אליה, הערך , וכשנגיע הערך את נעביר אליה שנגיע עדv צומת עבור – כן על הצומת אותה אלvמ- מסלול שקיים מראה זה בעצם , אזיGT ב-vל- הגענו אם , כיR[v]ל- השייכים הקדקודים

.G בגרף המינימלי בערך מעודכנת שכבר

Page 26: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

26

שאלה:גשרים. מכיל נתוןG=(V, E) מכוון לא גרף האםO(m + n) בזמן הבודק יעיל אלגוריתם הצע

הפרדה(. נקודות גם מוצא זה )אלגוריתם

פתרון:

האלגוריתם: תאור:vV כל שעבור , כךl – נוסף שדה נגדיר

,v – l[v] = min { d[v] של שכןu קודקוד של אחורה קשת היא(u, w) קשת כאשר{d[w].האלגוריתם: את נתאר כעת

.l[v] = d[v]ש: , מתקייםvV שלכל , כךlה- שדה את גם , נעדכןdה- שדה עדכון בעת.1הבא: באופןlה- שדה את , נעדכן(u, w) הקשת על-ידיw אפור בקודקוד נתקל אם.2

.l[u] = min { l[u], l[w] }, נבדוק:v קודקוד סיימנו, אל איתוu )ברקורסיה( מקודקוד אחורה חוזרים כאשר.3

.l[v] = min { l[v], l[u] }נעדכן: – l[u] < d[v] אם.DFSה- עץ שורש אינה שהיא , בתנאי הפרדה קודקוד הינוv קודקוד אזי– l[u] d[v] אם

בנים2 לפחות לה יש אם הפרדה נקודת היא , אזיDFSה- עץ שורש הואv הקודקוד אם.DFSה- בעץ

.גשר הינה(v, u) הקשת אזי–ממש( )גדולl[u] > d[v] בנוסף אם

קשיר. לבלתי הגרף את הופך שסילוקו קודקוד הפרדה: קודקוד

סיבוכיות:.O(m + n)סיבוכיותו: את משנים אינםDFSב- שהכנסנו שהשינויים ברור (.O(m) היא הסיבוכיות קשיר, אזיG )אם

נכונות:טענה:בגרף. כלשהו פשוט מעגל על נמצאת לא(u, v) הקשת גשר היא(u, v) קשת

הוכחה:.v ל-uמ- מסלול שאין לכך גורמת מהגרף הורדתה אם גשר היא(u, v) קשת : כיוון

פשוט מסלול נשאר היה הורדתה על-ידי שגם ברור אזי – פשוט מעגל על נמצאת(u, v) הקשת אםמכוון(. לאG )v ל-uמ-הקשת אם (u, v)גשר. אינה היא אזי – פשוט מעגל על נמצאתפשוט. מעגל על נמצאת היתה לא אזי – גשר היתה אם

.v ל-uמ- מסלול , יישארGמ- אותה נוריד אם גם גשר, אזי אינה(u, v) הקשת אם : כיוון:v ל-uמ- מסלולים2 לפחות קיימיםGב- – כלומר;(u, v) הקשת את שכולל – האחד.(u, v) הקשת את כולל שלא – והשני

Gהקשת פשוט, אשר מעגל יוצרים אלו מסלולים2 מכוון, ולכן אינו (u, v)אליו. שייכתטענה:

(. אזי:G שלDFSה- )בעץu של צאצא הואvש- , כךG שלDFSה- בעץ קשת(u, v) הקשת תהי. d[u] < l[v] גשר היא(u, v) הקשת

הוכחה:.d[u] < l[v]ש: נניח : כיוון

מתקיים: היה )אחרתu של הקדמון לאב , אוuל- אחורית קשת קיימת שלו, לא מצאצא , אוvמ- אזיd[u] l[v].)

הקשת (u, v)ב- כלשהו פשוט מעגל על נמצאת אינהG.הקשת (u, v)לעיל(. הטענה )על-פי גשר היא

.G שלDFSה- בעץ שהתקבלה קשת(u, v) הקשת תהי : כיווןגשר. היא(u, v) כי נניח

(u, v)ב- כלשהו פשוט למעגל שייכת אינהG.אחורית קשת קיימת לא ולכן (w, z) ] [(u, v)ש- , כךwשל צאצא הוא vאו( v-ו ,)בעצמו zאב

בעצמו(.u )אוu של קדמון l[v]ל- שווה נשאר היה משתנה, כלומר היה לאd[v]ש- , ומכיווןvשל צאצא uמתקיים: היה , אזי

.d[u] < d[v] = l[v]

Page 27: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

27

Page 28: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

28

שאלה:.a, bV קדקודים2 וקשיר, ונתונים מכוון לא גרףG=(V, E) נתון

., v A(a, b) = { vV | va, b דרך עוברb ל-a בין מסלול כל{נגדיר: .A(a, b) את המוצא אלגוריתם הצע

פתרון:

האלגוריתם: תאור.b ל-a בין ההפרדה קדקודי קבוצת את למצוא נדרשים אנו – למעשה

(.26 עמוד – בנושא שאלה )ראה בגרף ההפרדה קדקודי את המוצא אלגוריתם מכירים אנו.b ל-a בין למסלול שייכים שמצאנו ההפרדה קדקודי האם לקבוע נותרכך: לשםשינויים: , עםa מקודקוד החל ההפרדה קדקודי למציאת האלגוריתם את נריץ

.on_path[v] FALSE, נאתחל: vV קודקוד לכל.1.TRUEל- נאתחלon_path[b] את

חזרה. ממנה הקודקוד שלon_pathה- שדה ערך את תחזיר הרקורסיה.2ל- חוזרים אנו אליו הקודקוד שלon_pathה- שדה את נעדכן– TRUE ערך עם ברקורסיה חוזרים כשאנו.3

TRUE.דבר. נשנה לא– FALSE עם חוזרים אנו אם

:v לקודקוד חוזרים ואנוu בקודקוד הטיפול את סיימנו נניח – כלומר.on_path[v] = TRUEנעדכן: , אזיon_path[u] = TRUE אם.on_path[v] ערך את נשנה , לאon_path[u] = FALSE אם

שתואר. ברקורסיה, באופן לחזור , נתחילb לקודקוד כנגיע.4. FALSE ערך נחזיר– a מקודקוד ברקורסיה חוזרים אנו אם.5.S למחסנית נדחוף– TRUE הוא שלוon_pathה- ערך אם – הפרדה כקודקוד שגילינו קודקוד כל.6.S במחסנית יהיוb ל-a בין ההפרדה קדקודי - כל האלגוריתם ריצת סיום עם.7

סיבוכיות:.O(m + n)הפרדה: קדקודי למציאת האלגוריתם של לסיבוכיות זהה שהוצע האלגוריתם שסיבוכיות ברור

נכונות:(.26 בעמוד הוכחה )ראה הוכחנו כבר – ההפרדה קדקודי נכונות,on_path[v] = TRUE מתקיים: b ל-a בין למסלול השייךv קודקוד כל שעבור להראות נצטרך.on_path[u] = FALSE, מתקיים: b ל-a בין למסלול שייך שאינוu קודקוד כל ועבורבאינדוקציה: נוכיח

(.1 שורה . )על-פיon_path[b] = TRUE מתקיים , וכןb ל-a בין למסלול שייךbש- , ברורb קודקוד עבורבדיקה:נכון. מתוחזקon_pathה- שדה מסויםv קודקוד עבורנניח:

:v קודקוד שלu האב עבור נכונותנוכיח:המקרים: בין נבדיל

: v של אב הוא u , ו- b ל- a בין מסלול על שנמצא v מקודקוד חזרנו אם.b ו-a בין מסלול על נמצאu שגם ברור אזייהיהon_path[u] גם . ולכןon_path[v] = TRUE אזי השדה עדכון אופן פי , עלTRUEל- שווה

.3 בשורה = on_path[u] ..., ולכןb ל-a בין המסלול על נמצא אינוuש- ברור , ואזv=a קודקוד אם )אלא

FALSE5 בשורה העדכון אופן פי , על.) : v של אב הוא u , ו- b ל- a בין מסלול על נמצא שאינו v מקודקוד חזרנו אם

,b ל-a בין מסלול על נמצאu שגם הרי– b ל-a בין מסלול על שנמצאw צאצא ישuל- אם אזי תשנה לאv מקודקוד , והחזרהTRUE להיותu שלon_pathה- שדה את יעדכןw קודקוד ולכןזה. ערךה- שדה שערך הרי– b ל-a בין מסלול על נמצאים לא שכולם נוספים, או צאצאים איןuל- אם

on_pathלהיות שאותחל מעולם, וכיוון שונה לא שלו FALSEיישאר , FALSE.

הרי– b ל-a בין למסלול השייכים כקדקודים הפרדה, והן כקדקודי הן שזוהו קדקודים רק מוכנסיםSשל- מכיוון.b ו-a בין במסלול שנמצאים ההפרדה קדקודי כל את תחזיקSש- ברור

Page 29: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

29

Page 30: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

30

שאלה: קדקודים, או17 של קבוצה בגרף קיימת האם הבודק אלגוריתם . הצעsV מכוון, וקודקודG=(V, E) גרף נתון

אף על נמצא לאs קודקוד בו גרף, אשר אליהם( תשאיר המחוברות הקשתות )עם מהגרף פחות, שהסרתםמכוון. מעגל

פתרון:

האלגוריתם: תאור לעצמו.sמ- במסלול ההפרדה קדקודי קבוצת את למצוא נדרשים אנו – למעשה

(.28 בנושא, עמוד שאלה )ראהb ל-aמ- במסלול ההפרדה קדקודי קבוצת את המוצא אלגוריתם מכירים אנולכן:

.a = b = sנקבע: , כאשרb ל-aמ- ההפרדה קדקודי קבוצת למציאת האלגוריתם אתG על נריץ.1 לעצמו.sמ- במסלול ההפרדה קדקודי כלS במחסנית זה, יוחזקו אלגוריתם של סיומו עם

נבדוק:.2 לאs קודקוד בו גרף תיצור שהסרתה קדקודים של קבוצה קיימת שלא תשובה נחזיר אזי– S| > 17| אם

מעגל, כנדרש. אף על נמצא הנמצאים הקדקודים הם אלו כנדרש, וקדקודים קדקודים קבוצת שקיימת תשובה נחזיר- אחרת

.S במחסנית

סיבוכיות:.O(m + n) לעצמו:sמ- במסלול הפרדה קדקודי למציאת אלגוריתם.1.S:O(n) שבמחסנית הקדקודים על מעבר.2

.O(m + n)סה"כ:

נכונות: הוכחה, עמוד )ראהb ל-aמ- מסלול על הפרדה קדקודי למציאת האלגוריתם מנכונות ישירות נובעת הנכונות

28.)

Page 31: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

31

שאלה:,s קדקודים , ושניG=(V, E) מעגלים חסר מכוון גרף נתון tVמספר את המחשב לינארי אלגוריתם . תאר

.G ב-t ל-sמ- השונות המסילות

פתרון:

האלגוריתם: תאור'G הממויין הגרף את . נסמןG עלTopSort נריץ.1, כאשר:'G ל-GT=(V, ET) גרף נבנה.2

ET = { (u, v) | u, vV, (v, u)E) }להלן: , כמתוארt, מ-GT עלCountPaths השגרה את נפעיל.3

CountPaths(G T , t, s) 1. for i s to t2. n[vi] 03. n[t] 14. for i t downto s5. for each vertex uAdj[vi]6. n[u] n[u] + n[vi]

.n[s]ב- יהיהt ל-sמ- הזרות המסילות מספר.4

סיבוכיות:1.TopSort:O(m + n)..GT:O(m + n) בניית.23.CountPaths:O(n).

.O(m + n)סה"כ:

נכונות:באינדוקציה:

(.3 )שורה בלבד אחת אפשרות קיימת – לעצמוt מקודקודבדיקה:.j עבור נכונה, ונוכיח בצורה מעודכןn שהשדה מתקייםk < j קודקוד כל עבורנניח:

תכונות )על-פי שלוnה- שדה את "ביקרו" אצלו, ועידכנו כבר קודמיו -י, כלjה- לקודקוד כשנגיעהוכחה:יחיד(. לכיוון הגרף את הטופולוגי, שמכוון המיון -יjה- בקודקוד שהסכימה כראוי, הרי מעודכנים הקודמים כל האינדוקציה הנחת שעל-פי מכיווןנכונה. תוצאה מניבה

בעבר, טופל כבר זה -י, קודקודjה- לקודקוד כלשהו מקודקוד מסלול עוד אם, בשלילה, היהמתעדכן. היה כבר שלוnה- שדה ועל-כן

בחישוב. נכלל שלא מסלול עוד שקיים ייתכן לא – לכן

Page 32: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

32

שאלה: קיימים באוסף האם המכריע אלגוריתם . תארI1=(s1, t1), I2=(s2, t2), ... , In=(sn, tn) פתוחים קטעים של אוסף נתון.O(n log n) השני, בזמן את מכיל מהם שאחד קטעים שני

פתרון:

האלגוריתם: תאוריורד. בסדרti את עולה, ו בסדרsi את נמיין

מכוונת בקשתti הקדקודים כל ביותר, ואת ביותר, לגדול מהקטן מכוונת בקשתsi הקדקודים כל את נחברביותר. ביותר, לגדול מהקטן

כיוון. ללא בקשתti עםsi את נחבר הקשת על-ידי המתחברות שהקצוות כך עד יעיד מעגל לבן(. כל שאינו )קודקוד מעגלים למציאתBFS נריץ כעת

ביותר. התחתונה הקשת עם הקצוות את המכיל בקט מוכל ביותר העליונהבזה. זה מוכלים לא אליהם הקשורים הקטעים – נחתכות קשתות אם

למשל:.(8, 5(, )7, 6(, )4, 1(, )5, 4(, )3, 2)הקטעים: יהיוכך: יראה הגרף אזי

סיבוכיות:.O(n log n)מיון:

BFS:(m + n)..O(n log n)סה"כ:

נכונות: הקשת קיימת כלשהו מעגל עבור הכלה, כי שמראים קדקודים של כזה סידור נקבל בהכרח – למעגל הגענו אם

(si, ti)והקשת , (sj, tj)ש- , כךsiמעל נמצא sj-ו tiמעל נמצא tjנחתכים. לא הקטעים , כלומריותר. גדול ערכוtj מעל נמצאti . אםsj משל ( קטןd) ערכו , אזיsj מעל נמצאsi אם. (si, ti)( sj, tj) – נקבל לכן

si ti

1

2

4

5

6 3

4

5

7

8

Page 33: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

33

שאלה:מעגלים. חסר בגרף מינימלי מסלולים כיסויי למציאת אלגוריתם הצע

פתרון:

האלגוריתם: תאור:DFSה- לאלגוריתם הבאים השינויים את נכניס

שעבורו הקודקוד אם1ל- שווה יהיה זה נוסף. פרמטר פרמטר תקבלDFS-VISITל- רקורסיבית קריאה כל.1אם2ל- שווה כרגע, או שנבנה מסלול של בהמשכו נמצא נעשתה היא של התחלה הוא הזה הקודקוד

חדש. מסלולאליו. שייך עבורו נעשתה שהיא שהקודקוד המסלול את תחזיר רקורסיבית קריאה כל.2 כפרמטר, אז:1 קיבלהu קודקוד עבור רקורסיבית קריאה אם.3

.{u}נחזיר: – שכנים איןuל- אםא. P המסלול את , ונשמור1 פרמטר עםDFS-VISIT באפור, נבצע נצבע – לבן שהואu שלv שכן עבורב.

משם. שיוחזר.2 פרמטר עםDFS-VISIT מבצעים אחד באפור, ולכל אותם נצבע – השכנים משאר אחד כל עבורג..P{u} בשחור, ונחזיר: u את נצבעד.

כפרמטר, אז:2 קיבלהu קודקוד עבור רקורסיבית קריאה אם.4.{u} את באפור, ונדפיס נצבע – שכנים איןuל- אםא.כלשהוv שכן עבורב. עבורDFS-VISIT אפור, נבצע נצבע – vעם המסלול את , ונזכור1 פרמטר

.P במשתנה המוחזר.Q במשתנה המסלול את , ונזכורDFS-VISIT באפור, נבצע , נצבעvל- , פרטw אחר שכןuל- יש אםג..2 פרמטר עםDFS-VISIT אפור, ונבצע , נצבעw ול-vל- , פרטu של השכנים משאר אחד כל עבורד..P, u, Qהמסלול: את נדפיסה.

סיבוכיות:.O(m + n)המסלולים, ולכן: להדפסת פעולות, פרטO(1) של תוספת ישDFSה- של שלב בכל , כיDFS כמו

.O(m + n) היא אף המסלולים הדפסת.O(m + n)סה"כ:

נכונות:.DFSמ- ישירותהגיעDFS אם כי הברורה האבחנה את נציין בנוסף מסלול של המשך הוא זה קודקוד מסוים, אז לקודקוד

הקודם. מהקודקוד התחלות להיות חייבים השכנים שאר זה, וכל מסלול של המשך להיות יכול הקודם הקודקוד של הראשון השכן

חדשים. מסלולים של חייבים השכנים אחד, ושאר למסלול להתחבר יכולים שלו הראשונים השכנים שני אז מסוים מקודקוד נתחיל אם

חדשים. מסלולים של התחלה להיות

Page 34: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

34

אלה: ש הקצרים המרחקים אתO(m + n) בזמן המוצא אלגוריתם . הצעUV מכוון, וקבוצה לאG=(V, E) גרף נתון

הגרף. מקדקודי אחד לכלUמ- ביותר

פתרון:

האלגוריתם: תאורלהלן: , המתואר*BFS אלגוריתם אתG על נריץ.1

BFS * (G, S) 1. for each vertex u V2. color[u] WHITE3. d[u] 4. [u] NIL5. for each vertex u S6. color[u] GRAY7. d[u] 08. Q Q {u}9. while ( Q )10. u head[Q]11. for each v Adj[u]12. if ( color[v] = WHITE )13. color[v] GRAY14. d[v] d[u] + 115. [v] u16. Enqueue(Q, v)17. Dequeue(Q)18. color[u] BLACK

סיבוכיות:.O(m + n) "הרגיל":BFS אלגוריתם של לזו זהה שהסיבכויות ברור

נכונות:.BFS של הנכונות מהוכחת ישירות נובעת

Page 35: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

35

: שאלה הקצר המרחק את המוצא אלגוריתם , הצעSV, TV קדקודים קבוצות , ושתיG=(V, E) מכוון לא גרף בהינתן.O(m + n) בסיבוכיות ביניהן ביותר

פתרון:

האלגוריתם: תאורלהלן: , המתואר*BFS אלגוריתם את נריץ.1

BFS * (G, T, S) 1. for each vertex u V2. color[u] WHITE3. d[u] 4. [u] NIL5. for each vertex u T6. color[u] RED7. for each vertex u S8. if ( color[u] = RED)9. return 010. color[u] GRAY11. d[u] 012. Enqueue (Q, u)13. while ( Q )14. u head[Q]15. for each v Adj[u]16. if ( color[v] = RED )17. return (d[v] d[u] + 1)18. if ( color[v] = WHITE )19. color[v] GRAY20. d[v] d[u] + 121. [v] u22. Enqueue (Q, v)23. Dequeue(Q)24. color[u] BLACK25. return // means there’s no path connecting vertexes from S and from T

סיבוכיות:.O(n)הקדקודים: קבוצת על מעבר6-5

.O(n)הקדקודים: קבוצת על מעבר12-717-16O(m).

25O(1)..O(m + n) "הרגיל":BFS של לסיבוכיות זהה השאר.O(m + n) סה"כ:

נכונות:להוכיח: "הרגיל". הותרBFS של הנכונות מהוכחת ישירות נובעת הנכונות עיקר לקודקודuS מקודקוד הוא שהמסלול אליו. נניח הגיע*BFSש- הראשון האדום הקודקוד הואv שקודקוד נניחvTב- המסלול אורך את נסמן . לפיכךd[v]..d[v] > kש: בשלילה . נניחk , שאורכוzT לקודקודwS אחר, מקודקוד מסלול שקיים נניח הגיע - האלגוריתם . כלומרz הוא אלו מקדקודים . אחדkה- ברמה בקדקודים מטפל שהוא הרגעBFSב- נביט

בסתירהאליו, הגיע שהאלגוריתם הראשון האדום הקודקוד אינוv. v לקודקוד שהגיע לפניz לקודקודלהנחה.

Page 36: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

36

: שאלה כל– Z קבוצה המוצא אלגוריתם , הצעSV, TV קדקודים קבוצות , ושתיG=(E, V) מכוון לא גרף בהינתן

.O(m + n) , בסיבוכיותT ומ-Sמ- שווה במרחק שנמצאים בגרף הקדקודים

פתרון:

האלגוריתם: תאורלהלן: , המתואר*BFS אלגוריתם את נריץ.1

BFS * (G, T, S) 1. for each vertex u V2. color[u] WHITE3. d[u] 4. [u] NIL5. for each vertex u S6. color[u] RED7. d[u] 08. Enqueue (Q, u)9. for each vertex u S10. d[u] 011. if ( color[u] = RED)12. Z Z {u}13. else14. color[u] BLUE15. Enqueue (Q, u)16. while ( Q )17. u head[Q]18. for each v Adj[u]19. if ( color[v] = WHITE )20. color[v] color[u]21. d[v] d[u] + 122. [v] u23. Enqueue (Q, v)24. if ( color[u] = Opposite(color[v] ) ) //Opposite: if color is RED then BLUE,

if color is BLUE, than RED.25. if ( d[v] = d[u] + 1 )26. Z Z {v}27. color[u] BLACK28. Dequeue(Q)29. for each vertex u V30. if ( color[u] = WHITE )31. Z Z {u} //this vertex has d = from both T and S.

סיבוכיות:8-5O(n).

15-9O(n).26-24O(m).31-29O(n). הרגיל.BFSל- זהה השאר.O(m + n)סה"כ:

נכונות:הבאות: הטענות2 , וביניהןBFS מנכונות ישירות נובעת הנכונות הוכחת רב

: 1 טענה.S מהקבוצהv של המינימלי המרחק את מחזיקd[v]באדום, שנצבעv קודקוד לכל

: 2 טענה.T מהקבוצהv של המינימלי המרחק את מחזיקd[u]בכחול, שנצבעv קודקוד לכל

-26, 12-11 שורות )על-פי שווה שלהם שהמרחק קדקודים רקZל- מכניס שהאלגוריתם אלו, ומכך מטענות25 ,31-30.)

Page 37: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

37

Page 38: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

38

: שאלה , אתt ו-s בגרף צמתים זוג , בהינתןO(m) בסיבוכיות המוצא אלגוריתם . הצעG=(V, E) מכוון ולא קשיר גרף נתון

.t ל-s בין אפשרי קצר מסלול כל על הנמצאים הצמתים כל קבוצת

פתרון:

האלגוריתם: תאור.G'=(V, E') גרף עבור'E שכנויות רשימת נתחזק.1להלן: , המתוארt ל-s, מ-G על*BFS אלגוריתם את נריץ.2

BFS * (G, s) 1. for each vertex uV2. color[u] WHITE3. d[u] 4. [u] NIL5. E'[u] 6. color[s] GRAY7. d[s] 08. Q {s}9. while ( Q )10. u head[Q]11. for each vAdj[u]12. if ( color[v] = WHITE )13. d[v] = d[u] + 114. [v] u15. E'[v] u16. Enqueue(Q, v)17. else18. if ( d[v] = d[u] + 1 )19. E'[v] u20. Dequeue(Q)21. color[u] BLACK

.s ל-t, מ-G'=(V, E') גרף עלBFS נריץ.3.BFSה- ריצת במהלך המתגלים הקדקודים את נדפיס

סיבוכיות:BFS*:O(m + n).BFS:O(m + n).

.O(m) – קשיר שהגרף , ומכיווןO(m + n)סה"כ:

נכונות: קודקוד הכלליות, כי הגבלת הודפס. נניח, בלי לא מקדקודיו כלשהו, שאחד קצר מסלול קיים כי בשלילה נניח

.v הוא זה המקור קודקוד )עבור0מ- עולה סדרה יהיו במסלול הקדקודים ביותר, ערכי קצר מסלול הוא שהמסלול מכיוון

sועד ,) d[t]המרחק( -מs-ל t-לכן, ב .)G'מ- – ההפוך המסלול יהיהt-ל sהקדקודים. לכן, אותם דרך , העובר להנחה. , בסתירהv קודקוד את ימצא'G עלs ל-t מ-BFS בהכרח

Page 39: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

39

שאלה:.t ו-s מסומנים קדקודים ממושקל, ושני מכוון, לאG=(V, E) גרף נתון.t ל-sמ- ביותר קצר מסלול לאף שייכת לא היא אם מיותרת תיקראe צלעלינארי. בזמןGב- מיותרותה הצלעות כל את המוצא אלגוריתם תאר

פתרון:

האלגוריתם: תאורהשינויים: , עםBFS נפעיל.1

)שמצייןה- שדה את נשנהא. את לגלות שיכלו האבות קבוצת את יציין זה ששדה האב(, כך את מינימלי. הקודקוד, בזמן

.ל- הקבוצה את שנאתחל המיותרות. כמובן הקשתות את שתחזיק'E קבוצה נתחזקב..ל- נאתחל – לגביהם. כמובן לבדוק נצטרךBFSה- סריקת עלים, שלאחר שתחזיק'V תור נתחזקג.

הבדיקה: תנאי את נוסיף – בנוסף:v השכן את , ובודקיםu בקודקוד אנו נניחא.

.'E המיותרות הקשתות לקבוצת(u, v) הקשת את נוסיף– d[v] < d[u] + 1 אם.[v]ל- , כלומרv קודקוד של האבות לקבוצתu את נוסיף– d[v] = d[u] + 1 אם

אדום. אותו , ונצבע'V לתורv קודקוד את נוסיף אזי–)עלה( בנים לו , ואיןv (vt) בקודקוד אנו נניחב.מיותרות. קשתות הואBFSה- עץ כל אזי– tל- הגענו לא כלל אם.2

אחרת:להלן: , כמתוארCheckPotentialVertexes השגרה את נריץ.3

CheckPotentialVertexes(V ' ) 1. while ( V' )2. u head[V']3. E' E' ([u], u)4. for each vertex vAdj[[u]]5. if ( color[v] = BLACK ) // not RED or BLUE6. goto 107. if ( color[[u]] RED )8. color[[u]] RED9. Enqueue(V', [u])10. color[u] BLUE11. Dequeue(V')

סיבוכיות:1.BFS:O(m + n)..O(1)בדיקה:.23.CheckPotentialVertexes:O(m + n).

.O(m + n)סה"כ:

נכונות:BFSמקור מקודקוד ביותר הקצרים המסלולים את מוצא sל- אחר, לרבות קודקוד לכלt.

ביותר. קצרים מסלולים כמה יתכנוt ל-sמ- קשת זו , אזיd[v] < d[u] + 1ש: שמתקיים , כךv , לקודקוד(u, v) קשת , על-ידיu מקודקוד שנגיע פעם בכל

"מיותרת". קשת בהכרח שהיא "לאחור", וברור : CheckPotentialVertexes השגרה נכונות

מתחזקתCheckPotentialVertexes השגרה של'V תור אליהן הנכנסות שהקשתות פוטנציאליים קדקודים מיותרות.

הבא: באופן הקדקודים לצבעי מתייחסתCheckPotentialVertexes השגרה.'V בתור שנמצא קודקוד – אדום קודקוד.'V מהתור שהוצא קודקוד – כחול קודקוד.'V לתור נכנס לא שמעולם קודקוד – שחור קודקוד

מיותרים: מסלולים מגלהCheckPotentialVertexes שהשגרה נראה למסלול , בנוסףtל- ביותר קצר מסלול קייםw מקודקוד (, כלומרvt) עלה הואv , כאשרw⇝v המסלול נניח

.vל- המיותר(.BFSב- שערכנו השינויים אדום. )על-פי , וצבעו'V בתור נמצאv – אזי

(.3-2 המיותרות. )שורות הקשתות לקבוצת אליו הנכנסות הקשתות את מהתור, ומוסיפה אותו שולפת השגרה

Page 40: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

40

כחולים. ) שורות או אדומים שאינם בנים ( קיימים[v] )נסמנם: v של להורים האם בודקת השגרה – מכן לאחר5-4.)ל-[v]מ- הקשתות שכל הרי – כחולים או אדומים הבנים כל אם vהן שגם ברור מיותרות, ולפיכך קשתות

בהם תטפל השגרה , ולפיכך'V לתור האבות את מוסיפות9-7 מיותרות. שורות קשתות הן[[v]]מ- הקשתותהמיותרות. הקשתות לקבוצת אליהם הנכנסות הקשתות את תוסיף הבאות, ואכן באיטרציות

ועדsמ- המסלול – . לפיכךtל- ביותר קצר מסלול קיים הזה שמקודקוד כחול, הרי או אדום שאינו בן קיים אם(.11-10 לשורות ישר , שקופצת6 . )שורה'V לתור אותו נוסיף לא – מיותר. לכן אינו הזה לקודקוד

מיותרות. כקשתותv ל-wמ- הקשתות כל את מסמנים , כשאנוw לקודקוד שנגיע עד נמשיך כךמיותר: כמסלול נסמן לאw קודקוד דרך העובר הקצר המסלול שאת להראות נותר

(.tל- ביותר קצר מסלול ממנו קיים )כי אדומים או כחולים שאינם בנים ההנחה, יש , על-פיw לקודקודלתור, ולכןw קודקוד את תכניס לא השגרה לפיכך הקשתות לקבוצת יתווספו לא אליו המובילות הקשתות

המיותרות.מיותר. כמסלול יסומן לאwל- ועדsמ- - המסלול כלומרל-sמ- ביותר הקצר שהמסלול קיבלנו wלא ל-wמ- המסלול מיותר, וכי כמסלול יסומן tלא כמסלול יסומן מיותר.מיותר. כמסלול יסומן לאw קודקוד דרך העובר ביותר הקצר המסלול – מכאן

Page 41: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

41

שאלה: זוגי האי המעגל אורך את המדפיס אלגוריתם בגרף. כתוב כלשהי צומתuV מכוון. תהי גרףG=(V, E) יהי

כך. על הודע – מעגל קיים לא בו. אם משתתףuש- ביותר הקצר

פתרון:

האלגוריתם: תאורהבא: באופןG'=(V', E') חדש גרף נבנה.1

uV, u', uV' (u, v)E, (u', v), (u, v')E'

, ונסיים.d[u'] את נחזיר , אזי'uל- נגיע אם , כאשרu מקודקוד , החלBFS אלגוריתם את'G על נריץ.2כנדרש. מעגל קיים שלא , נודיע'uל- הגענו ולא הסתייםBFS אם.3

סיבוכיות:.G':O(m + n) הגרף בניית.12.BFS:O(m + n).3.O(1).

.O(m + n)סה"כ:

נכונות: : 1 טענה

.'G ב-'v ל-uמ- מסלול קייםG ב-v ל-uמ- אי-זוגי באורך מסלול , קייםu, v V בהינתןהוכחה:

.u, v1, v2, ... , vn, vהוא: המסלול . נניחv ל-uמ- אי-זוגי באורך מסלול קייםGב- נניח : כיוון.'u, v1', v2, v3', ... , vn, vהמסלול: קיים'Gבנייה, ב- אזי, על-פי

.'u, v1', v2, v3', ... , vn, vהוא: המסלול . נניח'v ל-uמ- מסלול קיים'Gב- נניח : כיוון 'v ועדuמ- שהמסלול ברור זוגי, ולכן באורך מסלול הואvn עדuמ- בנייה, שהמסלול פי ברור, על אזי

זוגי. אי באורך מסלול הוא : 2 טענהuVב- זוגי אי במעגל משתתףG -ב G'מ- מסלול קייםu-ל u'.

הוכחה: ,'u, v1 המסלול: 'Gב- קייםu, v1, v2, ... , u בו, והוא משתתףu ש-Gב- זוגי אי מעגל בנייה, קיים פי על

v2, ... , u'. : 3 טענה

המינימלי. המעגל אורך את מוצא האלגוריתם , אזיGב- זוגיים אי במעגלים משתתףu אםהוכחה:

.'u ל-uמ- מסלולים קיימים'G, ב-2 ו-1 טענות פי על , אזGב- זוגיים אי במעגלים משתתףu אם.BFSה- ותכונות נכונות פי מינימלי, על הוא'G ב-'u ל-uמ- המסלול

Page 42: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

42

שאלה: ,O(m + n) בזמן הפועל אלגוריתם . מצאUV קדקודים , וקבוצתs, tV צמתים , שניG = (V, E) גרף נתון

. Uב- הצמתים כל דרך , העוברt ל-s בין ביותר קצר מסלול קיים האם המברר

פתרון:

האלגוריתם: תאור

אחד על , הנמצאיםUל- השייכים קדקודים של המקסימלי המספר– (w) שדה , נתחזקw קודקוד כל עבור.w , ועדsמ- ביותר הקצרים המסלולים

להלן: , המתוארuמ- , החל*BFS אלגוריתם את נריץ.1

BFS * (G, s) 1. for each vertex u V[G]2. color[u] WHITE3. d[u] 4. [u] NIL5. [u] 06. color[s] GRAY7. d[s] 08. Q {s}9. while ( Q )10. u head[Q]11. for each v Adj[u]12. if ( color[v] = WHITE )13. color[v] GRAY14. d[v] d[u] + 115. [v] u16. Enqueue(Q, v)17. if (d[v] = d[u] + 1 )18. if ( v U )19. [v] max { [v], [u] + 1 }20. else21. [v] max { [v], [u] }22. Dequeue(Q)23. color[u] BLACK

כל קודקוד, על-ידי כל של השדה את לעדכן שנוכל לעיל, הוא המצוין האלגוריתם בבסיס העומד הרעיוןהנ"ל(. הקודקוד שלd מה-1ב- קטן שלהםd- שה- )כלומר לו הקודמת ברמה הנמצאים מהקדקודים אחד

.U קדקודי כל דרך , העוברt ל-sמ- ביותר קצר מסלול קיים , אזי|[t] = |U אם.2כזה. מסלול קיים לא – אחרת

סיבוכיות:.O(m + n) "הרגיל": BFS אלגוריתם של לסיבוכיות זהה*BFS האלגוריתם שסיבוכיות ברור.1.O(1) בדיקה:.2

.O(m + n) סה"כ:

נכונות:

Page 43: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

43

ביותר קצר מסלול הואP=sv1v2...v המסלול אם כי הטענה את "הרגיל" מקייםBFS כידוע, אלגוריתם ועדsמ- ביותר קצר מסלול הואsv1v2...vi שהמסלול מתקייםviP קודקוד כל עבור , אזיvל- ועדsמ-.viל-

דומה: נוספת טענה זו, ועל טענה על מתבסס*BFS האלגוריתםטענה:

ל- השייכים קדקודים מקסימום המכילvל- ועדsמ- ביותר קצר מסלול הואP=sv1v2...v המסלול אםUקודקוד כל עבור , אזי viPשהמסלול מתקיים sv1v2...viמ- ביותר קצר מסלול הואsל- ועדviהמכיל

.Uל- השייכים קדקודים מקסימוםהוכחה:

קדקודים של יותר גדול מספר , המכילP'=s u1u2...v (P' P) ביותר קצר מסלול שקיים בשלילה נניח.Uל- השייכים

(.vi+1 = ui+1 – )כלומר מתאחדים'P ו-P שהמסלולים לפני האחרון , הקודקודui בקודקוד נביט.[vi] < [ui]. [vi+1] < [ui+1]שמתקיים: ברור אזי

.d[vi] = d[ui] מתקיים: BFS מנכונות d[ui+1] = d[vi+1] = d[vi] + 1 = d[ui] + 1.

ה- , שדה21-17 שורות על-פיקודקוד של viיעודכן, ונקבל [vi+1] = [ui+1].סתירה! [vi] = [ui] כי: שנקבל , הריvi+1 = ui+1ש: מכיוון

Page 44: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

44

: שאלה ,O(m) בזמן הפועל אלגוריתם . תארA = {a1, a2, ..., an} צמתים , וקבוצתG=(V, E) מכוון לא קשיר גרף נתון

.A צמתים מקבוצת ביותר קרוב לצומתvמ- ביותר קצר מסלול של אורכו אתvV צומת לכל ומוצא

פתרון:

האלגוריתם: תאור.'Gכ- זה גרף . נסמןs עםAמ- קודקוד כל המחברות , וקשתותs קודקודG לגרף נוסיף.1.s מ-BFS -(, ונריץ1 ב- )d(s) השדה את נאתחל. 2

שלו.dה- בשדה המבוקש המסלול אורך את יחזיק קודקוד , כלBFSה- בסיום

סיבוכיות:.G': O(n) יצירת.12.BFS: O(m + n)

.O(m) – קשירGש- , ומכיווןO(m + n) סה"כ:

נכונות:טענה:

הבאות: התכונות את מקיים'G ב-vV לכלsמ- האלגוריתם שמוצא ביותר הקצר המסלול.Aל- השייכים הצמתים אחד דרך עובר זה מסלול א. = d[v] קיבלנוs מ-'G עלBFS הרצת לאחר אם , אזיakA קודקוד דרך עובר הנ"ל שהמסלול בהינתן ב.

kהרצת לאחר , אזי BFSעל G'-מ akנקבל d[v] = k..d[v] < k נקבלal מ-'G עלBFS הרצת שלאחר , כךal A, al ak קיים לא ג.

הטענה: הוכחת עובר זה . מסלולAל- השייך כלשהוa קודקוד דרך עוברv ל-sמ- קודקוד , כלvV , לכל'G בניית לפי א.

שנוצרBFSה- עץ שלR1 ברמה נמצאיםA אברי שכל כך'G את שבונים , משוםAמ- יחיד קודקוד דרך.s מ-'G עלBFS הרצת על-ידי

סתירה , זוd[v] < k נקבל ; ואםak מ-'G עלBFS אלגוריתם לנכונות סתירה , זו d[v] > k נקבל אם ב..s מ-'G עלBFS אלגוריתם לנכונות

.s מ-'G עלBFS לנכונות סתירה כזה, נקבלal קודקוד קיים אם ג.האלגוריתם. נכונות הטענה מנכונות

Page 45: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

45

: שאלה-A V , וקבוצהs, t צמתים (, זוג1 כולם הקשתות )משקלותG=(V, E) וקשיר מכוון, סופי לא גרף נתון

{s,t}בסיבוכיות אלגוריתם . תאר O(|E|)צומת קיים הבאה: "האם השאלה על שעונה v Aקל מסלול שיש , כך ?"v דרך , העוברt ל-sמ- ביותר

פתרון:

האלגוריתם: תאור.s מקודקודG עלBFS אלגוריתם את נריץ.1.ls, v כ-d[v] את , נשמורvV לכל.2.t מקודקודG עלBFS אלגוריתם את נריץ.3.lt, v כ-d[v] את , נשמורvV לכל.4, נבדוק:vA לכל.5

.t ל-sמ- ביותר קצר מסלול על נמצאv קודקוד , אזיls, v + lt, v = ls, tמתקיים: אם.t ל-sמ- ביותר קצר מסלול על נמצא אינוv קודקוד – אחרת

סיבוכיות:1.BFS:O(m + n)..O(n)הקדקודים: קבוצת כל על מעבר.23.BFS:O(m + n)..O(n)הקדקודים: קבוצת כל על מעבר.4.O(n)הקדקודים: קבוצת כל על מעבר.5

.O(m)ל- שווה זה שביטוי קשיר, הלא בגרף שמדובר , ומכיווןO(m + n)סה"כ:

נכונות:.ls, vב- יוחזק כלשהוvV ל-sמ- ביותר קצר מסלול כי נובעBFS מנכונות

כלשהו.vV ל-tמ- ביותר קצר מסלול יחזיקlt, vזהה, באופן + ls, v הוא הנ"ל, ואורכו המסלולים שני של חיבורם הואv קודקוד דרך , העוברt ל-sמ- ביותר קצר לכן, מסלול

lt, v.ביותר: קצר הינו זה מסלול שאורך נוכיח.ls, v + lt, v > ls, tש: בשלילה נניחהאפשרויות: קיימות אזי

! מינימליls, vש: לכך סתירה ls, v מ- קטן , שאורכוv ל-sמ- מסלול קייםא(! מינימליlt, vש: לכך סתירה lt, v מ- קטן , שאורכוv ל-tמ- מסלול קייםב(

ls, v + lt, v = ls, t מ- למרחק זהה שהרכבנו המסלול אורךs-ל tביותר. קצר מסלול זהו , ולכן

Page 46: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

46

: שאלה אורך את המוצא אלגוריתם . תארt ו-s צמתים , ושניUV צמתים , ממושקל, וקבוצתG=(V, E) מכוון גרף נתון

.Uב- לפחות אחת צומת דרך , העוברt ל-sמ- ביותר הקל המסלול

פתרון:

האלגוריתם: תאורהרגיל. באופןDijksta נפעיל , אזsU אוtU נבדוק: אם.1.V'=V\{t} וממושקל, כאשר מכווןG'=(V', E) גרף אחרת: ניצור.2 שלו התואם הקודקוד עם'v קודקוד , את0 משקל בעלת(v', v) בקשת נחבר, v'U[G'] קודקוד כל עבור.3vבגרף G.t ל-'s, מ-'G גרף עלDijkstra של האלגוריתם את נריץ.4

סיבוכיות:.U:O(n) הקבוצה קדקודי בדיקת.1

.Dijkstra:O(m log n) נפעיל אם.O(m + n)הגרף: יצירת.2.O(n)הקדקודים: כל על מעבר.3.Dijkstra:O(m log n) של האלגוריתם.4

.O(m log n)סה"כ:

נכונות: ברור.– 1 סעיף

נעבור אם , היאtל- להגיע היחידה . האפשרותDijkstra את מריצים אנו , עליו'G בגרף t לקודקוד להגיע ניתן לא.U לקבוצה השייך בקודקוד שנפגש הראשונה בפעםG לגרף'G מגרף עוברים . אנוG לגרף את משנה , לאG לגרף'G שה"מעבר" מגרף לב . )נשיםDijkstra של מהנכונות ישירות נובעת הנכונות – מכאן

(.0- מינימלי משקל המעבר" בעלת ש"קשת , משוםDijkstra נכונות

Page 47: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

47

שאלה: הקל המסלול את המוצא אלגוריתם . תארV1, V2V תתי-קבוצות וממושקל, ושתי מכוון לאG=(V, E) גרף נתון

.O(m log n) ב-V2 ל-V1 בין ביותר

פתרון:

האלגוריתם: תאור", ונסיים.0" תשובה נחזיר אזיV1V2 נבדוק: אם ראשית.1להלן: , המתואר*Dijkstra הכלליות(, את הגבלת )ללאV1מ- , החלG על נריץ.2

Dijkstra * (G, w, V 1)1. for each vertex u V2. d[u] 3. [u] NIL4. for each vertex u V1

5. d[u] 06. S 7. Q V8. while ( Q )9. u ExtractMin(Q)10. S S {u}11. for each vAdj[u]12. if ( d[v] > d[u] + w(u, v) )13. d[v] d[u] + w(u, v)14. [v] u

המינימלי.dה- ערך את , ונחזירV2 הקבוצה על נרוץ3

סיבוכיות:.O(n)זרות: הקבוצות האם בדיקה.12.Dijkstra*:O(m log n)..V2:O(n) הקבוצה קדקודי על ריצה.3

.O(m log n)סה"כ:

נכונות: ברור.– 1 סעיף של הנכונותאחרת::Dijkstra של מנכונות ישירות נובעת הנכונותDijkstraה- ערך הגרף. את קדקודי שאר לכל מקור מקודקוד מינימליים מרחקים מחשבdהמקור קודקוד של

.0ב- מאתחליםDijkstraמהתור ראשון זה קודקוד מוציא Qשלו. לשכנים הקלות , ומבצע

ישלפו אלו קדקודים , ולכן0ל- שלהםdה- בשדה המאותחלים קדקודים כמה שהוצע, יש*Dijkstra באלגוריתם.Q מהתור ראשונים

, לרבותV1 הקבוצה מקדקודיv קודקוד כל של המינימליים המרחקים רשימת את נקבל2 סעיף לכן, בתום.V2 הקבוצה קדקודי

המינימליdה- ערך בעל הקודקוד את נמצא אם – לכן המסלול את שנמצא , הריV2 הקבוצה קדקודי מבין .2 בסעיף שמתבצע מה בדיוק . וזהV2 ו-V1 הקבוצות2 בין המינימלי

האלגוריתם. נכונות נובעת ומכאן

Page 48: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

48

שאלה: הכבדה הקשת כמשקל מסלול אורך. נגדיר: s, tV קדקודים2 וממושקל, ונתונים מכווןG=(V, E) גרף נתון

.t לצומתs צומת בין ביותר כבד מסלול המוצא אלגוריתם ביותר. הצע

פתרון:

האלגוריתם: תאורלהלן: , המתואר*Kruskal אלגוריתם אתG על נריץ.1

Kruskal * (G, w) 1. A 2. for each vertex vV3. MakeSet(v)4. sort the edges of E by non-increasing weight w5. for each edge (u, v) E, in sorted order6. if ( FindSet(u) FindSet(v) )7. A A {(u, v)}8. Union(u, v)9. return A

משקליהן.( עם הקשתות קבוצת היאA. )הערה: T = (V, A)נגדיר: .2.t לקודקודs , מקודקודBFS אלגוריתם אתT על נריץ כלל", ונסיים.t ו-s בין מסלול קיים תשובה: "לא נחזיר , אזיtל- הגענו ולא הסתייםBFS אם

עוברים. אנו עליהן הקשתות משקלי את , ונסכוםsל- ועדt בקודקוד נתחיל , כאשרה- שדה לפי נרוץ.3

סיבוכיות:1.Kruskal*:O(m log n).2.BFSעץ: עלO(m)..O(m)בעץ: הקשתות על ריצה.3

.O(m log n)סה"כ:

נכונות:מקסימלי. פורש עץ ימצא*Kruskalש- ברור הכבדות - הקשתות*Kruskal של ריצתו אופן זה. )על-פי בעץ תהיהt ל-sמ- במסלול המקסימלית שהקשת ברור

(.A לקבוצה קודם נכנסותבעץ(. מדובר כי יחיד . )מסלולt ו-s )יחיד( בין מסלול נמצא זה עץ עלBFS הרצת שעל-ידי ברורהמקסימלי. המסלול אורך את לנו תניבt ל-sמ- המסלול לאורך הקשתות משקלי שסכימת ברור – לכן

Page 49: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

49

: שאלה .e , וקשתt ו-s צמתים הקשתות, זוג על אי-שליליים משקלים עם מכוון לא גרף נתון .t ל-s בין ביותר הקלים המסלולים כל על נמצאתe הקשת אם הבודק שתוכל ככל יעיל אלגוריתם הצעא.

ונתח נכונות הוכחסיבוכיות.

. t ל-s בין כלשהו ביותר קל מסלול על נמצאתe הקשת האם הבודק יעיל אלגוריתם הצעב.

פתרון:

א.

האלגוריתם: תאור.(t) . נזכורs מצומתG גרף עלDijkstra אלגוריתם את נריץ.1.G'=G(V, E)\{e} גרף ניצור.2.'(t) . נזכורs מצומת'G גרף עלDijkstra אלגוריתם את נריץ.3.e הקשת את כולל שלא קל מסלול ישנו אזי'(t)=(t) אם.4

סיבוכיות:1.Dijkstra:O(m log n)..O(m+n)הגרף: יצירת.23.Dijkstra:O(m log n)..O(1)בדיקה:.4

.O(m log n)סה"כ:

נכונות::e דרך עובר שלא קצר מסלול ישנו אזי'(t) = (t) שאם נראה

נמצאDijkstra נכונות לפי ל-sמ- מסלול tשמשקלו e הקשת דרך עובר לא בהכרח ביותר, שהוא קטן נמצאת(. לאe הקשת'Gב- )שהרי:'(t) (t) , אזe דרך עוברים ביותר הקלים המסלולים כל שאם נראה

Dijkstraגרף על שהורץ G'של ערך אותו את מחזיר היה לא (t)שללא , משום eבאורך מסלול אין (t)-מ s .Dijkstra נכונות , על-פיtל-

ב.

האלגוריתם: תאור.e=(u, v), ונסמנם: e הקשת קדקודי את נמצא.1. (t) . נזכורs מצומתG גרף עלDijkstra נריץ.2.G'=G(V, E)\{e} גרף ניצור.3.'(u) . נזכורs מצומת'G גרף עלDijkstra אלגוריתם את נריץ.4.'(v) . נזכורt מצומת'G גרף עלDijkstra אלגוריתם את נריץ.5קל. מסלול על נמצאתe הקשת , אזי(t) = '(u) + w(e) + '(v) אם.6

סיבוכיות:.O(1)הקשת: קדקודי מציאת.12.Dijkstra:O(m log n)..O(m+n)הגרף: יצירת.34.Dijkstra:O(m log n).5.Dijkstra:O(m log n).

Page 50: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

50

.O(1)בדיקה:.6.O(m log n)סה"כ:

נכונות::e קשת דרך העובר ביותר קל מסלול קיים , אזי(t) = '(u) + w(e) + '(v) הערך שאם נראה מסלול גם . ולכן, קייםv עדt, מ-'(v) באורך , ומסלולu עדs, מ-'(u) באורך מסלול קיים– Dijkstra על-פי

suvtדרך( eואורכו ,) ביותר. קל:e דרך העובר ביותר קל מסלול קיים לא , אז(t) '(u) + w(e) + '(v) שאם נראה

הקל המסלולDijkstra. ל- בסתירה זה , כי(t)מ- קטן להיות יכול , לא = '(u) + w(e) + '(v)הסכום: מסלול על נמצאת לאe e דרך עובר שלא הקל מהמסלול גדול/שווה , משקלוe, suvt דרך ביותר

ביותר. קלחייבe דרך שמסלול , משוםמ- יותר , הקלe דרך מסלול להיות יכול לא ,vt , ודרךsu דרך לעבור

.e דרך האפשרי ביותר הקל המסלול הוא (. Dijkstra )על-פי מינימליים הם אלו וערכים

Page 51: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

51

: שאלה צבעים: אדום בשני צבועות הקשתות. הקשתות על אי-שליליים משקלים עםG=(V, E) מכוון לא סופי גרף נתון

.s קודקוד ושחור. נתון )שסכום ביותר קל מסלול משקל אתvV קודקוד לכל , שמוצאO(m log n) בסיבוכיות אלגוריתם הצעא.

אדומות. קשתות של זוגי מספר , המכיליםv ל-sמ- המסלולים מינימלי( בין הקשתות משקלי )שסכום ביותר קל מסלול משקל אתvV קודקוד לכל , שמוצאO(m log n) בסיבוכיות אלגוריתם הצעב.

אי-זוגי ומספר אדומות קשתות של זוגי מספר , המכיליםv ל-sמ- המסלולים מינימלי( בין הקשתות משקלישחורות. קשתות של

פתרון:

א.

האלגוריתם: תאור, כאשר:G*=(V*, E*) חדש גרף ניצור.1

.uV אם'u'V . כלומרV המקורית הקדקודים קבוצת של שכפול , שהיא'V קדקודים קבוצת ניצור'V* = V Vנגדיר:

:*E קשתות קבוצת ניצור.('u, v) הקשת את*E לקבוצה נוסיף אדומה:G ב-(u, v) הקשת אם.('u', v) הקשת , ואת(u, v) הקשת את*E לקבוצה נוסיף שחורה:G ב-(u, v) הקשת אם

.v ל-s מ-Dijkstra של האלגוריתם את נריץ.2Dijkstraהמינימלי. המשקל את ימצא

סיבוכיות:.O(m + n)החדש: הגרף יצירת.1.Dijkstra:O(m log n) של האלגוריתם.2

.O(m log n)סה"כ:

נכונות:.('V, V) חתך *Vב- יצרנו – למעשה

קדקודים בין מקשרות השחורות והקשתותגשרים, למעשה הן האדומות , הקשתות*G הגרף בניית על-פיקדקודים. קבוצת מאותה

נמצא. בה הקדקודים קבוצת בגשר, "נחליף" את שנעבור פעם בכלאדומות. קשתות של אי-זוגי , במספרv ל-sמ- בשלילה, שהגענו נניח

ל-sמ- אזי, במסלול vקיים מספר קדקודים "החלפנו" קבוצותאדומות. קשתות של אי-זוגי מספר השונה הקדקודים בקבוצת נמצא שבסיום קדקודים, הרי קבוצות2 רק שקיימות פעמים. מכיוון של אי-זוגי

הגרף. לבניית סתירה שונות. קדקודים בקבוצות נמצאיםv ו-s הקדקודיםבה. שהתחלנו מזואדומות. קשתות של זוגי מספר שעברנו , הריv ל-sמ- הגענו שאם – מכאן

.Dijkstra של האלגוריתם מנכונות ישירות נובעת המינימלי המשקל נכונות

v

● u ●w

v'

● u'

●w'

V V'

Page 52: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

52

ב.

האלגוריתם: תאור, כאשר:G*=(V*, E*) חדש גרף ניצור.1

.uV אם'u'V . כלומרV המקורית הקדקודים קבוצת של שכפול , שהיא'V קדקודים קבוצת ניצור.'''V ו-''V קדקודים קבוצת זהה באופן ניצור

'''V* = V V' V'' Vנגדיר: :*E קשתות קבוצת ניצור

.('''u'', v) הקשת , ואת('u, v) הקשת את*E לקבוצה נוסיף אדומה:G ב-(u, v) הקשת אם.('''u', v) הקשת , ואת(''u, v) הקשת את*E לקבוצה נוסיף שחורה:G ב-(u, v) הקשת אם

.''v ל-s מ-Dijkstra של האלגוריתם את נריץ.2Dijkstraהמינימלי. המשקל את ימצא

סיבוכיות:.O(m + n)החדש: הגרף יצירת.1.Dijkstra:O(m log n) של האלגוריתם.2

.O(m log n)סה"כ:

נכונות:הבאות: הטענות את , נטעןVמ- נתחיל כי בהנחה : I טענה.''Vב- אוVב- נמצא אדומות, אזי קשתות של זוגי מספר עברנו אם"ם הטענה הוכחתהשאלה. א' של לסעיף בדומה

: II טענה.'''Vב- או''Vב- נמצא שחורות, אזי קשתות של זוגי אי מספר עברנו אם"ם הטענה: הוכחתהשאלה. א' של לסעיף בדומה

שחורות קשתות של זוגי אי ומספר אדומות קשתות של זוגי מספר עברנו אם"ם כי נובעII ומטענהI מטענה.''Vב- נמצא –

.Dijkstra של האלגוריתם מנכונות ישירות נובעת המינימלי המשקל נכונות

V V'

V''' V''

Page 53: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

53

: שאלה,G=(V מכוון גרף נתון E)על0מ- וגדולים שלמים משקלים , עם הרצת של הפלט נתון הקשתות. כמו-כן

לכלsמ- ביותר קלים מסלולים למציאת אלגוריתם משקל רשום הגרף קודקוד בגרף: לכל אחר קודקוד לנו עצמם(. נאמר המסלולים את מוציא לא )האלגוריתם אליו ועדsמ- האלגוריתם שמצא ביותר הקל המסלול

ביותר. הקצרים גם הם האלגוריתם שמצא המסלולים שכל מגדילים הגרף, כאשר קדקודי לשארsמ- ביותר קלים מסלולים משקלי למציאת יעיל אלגוריתם הצעא.

.1ב- קשת כל של המשקל את מקטינים הגרף, כאשר קדקודי לשארsמ- ביותר קלים מסלולים משקלי למציאת יעיל אלגוריתם הצעב.

.1ב- קשת כל של המשקל את מבחינת מינימלי הוא ביותר קצר קשתותיו. מסלול משקלי סכום מבחינת מינימלי הוא ביותר קל מסלולהערה:

הקשתות. מספר

פתרון:

א.

האלגוריתם: תאור למשקל זה לערך אליו. נוסיף ועדsמ- ביותר הקצר המסלול אורך אתv לכל , ונמצאs מ-G עלBFS נריץ

השאלה(. בגוף שתואר האלגוריתם )מהרצתvב- שרשום

סיבוכיות:נשארת: הסיבוכיות , ולכןO(1)ב- שמתבצעת "הרגיל" פעולהBFSה- לאלגוריתם שהוספנו ברור

O(m + n).

נכונות:בגרף. כלשהו קודקודv יהיבמסלול. הקשתות במספר בדיוק מתארךv ל-sמ- מסלול כל

התארך אחר מסלול )כל ביותר קל מסלול , נשארv ל-sמ- ביותר הקצר ביותר, וגם הקל שהיה לכן, מסלולמידה(. באותה לפחות

ב.

האלגוריתם: תאורועדsמ- ביותר להק המסלול אורך אתv לכל , ונמצאs מ-G עלDijkstra נריץ זה לערך אליו. נוסיף

השאלה(. בגוף שתואר האלגוריתם )מהרצתvב- שרשום למשקל

סיבוכיות:נשארת: הסיבוכיות , ולכןO(1)ב- המתבצעת פעולהDijkstra "הרגיל" של לאלגוריתם שהוספנו ברור

O(m log n).

נכונות: ביותר הקצרים מסלולים – שבו. לכן הקשתות במספר יורד מסלול כל א', הפעם לסעיף שבניגוד לב נשים

ביותר. הקלים המסלולים בהכרח יישארו לא (. לכן,1 . )כלומר, גדולים/שווים0מ- גדולים היו המקוריים שהמשקולות זאת, משום לעשות שנוכל לב נשים.Dijkstra של האלגוריתם את להריץ אי-שליליים, ונוכל ישארו החדשים שהמשקולות ברור

Page 54: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

54

: שאלה כל , מסמןs מקור וקודקוד הקשתות על חיוביים משקלות עם מכוון לא גרף בהינתן יעיל, אשר אלגוריתם תאר

מבין ביותר קצר מסלול מאורך ממש קטןv ל-sמ- ביותר קצר מסלול אורך הבא: אם באופן בגרףv קודקוד מספר הוא מסלול "=". )אורך בסימון ">". אחרת, יסומן בסימון יסומן , אזיv ל-sמ- ביותר הקלים המסלוליםבו(. הקשתות משקלי סכום הוא מסלול בו. משקל הקשתות

פתרון:

האלגוריתם: תאור.'Gכ- הריצה לאחר שיתקבל המכוון הגרף את . נסמןG על הרגילBFS אלגוריתם את נריץ.1להלן: , המתואר*Dijkstra אלגוריתם את'G על נריץ.2

Dijkstra * (G, w, s) 1. for each vV2. d[v] 3. [v] NIL4. [v] 5. d[s] 06. [s] 07. S 8. Q V9. while ( Q )10. u ExtMin(Q)11. S S {u}12. for each vAdj[u]13. if ( d[v] > d[u] + w(u, v) )14. d[v] d[u] + w(u, v)15. [v] u16. [v] [u] + 117. if ( ( d[v] = d[u] + w(u, v) ) and ( [u] + 1 < [v] ) )18. [v] [u] + 1

הקלים המסלולים מבין הקשתות( המינימלי )מספר המסלול אורך אתv קודקוד כל עבור יחזיק השדה.v לקודקוד ועדsמ- ביותר

להלן: , המתוארMarkVertexes(V) אלגוריתם אתV על נריץ.3MarkVertexes(V)

1. for each vV2. if ( d[v] < [v] )3. mark[v] “>”4. else5. mark[v] “=”

סיבוכיות:1.BFS:O(m + n)..O(m log n) ה"רגיל":Dijkstra של לסיבוכיות זהה*Dijkstra של שהסיבוכיות ברור.23.MarkVertexes:O(n).

(.O(m log n) – קשיר היה הגרף . )אםO(n + m log n)סה"כ:

נכונות: יכווןBFS כלשהו. כמו-כן, v לקודקודs בין ביותר הקצר המסלול את לקבל בכדיG עלBFS אלגוריתם את נריץ נובעת כאן שעלו הטענות . נכונותDijkstra של האלגוריתם של וריאציה עליו להפעיל נוכל הגרף, וכך את לנו

.BFS מנכונות ישירותשהוצע*Dijkstra אלגוריתם נכונות קלDijkstra של האלגוריתם מנכונות ישירות נובעת ה"רגיל". לראות

המסלול אורך את האלגוריתם ריצת בסיום מחזיק זה ששדה לכך מביאים תחזוקו , ואופן השדה שהוספת.v קודקוד לכלsמ- ביותר הקלים המסלולים מבין ביותר הקצר עבור ונכונים מעודכנים[v] ו-d[v] לנו נתון (, יהיה*Dijkstra ו-BFS) הללו האלגוריתמים2 ריצת סיום שעם ברור

נכונות... הוכחת דורש באמת טכני, שלא מימוש הואMarkVertexes . לכן, אלגוריתםv קודקוד כל

Page 55: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

55

שאלה:שליליים. מעגליםGב- אי-שלילי. יתכנו דווקא , לאוl(e) ממשי אורך ישe . לקשתG=(V, E) וסופי מכוון גרף נתון

כל מבין מינימום מסלול משקל המחזיר אלגוריתם , תארk (|V| > k) טבעי ומספרi, jV צמתים שני בהינתןבדיוק. קשתותk פשוטים( שבהם דווקא )לאו המכוונים המסלולים

פתרון:

האלגוריתם: תאורלהלן: המתוארFind-k-LongPaths האלגוריתם את . נפעיל1

Find-k-LongPaths(G, k)1. for each vertex vV2. [v] 3. [i] 04. T {i}5. P 6. t 17. while ( t k )8. for each vertex vV[T]9. T T \ {v}10. for each edge (v, u) E11. if ( u P )12. [u] [v] + l[(v, u)]13. P P {u}14. else15. [u] min { [u], [v] + l[(v, u)] }16. T P17. P 18. t t + 1

הסבר:T –ה- האיטרציה בסוףt, Tבן מסלול אליהם שיש הצמתים כל את יכיל kמצומת קשתות, החל i.P –של מסלול בעלי הצמתים "צוברת" את האיטרציה שבמהלך זמנית צמתים קבוצת kמצומת קשתות i.

.T ל-P את נעתיק איטרציה כל בסוף מ-v צומת הוצאת )על-ידי אין-סופיות לולאות בגלל יעצר לא שהאלגוריתם מצב למנוע היאP של החיוניות

Tל- , והכנסתה9 בשורהT13 בשורה חזרה.) באחת המסלול משקל את , ונעדכןIב- שמתחילים קשתותk בני הקיימים המסלולים כל על נעבור סה"כ

מהאפשרויות:(.13-11 )שורות כעת הנבדק לצומתi מצומת קשתותk בן מסלול לראשונה כשנמצא.1(15-14 )שורות כעת הנבדק לצומת יותר קל מסלול כשנמצא.2

סיבוכיות: O(kאיטרציה: בכל הקשתות כל על נעבור – ביותר הגרוע במקרה איטרציות, כאשר k ישנן· m).

נכונות:טענה:.j ל-iמ- קשתותk בן מסלול קיים , אזיjT כלשהו צומת אם האלגוריתם בסוף

הוכחה::Tל- הצמתים כניסת סדר על באינדוקציה נוכיח

.3 שורה לפי עצמו. נכוןi הואiמ- קשתות0 במרחק שנמצא היחיד הצומתבסיס:.iמ- קשתותkמ- קטן במרחק שנמצאים הצמתים לכל נכונותנניח:

קשתות:k עבורנוכיח:.j ל-iמ- במסלולj לפני נצאת'j . נניחiמ- קשתותk בדיוק במרחק שנמצאj צומת קיים נניח

היוצאות הקשתות כל על נעבור -יתkה- האיטרציה במהלך – . לכןj'Tהאינדוקציה, הנחת על-פי.j לצומת אותנו , שתוביל(j', j) הקשת על , ובפרט'j מצומת

.P ל-j את נכניס – קשתותk בן במסלולjל- שהגענו הראשונה הפעם זוהי אם – כעת.Pב- כבר הוא אז – קודם אליו הגענו אם

-ית.kה- האיטרציה בסוףjT הצומת , ובפרטT ל-P את האיטרציה, נעתיק בסוף – מקרה בכלטענה:

Page 56: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

56

iמ- ביותר הקל המסלול את יכיל[j] האלגוריתם בסוף קשתות, אזיk בןj ל-iמ- מסלול קיים אם קשתות.k בןjל-

הוכחה:.j ל-iמ- קשתותk בן מסלול קיים.j ל-iמ- קשתותk בן ביותר הקל המסלול את מכיל אינו[j] האלגוריתם שבסוף בשלילה נניח

יותר. קצר אורך , בעלj ל-i בין קשתותk בן נוסף מסלול קיים – כלומר קשתות.k-1 בן מסלול קייםv ל-i בין , אזיv הינה זה במסלולj לפני הצומת נניח

.k-1, vTה- האיטרציה בסוף , אזיv ל-iמ- קשתותk-1 בן מסלול קיים שאם הראינו , שתוביל(v, j) הקשת את , ובפרטvמ- היוצאות הקשתות כל את -ית, נבדוקkה- באיטרציה כלומר.jל- אותנומקרים: שני יתכנו כעת

1.jP.[j] [v] + l[(v, j)] ואז

ל-iמ- קשתות, שנמצאk בן נוסף מסלול כל עבור זה במקרה jה- לשורה , נכנסjומכיוון , ישתנה. לא[j]- נתגלה כבר ביותר הקל שהמסלול

2.jP.[j] > [v] + l[(v, j)]ש: ביותר, ברור הקל המסלול על רצים שאנו מכיוון אבלביותר. הקל המסלול אורך את שיכיל , כך[j] את נעדכן – ולכן

מסקנה:.j ל-iמ- קשתותk בן ביותר הקל המסלול ארך הוא[j] האלגוריתם בסוף

Page 57: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

57

: שאלה צמתים שני בין המקסימלי כמרחק מוגדרT של הקשתות. הקוטר על אי-שליליים משקלות עם עץT=(V, E) יהי.O(n) בזמןT קדקודים( של2 בין ביותר כבד )מסלול הקוטר את המוצא אלגוריתם . הצעTב-

פתרון:

האלגוריתם: תאורלהלן: , המתואר*BFS אלגוריתם את כלשהוsV מקודקוד נריץ.1

BFS * (G, s) 1. for each vertex uV2. color[u] WHITE3. d[u] 4. [u] NIL5. color[s] GRAY6. d[s] 07. Q {s}8. while ( Q )9. u head[Q]10. for each vAdj[u]11. if ( color[v] = WHITE )12. d[v] d[u] + w(u, v)13. [v] u14. Enqueue (Q, v)15. Dequeue (Q)16. color[u] BLACK

מקסימלי.u ל-sמ- שהמרחק , כךu הקודקוד את נמצא.2מקסימלי. הואv ל-uמ- שהמרחק , כךv קודקוד , ונמצאu מ-*BFS נריץ.3.v ל-uמ- בעץ היחידי המסלול הוא והמסלול הקוטר יהיה זה מרחק.4

סיבוכיות:.O(m + n) "הרגיל:BFS של לזו זהה*BFS שסיבוכיות ברור.1.O(n)המינימום: הקדקודים, ומציאת כל על ריצה.2.O(m + n)מינימום: , ומציאת*BFS שוב.3

.O(n)קשיר: עץ למעשה הוא שהגרף , ומכיווןO(m + n)סה"כ:

נכונות:טענה:

קוטר. שהוא מסלול איזשהו על נמצאuממנו, רחוק הכי שנמצאu קודקוד ולכל שניקחv קודקוד לכלהוכחה:העצים. תתי של מגובה ישירותקדקודים: סוגי2 קיימים

ברור. – ואז – המסלול על שנמצאים קדקודים.1 המסלול על שנמצא קודקוד דרך לעבור חייבים שהם ברור ואז – המסלול על נמצאים שלא קדקודים.2

ביותר. הארוך – הקוטר באורך מסלול על הקדקודים אחד עם נפגשu ל-v מ-P המסלול של הקדקודים אחד שאם ברור

הקוטר. באורך מסלול של קצה להיות חייבu אזי

Page 58: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

58

שאלה: את המוצא אלגוריתם . תארu, vV קדקודים שני מעגלים, ונתונים וללא מכוון, ממושקלG=(V, E) גרף נתון

.O(m) בזמןv ל-uמ- ביותר הארוך המסלול

פתרון:

האלגוריתם: תאורעםDFS נפעיל כך המסלול משקל את תחזיר בגרף מסוים לקודקוד רקורסיבית קריאה שכל שינויים,

כך: . לשםv ועד ממנו המקסימלי.v ועד ממנו המקסימלי המסלול משקל את , שישמור- נוסף שדה קודקוד לכל נגדיר.1

.()-ב- זה שדה נאתחלהשינויים: , עםu התחלתי מקודקודDFS את נריץ.2

שלב- אותו , וזוכרתv ועד ממנו המקסימלי המסלול משקל את מחזירה רקורסיבית קריאה כלא.הקודקוד.

.0 הערך את שלוב- , ונשמור0 , נחזירvל- הגיעDFS אםב. ,()- מייד, ומחזירה מסתיימת רקורסיבית הקריאה שכנים, אזי לו , ואיןw לקודקוד הגיעDFS אםג.

(.v ל-wמ- מסלול קיים לא – כלומר רקורסיבית, אבל קריאהz על מפעילים לא , אזיz שחור שכן לו , וישw בקודקוד מטפלDFS אםד.

שלו.ה- בערך מתחשבים הוא שלוה- בשדהwל- שיהיה הערך , אזיw בקודקוד מטפלת מסוימת רקורסיבית קריאה כאשרה.

מבין: המקסימלי הערך) הקשת משקל בתוספתtל- רקורסיבית מקריאה שחזר : הערךw שלt לבן שכן לכל.1

w, t)..(w, t) הקשת משקל בתוספת[t]ב- שנמצא : הערךw שלt שחור שכן לכל.2הקודמת. הרקורסיבית לקריאה , ויוחזרw שלה- בשדה ישמר המחושב הערך

יער( בונה אחרים. )לא קדקודים על מחדש לעבוד מתחיל לאu, DFSב- הטיפול אחריו.מ- מסלול קיים לא , אזי[u] = - אם התשובה, כאשר הוא[u]ב- שנמצא הערך – שהוצעDFSה- בסיום.3u-ל v.

סיבוכיות:.O(n) לכאורה היא הסיבוכיות מעגלים, ולכן חסר הגרף כי שנתון לב נשים שהוא הקדקודים מספר , אזיu בקודקוד טיפול שסיים לאחר בקדקודים מטפל אינו שהוצעDFSשה- משום אבל.O(m) – עבר, כלומר עליהן הקשתות של הגודל כסדר הוא בהם טיפל, ולכן,O(1)ב- שמתבצעות פעולות הםDFSל_ שהוספנו השינויים כי לב נשים עוד

.O(m)סה"כ:

נכונות:אותו. נמצא– v ל-uמ- מסלול קיים שאם נובעDFS מנכונותטענה:

ל- ועד ממנו המקסימלי המסלול משקל הואה- בשדה הנמצא הערך– uמ- אליו להגיע שאפשר קודקוד לכלv.

הוכחה::f על באינדוקציה

– fמ- קטן שלהם הסיום שזמן הקדקודים לכל , אזיf הוא הסיום זמן מסוים לקודקוד אם האינדוקציה: הנחתכהלכה. מחושבים שלהםה- ערך

ברור. – אלה . במקריםuשכנים, ו- להם שאין קדקודים של המקרים כל האינדוקציה: בסיס.xב- הטיפול לפני מסתיים בהם הטיפול שכנים, אז ישx לקודקוד אם האינדוקציה: צעד

יותר. קטן שלהםfה- ערך – לכןכהלכה. מחושבים שלהםה- ערכי – האינדוקציה הנחת על-פי

שגם באלגוריתם, נובע הנזכרים הערכים מבין המקסימום את מחשביםx שעבור מהעובדה.v ל-xמ- המקסימלי המסלול משקל הואxל- המחושב הערך

Page 59: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

59

: שאלה : w הקשתות על משקל פונקצית , עםG=(V, E) מכוון סופי גרף נתון E ℝב- . איןGמעגלים מכוונים

שלילי. שמשקלם

לקודקודu מקודקוד המרחק את מסמן(u, v) , כאשר = *(v) {(u, v)} , נגדיר: vV קודקוד לכל

v. .v, (v, v) = 0 כל שעבור לב שים.O(m · n) בסיבוכיות הגרף קדקודי לכל*(v) את המוצא אלגוריתם הצע

פתרון:

האלגוריתם: תאורלהלן: , המתואר*Find אלגוריתם את נריץ

Find * (G) 1. for each vV2. *[v] 03. for each uV4. for each vAdj[u]5. if ( *[v] > *[u] + w(u, v) )6. *[v] *[u] + w(u, v)

סיבוכיות:2-1O(n).6-3O(m · n).

.O(m · n)סה"כ:

נכונות: לפחות.i באורך במסלולים מרחקים עבור נכון , האלגוריתםiה- האיטרציה בסיום כי באינדוקציה נוכיח

.(v, v)=0- הנתון . על-פי(v, v) ב-vV לכל , נתבונן0 באורך מסלולים עבורבדיקה:.2-1 בשורות שמתואר , כפי*[v] = 0 מתקיים: vV שלכל ברור לכן

.i איטרציה עבור נכונותנניח::i+1 איטרציה עבור נכונותנוכיח:

אליו. המובילות הקשתות של הקדקודים על-פי קודקוד כל מעודכןi+1ה- באיטרציהלחלוטין. ברורה העדכון אופן נכונות

לפחות.i+1 באורך למסלולים ומתייחס העדכון.i+1 עבור גם התנאי מתקיים – לכן

Page 60: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

60

: שאלה בזמן . מצאx, y, z V קדקודים שלושה הקשתות. נתונים על חיוביים משקלים עםG=(V, E) מכוון גרף נתונים

O(m log n)מ- ביותר קצר מסלולx-ל yדרך , העובר vפעמים. של זוגי מספר

פתרון:

האלגוריתם: תאור.x מקודקודG עלDijkstra נריץ.1ונסיים. המסלול את נדפיס– v דרך עובר לאy ל-xמ- המסלול אם.2:v קודקוד דרך עובר שלא ביותר קל מסלול למציאת.3

, כאשר:G'=(V', E') גרף ניצורא. V' = V \ {v}

E' = E \ { (v, u) | u V, (v, u)E } \ { (u, v) | uV, (v, u)E }.x מקודקוד'G עלDijkstra נריץב.עצמו(. המסלול את גם )נשמורd1 ב-y ל-xמ- ביותר הקל המסלול משקל את נשמורג.

פעמיים:v קודקוד דרך שעובר ביותר קל מסלול למציאת.4.v מקודקודG עלDijkstra נריץא.מינימלי. הוא(v, t) + w(t, v)שהסכום: מתקיים עבורוvt V קודקוד נמצאב.

הערות:. הוא משקלה , אזי(t, v) הקשת קיימת לא אם.12.(v, t)מ- ביותר הקל המסלול משקל הואv-ל t.

:d2עצמו( ב- המסלול את גם )נשמור ביותר הקל המסלול משקל את נשמורג.d2 = (x, v) + (v, t) + (v, y) + w(t, v)

נבדוק:.5.3 סעיף על-ידי שנמצא המסלול הוא המבוקש המסלול , אזd1 < d2 אםא..4 סעיף על-ידי הנמצא המסלול הוא המבוקש המסלול , אזd1 d2 אםב.כנדרש. מסלול אין , אזd1 = d2 = אםג.

סיבוכיות:1.Dijkstra:O(m log n)..O(n)המסלול: בדיקת.2.G':O(m + n) בנייתא..3

.Dijkstra:O(m log n)ב..O(m)והמסלול: ביותר הקל המשקל שמירתג.

.Dijkstra:O(m log n)א..4.O(m + n)והקדקודים: הקשתות על מעברב..O(m)והמסלול: ביותר הקל המשקל שמירתג.

.O(1)בדיקה:א..5.O(1)בדיקה:ב..O(1)בדיקה:ג..O(m log n)סה"כ:

נכונות: דרכו עובר פעמים של זוגי מספרv דרך שעובר מסלול חיוביים, הרי הםG הגרף קשתות ומשקלי מאחר כי נבחיןבדיוק. פעמיים או פעמים אפס

אנו1 סעיף על-פי ל-xמ- ביותר הקל המסלול את מוצאים yשל האלגוריתם מנכונות נובעת הדבר . נכונות Dijkstra.

שמצאנו , הריv קודקוד דרך כלל עובר ( לא1 בסעיף )שנמצאy ל-xמ- ביותר הקל המסלול אם2 סעיף על-פיזה, ומסיימים. מסלול מדפיסים - אנו פעמים. לפיכך )אפס( של זוגי מספרv דרך העובר ביותר קל מסלול

קודקוד דרך שעובר ביותר הקל המסלול , אזיG בגרף אחת פעםv קודקוד דרך עובר ביותר הקל המסלול אםvקודקוד דרך העובר המסלול מבין המינימלי המסלול הוא פעמים של זוגי מספר vהמסלול לבין פעמים אפס

פעמיים.v קודקוד דרך העוברזוגי(. – פעמים אפס – )כלומרv קודקוד דרך כלל עובר שלאy ל-xמ- ביותר קל מסלול מוצא3 סעיףלהלן: המתואר באופן פעמייםv קודקוד דרך שעובר ביותר קל מסלול מוצא4 סעיף בקודקוד ומסתיים המתחיל ביותר הקל אחת, למעגל פעםv דרך שעובר ביותר הקל המסלול את מחבר הוא

v.הלבן(. המסלול של העיקרון אותו על-פי – )כלומרDijkstra מנכונות נובעת זה עניין נכונות

Page 61: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

61

Page 62: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

62

שאלה:פשוט, לאG=(V, E) גרף נתון . תארu, vV קדקודים שני אי-שליליים, ונתונים במשקלים מכוון, וממושקל

.v ל-u בין ביותר הקל הזוגי המסלול את המוצא אלגוריתם

פתרון:

האלגוריתם: תאורלהלן: , המתואר*Dijkstra , אתu מקודקוד , החלG על נריץ.1

Dijkstra * (G, w, s) 1. for each vertex vV2. odd[v] 3. even[v] 4. -odd[v] NIL5. -even[v] NIL6. even[v] 07. S 8. Q V9. while ( Q )10. u ExtractMin(Q)11. S S {u}12. for each vAdj[u]13. if ( odd[v] > even[u] + w(u, v) )14. odd[v] even[u] + w(u, v)15. -odd[v] u16. if ( even[v] > odd[u] + w(u, v) )17. even[v] odd[u] + w(u, v)18. -even[v] u

– עצמו המסלול למציאת.2--even - - אי-זוגי, לסירוגין, כלומר: , זוגיה- שדות על (, ונרוץ-even) הזוגי מה-v מקודקוד נתחיל

odd.

סיבוכיות:.O(m log n) "הרגיל":Dijkstra של לזו זהה*Dijkstra של שהסיבוכיות ברור.1.O(m)האבות: על ריצה.2

.O(m log n)סה"כ:

נכונות:.Dijkstra מנכונות ישירות נובעת ביותר הקל המסלול נכונות הנכונות, ובפרט עיקר ,-odd) האי-זוגיים (, והשדות-even, even) הזוגיים השדות ותחזוק עדכון אופן על-פי ברור הדבר – לזוגיות אשרoddאם עבדנו אם – כלומר – אתם שעבדנו לאלה ההפכיים המשתנים את מעדכנים אנו פעם בכל (, שכן

ה-"אי-זוגיים", ולהפך. את נעדכן–ה-"זוגיים"

Page 63: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

63

שאלה: קל מסלול המוצא אלגוריתם . תארeE , וקשתu, vV צמתים , שניG=(V, E) ממושקל מכוון לא גרף נתון

.eב- , המשתמשv ל-uמ- ביותר

פתרון:

האלגוריתם: תאור.G בגרף שליליים מעגלים שאין נניח

.e=(w1, w2)נוחות: נסמן, מטעמי.u מקור מקודקוד ,G עלDijkstra של האלגוריתם את נריץ.1.d[u, w2] כ-d[w2] , ואתd[u, w1] כ-d[w1] את נשמור.2.v מקור , מקודקודG עלDijkstra של האלגוריתם את נריץ.3.d[v, w2] כ-d[w2] , ואתd[v, w1] כ-d[w1] את נשמור.4d1 = d[u, w1] + w(e) + d[v, w2]נסכום:.5

d2 = d[u, w2] + w(e) + d[v, w1]- נבדוק.6

,w1 לקודקודu מקודקוד1 בסעיףDijkstra על-פי שנמצא המסלול הוא הנדרש המסלול:d 1 < d2 אם . )למעשהu לקודקודw2 מקודקוד3 בסעיףDijkstra על-פי שנמצא , והמסלולe הקשתמכוון(. לא הגרף , אךw2 ל-uמ- המסלול את מצאנו

,w2 לקודקודu מקודקוד1 בסעיףDijkstra על-פי שנמצא המסלול הוא הנדרש המסלולאחרת: . )למעשהu לקודקודw1 מקודקוד3 בסעיףDijkstra על-פי שנמצא , והמסלולe הקשתמכוון(. לא הגרף , אךw1 ל-uמ- המסלול את מצאנו

סיבוכיות:1.Dijkstra:O(m log n)..O(1)הצבה:.23.Dijkstra:O(m log n)..O(1)הצבה:.4.O(1)אריתמטית: פעולה.5.O(1)השוואה:.6

נכונות:.G בגרף הקדקודים שאר לכל יחיד מקור מקודקוד ביותר קל מסלול מוצאDijkstra של האלגוריתם

.w2 ל-u, ומ-w1 ל-uמ- ביותר הקל המסלול היתר, את , נמצא, ביןu מקור מקודקודDijkstra כשנריץ.w2 ל-u, ומ-w1 ל-vמ- ביותר הקל המסלול היתר, את , נמצא, ביןv מקור מקודקודDijkstra כשנריץ

המינימלי. יהיה המסלול על שמעבר אפשרויות, כך שתי לבדוק יש כעת.eב- , המשתמשv ל-uמ- ביותר הקל המסלול הואv⇝w1⇝w2⇝u הכלליות, שהמסלול הגבלת נניח, בלי

.e דרך יותר, העובר אחר, קצר מסלול בשלילה, שקיים נניח.v ל-w2מ- ביותר הקל והמסלולw1 ל-uמ- ביותר הקל המסלול שזהו נקבל – כלומר

.Dijkstra של למינימליות סתירה זוהי אבל

Page 64: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

64

שאלה:שונים. המשקלים כל כי הצלעות. נתון על משקלים מכוון, קשיר, עם לא גרףG=(V, E) יהי

מסוים. במעגל מקסימלית היא אם רעהמסוים, ו- בחתך מינימלית היא אם טובה נקראתe צלע.רעה או טובה היא האם , קובעeE צלע בהינתן לינארי, אשר אלגוריתם תאר

פתרון:

האלגוריתם: תאור.e=(x, y) הקשת את נסמןהשינויים: , עםx מקודקוד , החלDFS נריץהקשתות(. מקבוצת אותה נוריד )פשוטy ל-xמ- להגיע ניתן לאאזי– y לקודקוד נגיע אם שייכתe שהקשת מעגל סגרנו היאe האם בדיקה לו. נבצע המקסימלית הקשת

(.ה- שדה על-פי לרוץ במעגל. )ניתןרעה. היא אזי – המקסימלית היאe אםטובה. היאe אזי– e את המכיל מעגל מקסימלית, וקיים אינהe אםשציינו. הבדיקות את נבצע– yל- נגיע אם – שוב , כאשרDFSה- בריצת נמשיך – לא אם

סיבוכיות:O(m + n)ב- פעם – פעמים הקשתות על הולכים מקסימום , כיDFSהמקסימלית. הקשת בבדיקת , ופעם

נכנות:הגדרה. על-פי – טובה קשת היאe הרי – בו המקסימלית הקשת היאe, ו-e עם שנסגר מעגל גילינו שאם ברור

המקשרות הקשתות ששתי כך חתך ליצור ניתן , אזיe את המכיל מעגל וקיים המקסימלית אינהe אם – אחרתוהקשתe הן החתך על-ידי הנוצרות הקבוצות שתי בין היאeש- חתך קיים – שמצאנו. כלומר המקסימלית

טובה. היאe בו, ולכן המינימלית

Page 65: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

65

שאלה: .V[H] = V[G]ש: כךG של גרף תתH הצלעות. יהי על חיוביים משקלים עם קשיר מכוון לא גרףG=(V, E) יהי

Hל- שהוספתה אפשרי, כך מינימלי משקל בעלתG של צלעות של קבוצה תת המוצא יעיל אלגוריתם תארלקשיר. אותו הופכת

פתרון:

האלגוריתם: תאור:E[H] = אם – נבדוק.1

הנדרשת, ונסיים. הקבוצה תת יהא זה מינימלי. ועץ פורש עץ למציאתKruskal של האלגוריתם את נריץ:E[H] כאשר: כלומר – אחרת.2

, כאשר:G'=(V, E')חדש: גרף נסמןE' = E[G] \ E[H]

את'G על ונריץ למציאתKruskal של האלגוריתם קבוצת תהא שתתקבל מינימלי. הקבוצה פורש עץ הנדרשת. הקשתות

סיבוכיות:.Kruskal:O(m log m)ו- בדיקה.12.Kruskal:O(m log m).

.O(m log m)סה"כ:

נכונות: : E[H] = כאשר

כל את קשיר, ומכיל העץ לקשיר, כיH את לבטח תהפוך מינימלי פורש עץ של . הוספתוHב- קשתות קיימות לא.Kruskal של המינימליות מנכונות ישירות נובעת . המינימליותH ושלG של הקדקודים

: E[H] כאשר.E[H]ל- שייכת אינהE[G] \ E[H] שהקבוצה ברור אזי

H את הופכת שההוספה מינימלי, כך משקל בעלותG של צלעות של קבוצה תת תמצא'G עלKruskal הפעלתהמינימלי(, ועץ, כידוע, קשיר. דווקא )שאינו עץ יווצר לקשיר, כי

Page 66: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

66

שאלה: . תארs, t V קדקודים שני נתונים הקשתות. עוד על משקלים עם מעגלים וחסר מכוון, G=(V, E) גרף נתון

.t ל-sמ- ביותר הקצרה המסילה את הקלט, המוצא באורך לינארי אלגוריתם

פתרון:

האלגוריתם: תאור. G'=(V, E') הממוין הגרף את . נסמןG עלTopSort נריץ.1

.s מקודקוד יופעלTopSortב- המופעלDFSהערה: ה-, כאשר:'Gל- ביחסGT=(V, ET) הפוך גרף נבנה.2

ET = { (u, v) | (v, u) E[G'] }

להלן: , כמתוארt מקודקוד , החלCalculateWeight השגרה אתGT על נריץ.3Calculate(G T , t)

1. for i 1 to t2. [vi] 3. [vi] NIL4. [t] 05. for i t downto 16. for each vertex uAdj[vi]7. if ( [u] > [vi] + w(vi, u) )8. [u] [vi] + w(vi, u)9. [u] vi

.[s]ב- שנמצא הערך הוא המבוקש המסלול משקל.4.- הבנים שדה , לפיs מקודקוד מעבר על-ידי ימצא עצמו המסלול

סיבוכיות:1.TopSort:O(m + n)..GT:O(m + n) בניית.23.CalculateWeight:O(m + n)..O(m)המסלול: מציאת.4

.O(m + n)סה"כ:

נכונות:.TopSort אלגוריתם את להפעיל ניתן – מעגלים חסר שהגרף מכיוון

יותר. אליו נחזור לא – מסוים בקודקוד טיפול שלכשנסיים יודעים אנוTopSort ומנכונות מתכונותניתן– CalculateWeight השגרה כתובה זו עובדה בסיס שעל מכיוון עדכון אופן בנכונותה, שכן לראות ישירות

עדכון. מתבצע – מהנוכחי יותר קטן מצטבר משקל קיים אם – מאליו - ברור- המשקל שדה ותחזוק רבים מאלגוריתמים לנו , המוכר- האב לשדה בהפוך )שהוא- הבנים שדה תחזוק אופן ברור גם כך

אחרים(.

Page 67: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

67

שאלה: כסכום מוגדר מסלול של . המחירvV קודקוד לכלcost[v] 0 אי-שלילי מחיר עםG=(V, E) מכוון גרף נתון

, לקודקודs נתון מקודקוד ביותר זול מסלול וסיום(. מצא התחלה קדקודי )כולל המסלול על הקדקודים מחירי.t נתון

פתרון:

האלגוריתם: תאור:Dijkstra מעין נבצעאליו. עד המצטבר המינימלי המחיר את שיכיל שדה נשמור קודקוד לכל

,c[v] = min{c[v], c[u]+cost[v] }שיהיה: המצטבר, כך המחיר שדה את לשכניו, ונעדכן , נלךs מקודקוד נתחיל.u מקודקודv לקודקוד הגענו כאשר

.[v] = u, נרשום: c[v] = c[u]+cost[v] אם.c[v] המינימלי הערך את נוציא פעם בכל קדימויות, שבו תור , נתחזקDijkstraב- כמו, כולל.tל- שנגיע עד נעשה כך

.t ל-sמ- בכלל מסלול קיים , לאtל- הגענו לא שאם ברור

סיבוכיות:.Dijkstra:O(m log n) של כמו

נכונות: – אבותיו שחזור בו, על-ידי לטפל שסיימנו קודקוד כל– Dijkstra של הנכונות הוכחת של האופן באותו בדיוקאליו. ועדs ממקור ביותר הזול המסלול את נקבל

הערה:בפעםtל- הגענו כאשר מתחילים אנו שתמיד הקדקודים, משום שאר את לבדוק יותר צורך הראשונה, אין

להגיע היה שניתן ביותר הקטן הערך עם , הגענוtל- הגענו ביותר, ולכן, אם הקטן הערך בעל מהקודקודחיוביים(. )המחירים

Page 68: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

68

שאלה: ללאO(n3) בזמן . מצאG של הצמתים כל בין מרחקים מכוון, ממושקל, ומטריצת לאG=(V, E) גרף נתוניםצמתים. זוג כל בין ביותר קלים מסלוליםFloyd-Warshall באלגוריתם שימוש

פתרון:

ייסוד: הנחותהבא: באופןW משקלים מטריצת על-ידי מיוצגGש- נניח.1

W[i, i] = 0א..j לקודקודi קודקוד בין קשת קיימת , אם = W[i j] (i, j) הקשת משקלב..j לקודקודi קודקוד בין הקשת קיימת לא , אםW[i, j] = ג.

.D המטריצה היא ביותר הקצרים המרחקים שמטריצת נניח.2

האלגוריתם: תאורהבא: הקודמים, באופן - מטריצת מטריצה נבנה.1

for each i, jVfor k 1 to n

if (D[i, k] + W[k, j] == D[i, j] ) [i, j] k

breakשבנינו: המטריצה את נעדכן.2

for each i, jVif ( ( i=j ) or ( D[i, j] = ) )

[i, j] NILלהלן: , כמתוארPrintAllPairsShortestPath(, i, j) בשגרה משתמשיםi, j המסלולים, לכל את להדפיס כדי.3

PrintAllPairsShortestPath( , i, j) 1. if ( i = j )2. print j3. else4. if ( [i, j] = NIL )5. print “no path from” i “to” j “exists”6. else7. PrintAllPairsShortestPath(, i, [i, j])8. print j

סיבוכיות:: המטריצה בניית.1

.:O(n3) המטריצה לכל , ולכןO(n)זמן: דרוש במטריצה[i, j] איבר לכל.:O(n2) המטריצה עדכון.23.PrintAllParisShortestPath:O(m + n).

.O(n3)סה"כ:

נכונות::G D[i, j] = D[i, k] + W[k, j] ב-j ל-iמ- ביותר קצר במסלולj של הקודם הואk כי נוכיח , מפניD[i, j] = D[i, k] + W[k, j] , אזיG ב-j ל-iמ- ביותר קצר במסלולj של הקודם הואk אם : כיוון

Gב- ביותר קצר מסלול בעצמו הואG בגרף ביותר קצר מסלול של המסלול שתתD[i, j]ש: כךD[i, j] = D[i, k] + W[k, j] שיקייםk מצאנו אם : כיוון ב- שקיים אומר , זהGמסלול

.j ל-iמ- ביותר קצר במסלולj של הקודם הואk , ולכן(k, j) הקשת את , המכילj ל-iמ- ביותר קצר.2 בסעיףD[i, j] = NILההצבה: את מבצע האלגוריתם , ולכןj ל-iמ- מסלולGב- קיים לא אזיD[i, j] = אם

(.153 , בעמוד26 בפרק בספר )המצויינתPrintAllPairsShortestPath השגרה נכונות את להוכיח לחלוטין מיותר

Page 69: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

69

שאלה: , ושניUV צמתים של קבוצה תת הקשתות, ונתונה על חיוביים משקלים עם מכוון לאG=(V, E) גרף נתוניםש: כךv ל-u מ-P מסלול מצאu, vV צמתים

.Uמ- אחת בצומת לפחות משתמשPא.א'. סעיף את המקיימים המסלולים כל הין מינימלי הואP של המשקלב.

פתרון:

האלגוריתם: תאור ב:wV לכלuמ- שנמצאו המינימליים המרחקים את , ונסמןu מקודקודDijkstra של האלגוריתם את נריץ.1

d1[w]. ב:wV לכלvמ- שנמצאו המינימליים המרחקים את , ונסמןv מקודקודDijkstra של האלגוריתם את נריץ.2

d2[w]. המקיים:u'U נבחר.3

{d1[u'] + d2[u']{ d1[u'] + d2[u'] =

.u⇝u'⇝vהוא: המבוקש המסלול.4

סיבוכיות:1.Dijkstra:O(m log n).2.Dijkstra:O(m log n)..O(n)המינימום: מציאת.3

.O(m log n)אז: קשירG , ואםO(n + m log n)סה"כ:

נכונות: המקיים:u'w'U קיים כי בשלילה נניח

(u, w') + (w', v) < (u, u') + (u', v)(.'w את ולא'u קודקוד את בחרנו , שבו3 לסעיף סתירה ישר מקבלים אנוDijkstra מנכונות אזי

Page 70: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

70

: שאלהמכוון, עםG=(V, E) גרף על-ידי המתוארת כבישים רשת נתונה הקשתות. משקל על אי-שליליים משקלים

.v לעירu מעיר המרחק את מציין(u, v) הקשת עם משאית מטר, וגובה2 הוא מטען ללא משאית הבאים: גובה באילוצים בכבישים נוסעת מטען עם משאית

מטר.4 הוא מטען המטען, כל את בהם מורידה בהם, היא עוברת מטען עם משאית שאם סוגים: צמתים לשני מסוגיםV הצמתיםבמשאית. המטען את משנים רגילים, שאינם וצמתים

)משאית גשר בהם שאין מטר, וקשתות3 שגובהו גשר בהן שיש סוגים: קשתות לשני הן אף מסווגותE הקשתותגשר(. יש בה בקשר לעבור יכולה לא מטען עם

ביותר( )הקל ביותר הקצר המסלול משקל את רגילים, מוצא צמתיםs, tV צמתים אלגוריתם, שבהינתן הצע.sמ- לדרכה יוצאת המשאית , כאשרt ל-sמ-

פתרון:

האלגוריתם: תאורהגשרים. ללא הקשתות קבוצת– 'Eנגדיר: המטען. את פורקת המשאית בהם הקדקודים קבוצת– 'Vנגדיר:

.G'=(V, E') גרף ניצור.1.0 שמשקלה , בקשתG שב-v לקודקוד'G מ-v קודקוד את , נחבר'vV קודקוד לכל.2.'G גרף עלs מ-Dijkstra של האלגוריתם את נריץ.3

סיבוכיות:.O(m + n)הגרף: יצירת.1.O(n)הקודקודים: על מעבר.2.Dijkstra:O(m log n) של האלגוריתם.3

.O(m log n)סה"כ:

נכונות: הצמתים כל את מכילG גרף – בנייה מטען. על-פי ללא היא אם הצמתים ובכל הקשתות בכל לנוע תוכל משאית

הקשתות. כל ואת פי מטענה. על את תפרוק היא בו לקודקוד שתגיע גשרים, עד ללא בקשתות רק לנוע יכולה מטען עם משאית

הגשרים. ללא הקשתות את רק מכיל'G גרף – בנייה)בקשתG לגרף "מועברת" ישירות מטענה, המשאית את פורקת המשאית , שבו'Gב- קודקוד כמו-כן, לכל

(.0 משקל בעלת )כיG ו-'G גרף את המחברת מהקשת מתעלם שהוא כדי מינימלי, תוך מסלול לנו ימצאDijkstra של האלגוריתם

(.0 משקל בעלת היא

Page 71: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

71

: שאלה סללום. המסלול מסלול במורד להחליק רצה סקי. הוא לחופשת החורף סמסטר בתום נסע זיגזג פרופסור

לרוחבו. דגלים של שורות יש המסלול , ובמורדt המסומנת בנקודה , מסתייםs המסומנת בנקודה מתחיל החופשה, ההחלקה. בתחילת כיוון את הדגלים, ומשנים אחד את עוקפים שורה הבא: בכל באופן מחליקים = הנתיב )אורך האפשר ככל ארוך בנתיב – האפשר, כלומר ככל מתון החלקה בנתיב מעוניין זיגזג פרופסור

בנתיב – האפשר, כלומר ככל תלול במסלול מעוניין החופשה, הוא השורות(. בסוף בין הקטעים מרחקי סכוםהללו. הנתיבים לחישוב יעיל אלגוריתם האפשר. תאר ככל קצר

פתרון:

האלגוריתם: תאור.(x, y) קואורדינטות על-ידי נתונים הדגלים מיקומי כי נניח

.y קואורדינטה אותה את יש השורה באותה כן, שלדגלים לב, אם נשיםאחר. דגל של משמאלו מסוים, או לדגל מימין נמצא דגל איזה להבחין קל זה כן, באופן כמו

, כאשר:G=(V, E) גרף נבנה.1 כל עבור אלו קדקודים2. 2 כפול בשורה הדגלים כמספר קדקודים נבנה שורה לכלהקדקודים: קבוצת

שמאל. מצד או ימין מצד זה לדגל הגענו האם יציינו דגלבודדים. קדקודיםt ו-s כן, יהיו כמו

לקודקוד רק קשת נשלח דגל כל שעבור לב הראשונה. נשים בשורה הדגלים לכלsמ-הקשתות: קבוצת על זאת, בהסתמך לעשות משמאל. )קל או מימין – הנכון, כלומר ההגעה לכיוון המתאים

(.(x, y) הקואורדינטות ,i+1ה- בשורה לקודקודים קשתות אליו(, נחבר ההגעה דגל, וכיוון )המציין קודקוד מכל

(.i שבשורה מהקודקוד ההפוך )בכיוון אליהם להגיע שניתן לקדקודים רק שנגיע כךקדקודים. אותם של ההגעה בכיוון נמצאt האחרונה, אשר בשורה מקדקודים

.v = w(e) לקודקודu קודקוד בין ש: המרחק ממושקלת, כך , תהיהe=(u, v) קשת כל.t ל-s, מ-G עלDijkstra אלגוריתם את ביותר(, נריץ )הקצר ביותר התלול המסלול למציאת.2 ל-s מ-G להלן, על , המתואר*Dijkstra אלגוריתם את ביותר(, נריץ )הארוך ביותר המתון המסלול למציאת.3

t:Dijkstra * (G, w, s)

1. for each vV2. d[v] -3. [v] NIL4. d[s] 05. S 6. Q V7. while ( Q )8. u ExtMax(Q)9. S S {u}10. for each vAdj[u]11. if ( d[v] < d[u] + w(u, v) )12. d[v] d[u] + w(u, v)13. [v] u

סיבוכיות:ו-m לפי סיבוכיות ננתח והשורות. אנו הדגלים הנו, למעשה, מספר הקלט nנחשב המוכר, כאשר , האופן :n ו-m את תחילה

n:שקיימות נניח iשורה דגלים, ובכל של שורות kj:דגלים. לכן n = 2 * kj + 2

m:ה- בשורה מסוים מדגלjה- בשורה מהדגלים לחלק רק להחליק , ניתןj+1:ולכן .

m = k1 + ki + kj · kj+1

ננתח: כעת.G:O(m + n) הגרף בניית.12.Dijkstra O(m log n).3.Dijkstra*:O(m log n).

.O(m log n)סה"כ:

i

j=1

i-1

j=1

Page 72: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

72

נכונות:ל-sמ- בו מסלול שכל באופן נבנה שהגרף לראות קל tהינו ולאופן להגבלות חוקי, בהתאם החלקה מסלול

נובעת הנכונות הוכחת שאר )מרחקים(, ולכן חיוביים הם שהמשקלים לב בשאלה. נשים שתואר ההחלקה.Dijkstra מנכונות ישירות

Page 73: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

73

: שאלה נסיעה זעיר, המאפשר דלק מיכל שלו הבחינות. למכונית תקופת בתום באילת לחופשה נוסע פרופ' שושני

קילומטרים30 למרחק מכוון גרף בצורת היא דלק. המפה ותחנות כבישים של מדויקת מפה בלבד. בידיו דלק. עליך תחנות יש מהצמתים חלק גבי מרחקים, ועל הם כבישים, המשקלות הן הקשתות וממושקל, כאשר

באורך נסיעה מסלול למציאת יעיל הגרפים( אלגוריתם בתורת באלגוריתמים בקיא )שאינו לפרופ' שושני לספק דלק תחנת בין קילומטרים30מ- יותר יעבור לא שהמסלול בגרף(, באופן צמתים )שני לאילת מחיפה מינימלי

ריק מיכל עם ליעדו להגיע מלא, ומוכן מיכל עם מסעו את מתחיל שפרופ' שושני להניח לבאה. )ניתן אחת

פתרון:

האלגוריתם: תאור מכללהלן, , המתוארDijkstra*(G, w, s) האלגוריתם אתG על , ונריץGכ- פרופ' שושני של מפתו את נסמן.1

:vV קודקוד

Dijkstra * (G, w, s) b. for each vVc. d[s, v] d. [s, v] NILe. d[s, s] 0f. S g. Q Vh. while ( Q )i. u ExtractMin(Q)j. S S {u}k. for each vAdj[u]l. if ( d[s, v] > d[s, u] + w(u, v) )

m. d[s, v] d[s, u] + w(u, v)n. [s, v] u

, כאשר:G' = (V', E') גרף נבנה.2V'- הדלק. תחנות כל חיפה, אילת, ואת את המייצגים הצמתיםE'- ומכוונת ממושקלת קשת תהיה צמתים זוג כל בין (u, v)מ- המסלול של המרחק , אם"םu-ל v

קילומטרים.30 היותר לכל הוא,u) הקשת - כלומר הכיוונים בשני קשתות קיימות צמתים זוג כל בין זו הגדרה על-פי v),

.(v, u) והקשת היעד צומת בלבד, ואת יוצאות קשתות יהיו לה )חיפה(, אשר המקור צומת את זה מכלל נוציא

בלבד. נכנסות קשתות יהיו לה )אילת(, אשר.v ל-uמ- המרחק את ייצג הקשתות משקל

.'G עלDijkstra של האלגוריתם את נריץ.3

סיבוכיות:O(n · m log n)קודקוד: כל על זאת מבצעים , ואנוDijkstra של לזו זהה*Dijkstra שסיבוכיות ברור.1.G':O(m + n) בניית.23.Dijkstra:O(m log n).

O(nהיא: הסיבוכיות כשסה" כיוון(, הרי בכל )אחת קשתות2 היותר לכל יהיו צמתים זוג כל שבין מכיווןסה"כ: · m log n).

נכונות: "קריטיים" עוקבים צמתים זוג בין פרופ' שושני שעובר דלק. המרחק תחנות של סדרה דרך עובר טוב מסלול

ק"מ. 30דלק( תחנת שהיא צומת )מקור, יעד, או קודקוד , מכל*Dijkstra אלגוריתם את נריץ כך ביותר. לשם הקל המסלול את למצוא יש שכזה צמתים זוג כל בין "הרגיל".Dijkstra של האלגוריתם של מנכונותו ישירות נובעת . הנכונותVב-

בניה. , על-פי30 היותר לכל הוא צמתים זוג כל בין המרחק'G שניצור בגרף)אילת(. היעד )חיפה( לצומת המקור מצומת ביותר הקל המסלול את למצוא הוא שנותר כל

מבצעDijkstra של האלגוריתם של האלגוריתם של מנכונותו ישירות נובעת בנאמנות. הנכונות זו משימה Dijkstra.

Page 74: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

74

Page 75: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

75

: ה שאל w(e)הערך: את<p=<u, e1, ..., ek, v מסלול של בקבוק צוואר מכוון, ממושקל. נגדיר לאG=(V, E) גרף נתון

b(p) = כאשר , w(e)הקשת משקל הוא eצמתים שני . בהינתן u, vבזמן , מצא O(m log n)מ- מסלולu-ל v

מקסימלי. בקבוק צוואר בעל

פתרון:

האלגוריתם: תאור.w*(e) = -w(e) מתקיים: e E שלכל , כךG לגרף*w חדשה משקלים פונקצית בנה.1 החדשה המשקלים פונקצית עםG הגרף עלPrim של מינימאלי פורש עץ למציאת אלגוריתם את הפעל.2

w*את , וקבע uהעץ. שרש להיותל-uמ- המסלול.3 vבעץ Tשנוצר – )ובעצם להדפיסו המבוקש. כדי המסלול , הוא2 מסעיף כתוצאה

)האב(. п[v] השדה ( באמצעותu )קודקוד השורש לכיוון ונלךv מקודקוד לזהותו(, נתחיל

סיבוכיות:.O(m)המשקלים: פונקצית שינוי.1.Prim: O(m log n) של האלגוריתם הפעלת.2.O(n)המסלול: והדפסת זיהוי.3

.O(m log n) סה"כ:

נכונות: הפונקציה להיות אותה המשקלים, וקבענו פונקצית את ששינינו מינימלי. נזכור עץ פורשPrim של האלגוריתם

עםG הגרף עלPrim של האלגוריתם שהפעלת שברור , הריx > -y-, אזי: x < y שאם שברור הנגדית. מכיוון.w המקורית המשקלים לפונקצית , ביחסT מקסימלי פורש עץ , יוצר*w החדשה המשקלים פונקצית

מקסימלי: בקבוק צוואר , ישG ב-v ל-u מ-T ב-p מסלול לכל כי נוכיח כעת.p של בקבוק צווארe є p . תהיv ל-u מ-Tב- מסלולp יהי.'p של בקבוק צוואר 'e . תהיG ב-v ל-uמ- מסלול'p ≠ p יהי

.w(e') > w(e) להתקיים יכול לא כי נראה. w(e') > w(e) מתקיים כי בשלילה נניח

p-ו p'מ- שונים מסלולים הםu-ל v-ב G. ב- אחד פשוט מעגל לפחות יוצרים הםG.ו-p על-ידי שנוצר פשוט מעגל p'-בGלמסלול השייכות קשתות מכיל pושלא( (, וקשתות'p למסלול שייכות

(.p למסלול שייכות )ושלא'p ל- השייכות(:p של הבקבוק )צווארe בקשת נתבונן

המעגלים: לאחד שייכת e אםשייכת. היא שלו במעגל מינימלית קשת היאe אז

.Tל- שייכת , ושלאw(e)מ- הגדול משקל ( בעלת'pל- שייכתk) במעגלk קשת כן, קיימת כמו.T העץ משל גדול משקל בעל'T עץ , ונקבלe קשת עםk קשת את נחליף

מקסימלי. הואTש- לנתון סתירה

מעגל: לאף שייכת לא e אם.'e є p . כלומר'p ו-p למסלולים משותפת קשת היאe אזי

.'p של הבקבוק צוואר היא'eש- לנתון סתירה

. w (e') ≤ w(e)שגויה. w (e') > w(e) כי ההנחה – מכאן

Page 76: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

76

: שאלה פורש עץO(m log n) בזמן . מצאUV קדקודים קבוצת מכוון, ממושקל. נתונה קשיר, לאG = (V, E) גרף נתון

זה. עץ של בעלים יהיוU שקדקודי כך מינימלי

פתרון:

האלגוריתם: תאור.E' = {(u, v) | uU vU}, ו- V' = V\U, כאשר: G' = (V', E') חדש גרף ניצור.1.Prim של באלגוריתם שימוש כדי , תוך'G הגרף עבורT' = (V', E'T) מינימלי פורש עץ נבנה.2כנדרש. מינימלי פורש עץ אין , אזיE'T| |V'|-1| אם.3.'Tל- אותה . נוסיףw(e)= w(u, t) המקיימת: e=(u, v) קשת תהיuU לכל.4

מינימלי פורש עץ אין אזי– V\Uל- השייך לקודקודu את המחברת קשת אף קיימת לא עבורוuU קיים אםכנדרש.

.'T הוא הנדרש העץ.5

סיבוכיות:.G': O(m) בניית.1.Prim: O(m log n) של האלגוריתם הפעלת.2.O(1)תנאי: בדיקת.3.O(m)הקשתות: על מעבר.4

.O(m log n) סה"כ:

נכונות:.'G של מינימלי פורש עץ הוא'T כי נובעPrim של האלגוריתם מנכונות

|E'T| אם – . לכןE'T| = |V'|-1| מתקיים: 'T משפט, בעץ על-פי |V'|-1אזי , T'פורש עץ אין קשיר, ולכן אינו כנדרש. מינימלי

החתך. חוקיות על שומרותE'T . הקשתות(U, V\U) חתך נגדירהבאים: לתהליכים שקול באלגוריתם4 סעיף

,e=(u קלה קשת הוספתא. v), uU, vV\Uהחתך. הקשת את , החוצה eבטוחה )על-פיT עבור משפט(.

זה. חתך חוקיות על שומרותEt{e}. הקשתות(U\{u}, (V\U){u})חדש: חתך הגדרתב. T עבור בטוחהe החתך. הקשת את , החוצהe'=(u', v'), u'U\{u}, v'(V\U){u} קלה קשת הוספתג.

משפט(. )על-פילעיל. המתואר באופן קשתות והוספת חתכים הגדרתד.

האלגוריתם. נכונות נובעת שתואר לתהליך4 סעיף של משקילות

mintU

Page 77: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

77

: שאלה עץ . מצאe=(u, v) קשתGמ- בתוכו. מורידיםT מינימלי פורש , ועץG וממושקל מכוון, קשיר לא גרף נתונים. O(m) , בזמן G' = G \ e בגרף מינימלי פורש

פתרון:

האלגוריתם: תאור.'G של המינימלי הפורש העץ גם הואT אזיeT אם.1

אחרת:2.T \ {e}עצים.2מ- המורכב יער הוא

.v הוא ששורשו העץ אתTv:נסמןTu הוא ששורשו העץ את u.

.T \ {e} עלv מקודקודBFS נפעיל.T \ {e} עלu מקודקוד*BFS נפעיל

BFS*הנו "הרגיל", פרטBFSה- לאלגוריתם לחלוטין הזהה אלגוריתם הקדקודים את צובע שהוא לכך בשחור. במקום באדום

ו- iשקדקודיה, מינימלי, וכן , שמשקלהe' = (i, j) קשת , ונחפש'Gב- הקשתות כל על נעבור.3 jצבועים שחור(. והשני אדום )האחד שונים בצבעים

.'Gב- פורש עץ קיים לא – כזו קשת נמצאת לא אם.T' = Tv Tu {e'}הוא: 'G ב- המינימלי הפורש העץ אזי – כזו קשת קיימת אם

סיבוכיות:.O(m)העץ: קשתות כל בדיקת.1.O(m) – קשיר שהגרף , ומכיווןBFS: O(m + n) הרצת.2

.O(m)– קשיר שהגרף , ומכיווןBFS*: O(m + n) הרצת .G': O(m)ב- הקשתות כל בדיקת.3

.O(m) סה"כ:

נכונות:.'G של המינימלי הפורש העץ גם הואT אזיeT שאם ברור

.(S, V\S)( = Tv , קדקודיTu החתך: )קדקודי את מגדירהe=(u, v) הקשת הוצאת.A = { e E(T) | (e Tv) (e Tu) }. כלומר: Tvל- אוTuל- השייכות הקשתות קבוצתAנגדיר:

.'G של כלשהו מינימלי פורש לעץ השייכות קשתות קבוצת היאAש- ברור לעץ השייכות קשתות קבוצת היאA –לאלגוריתמים"( "מבוא בספר110 בעמוד24.1 )משפט משפט פי על

היא זה חתך , החוצהe' = (i, j) הקלה הקשת (S, V\S) החתך את , ומכבדת'G של כלשהו מינימלי פורש.A עבור בטוחה קשת

אדום( או שחור – שונים בצבעים צבועים )שקדקודיהן זרים רכיבים בין מחברתAל- 'e הבטוחה הקשת הוספת A לאחר( הוספת e' מכילה ) n-1קשתות, והגרף GA = (V, A)מעגלים. חסר הנו שב- הקשתותAשל המינימלי הפורש העץ את מהוות G': T' = Tv Tu {e'}.

Page 78: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

78

: שאלה שלT פורש עץO(m log n) בזמן הקשתות. מצא על חיוביים משקולות בעלG=(V, E) מכוון ולא קשיר גרף נתון

Gב- הקשתות משקלות שמכפלת , כזהTמקסימלית. תהייה

פתרון:

האלגוריתם: תאור לאלגוריתמים"(, "מבוא , בספר115 בעמוד )המתוארPrim של לאלגוריתם , הזהה*Prim אלגוריתם את נפעילהמקסימלי: את המינימלי, נבחר את לבחור שבמקום לכך פרט

Prim*(G, w, r)1. Q V[G]2. for each vertex u Q3. key[u] - 4. key[r] 05. [r] NIL6. while Q 7. u ExtractMax(Q)8. for each v Adj[u]9. if ( ( v Q ) and ( w(u, v) > key[v] ) )10. [v] u11. key [v] w(u, v)

סיבוכיות:.Prim: O(m log n) של לסיבוכיות זהה שהסיבוכיות ברור

נכונות:מקסימלי. הוא הקשתות משקלי סכוםש – מקסימלי, כלומר פורש עץ בונה*Prim שהאלגוריתם ברור

טענה: מקסימלי סכום הואw(e1) + w(e2) + ... + w(en)ש: כךG של פורש עץ של קשתותיו הןe1, e2, ... , en הקשתות

ב- פורש עץ קשתות משקלי של מקסימלית מכפלה הואw(e1) · w(e2) · ... · w(en) אם"ם הקשתות משקלי שלG.

הטענה: הוכחת eE, w(e)כי: שנתון כזו, משום פונקציה להגדיר . ניתןw': w'(e) = log [w(e)] חדשה משקל פונקצית נגדיר

> 0..w'(e1) > w'(e2) w(e1) > w(e2) כי ברור

המשקל פונקצית פי על הקשתות מיון תהליך wהמשקל פונקצית פי על הקשתות מיון לתהליך , זהה w'. באלגוריתם שימוש ידי על Prim*המשקל בפונקצית נשתמש אם מקסימלי, בין הפורש העץ אותו את , נקבל w'המשקל בפונקצית נשתמש אם , ובין w.

מקיים: *Prim באלגוריתם שימוש על-ידי הנפרש העץ w(e1) + w(e2) + ... + w(en)הוא של מקסימלי סכום מקסימלי סכום הואw. w'(e1) + w'(e2) + ... + w'(en) המשקל פונקצית פי , עלGב- פורש עץ קשתות משקלי

.'w המשקל פונקצית פי , עלGב- פורש עץ קשתות משקלי שלהנ"ל: המשקלים בסכום נתבונן

w'(e1) + w'(e2) + ... + w'(en) = log [w(e1)] + log [w(e2)] + … + log [w(en)] == log [w(e1) · w(e2) · ... · w(en)]

, עלGב- פורש עץ קשתות משקלי של מקסימלי סכום הואw(e1) + w(e2) + ... + w(en) שהסכום - ברור כלומר עץ קשתות משקלי של מקסימלי סכום הואw'(e1) + w'(e2) + ... + w'(en) הסכוםw המשקל פונקצית פי

של מקסימלית מכפלה שלlog הואw' log [w(e1) · w(e2) · ... · w(en)] המשקל פונקצית פי , עלGב- פורשw(e1) המכפלהG ב- פורש עץ קשתות משקלי · w(e2) · ... · w(en)משקלי של מקסימלית מכפלה היא .Gב- פורש עץ קשתות

Page 79: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

79

: שאלה.O(n2)ב- טוב הכי שני מינימלי משקל בעל פורש עץ וממושקל. מצא מכוון, קשיר לאG=(V, E) גרף נתון

פתרון:

האלגוריתם: תאור.Kruskal של האלגוריתם על-ידיT מינימלי פורש עץ נבנה.1n בגודלM טבלה נבנה.2 nקדקודים זוג שלכל , כך u, v Vהתא , M[u, v]בעלת הקשת את מכיל

.T מינימלי הפורש בעץv ל-uמ- במסלול מקסימלי משקלכך: נבנהM הטבלה את

.s מקור , מקודקודT העץ על*BFS נריץsV לכלBFS*לאלגוריתם דומה אלגוריתם הוא BFSהבא: השינוי "הרגיל", עם

נגדיר:u שלv לבן שכן שלכל , כךmax שדה , נוסיףd וה-ה- לשדות בנוסףw(u, v) > w(max(u)) (u, v)

max(u) אחרת.v ל-sמ- במסלול המקסימלית הקשת אתvT קודקוד לכל נקבל*BFS בסיום

,w(u, v) - w(M[uההפרש: אתA[u, v]ב- נציבT( u, v) קשת שלכל , כךn n בגודלA טבלה נבנה.3v]).

שני, כנדרש. פורש עץ קיים לא – שכזו קשת קיימת לא אםמינימלי. חיוביA[u, v]ש- כך(u, v) , ונחפשA על נעבור.4

שני, כנדרש. פורש עץ קיים לא – חיוביA[u, v] קיים לא אם.M[u, v] הקשת עם(u, v) הקשת את נחליף.5

סיבוכיות:1.Kruskal:O(m log n)..M:O(n2) הטבלה בניית.2.A:O(n2) הטבלה בניית.3.O(n2)הטבלה: על מעבר.4.O(1)הקשת: החלפת.5

קשיר(. הגרף )כיO(m + m log n + n2) = O(n2)סה"כ:

נכונות:T = (V, E')גרף של מינימלי פורש עץ הוא G.

.w(T') = D + w(T) המקיים: G של'T פורש עץ לקבל שכדי ברור.G על פורש עץ ישאר'Tש- , כך'E\Eמ- קשתות עם'Eמ- קשתות להחליף , ישD > 0 כאשרומינימלי. חיוביD שתתן ההחלפה את למצוא צריך טוב הכי שני מינימלי פורש עץ'T לקבל בכדי D עבור מתבצעות )החלפות יעלה רק'T החדש העץ של הכללי כאלה, המשקל החלפות יותר שנבצע ככלטוב. הכי השני המינימלי הפורש העץ את תניב יחידה החלפה (, ולכןחיוביוחיובי. מינימליD שיתן'T פורש עץ , נקבל'e ב-e את נחליף שאם , כך'e'E\E, ו-'eE כן, מחפשים אם

ש: , כך'eE קשת מחפשים'e'E\E לכל.Tב- סוגרת'eש- מעגל על להיות חייבתe , ולכןG של'T פורש עץ תיצורe עם'e החלפת.1 בוחרים , ולכן'e עם להחליפן שניתן הקשתות כל בין מינימלי הפרש שתתן כזו להיות צריכהe הקשת.2

.Tב- סוגרת'e שהקשת במעגל המקסימליתeה- את ,'eE ואת'e'E\E הקשתות את מוצא , וכך'E\Eל- השייכת קשת לכל מתבצעים האלגוריתם של2 ו-1 סעיפים

חיובי. מינימליD שיתן'T פורש עץ תיתן'e ב-e שהחלפת כךטוב. הכי שני מינימלי פורש עץ הוא זו מהחלפה כתוצאה הנוצר'T- ולכן

{max(v)=

Page 80: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

80

שאלה:.O(m log n)ב- טוב הכי שני מינימלי משקל בעל פורש עץ וממושקל. מצא מכוון, קשיר לאG=(V, E) גרף נתון

פתרון:

האלגוריתם: תאור.Kruskal של האלגוריתם הפעלת , על-ידיT מינימלי פורש עץ נמצא.1 כלשהו.sV מקודקוד , החלT עלBFS נריץ.2ו-u של המשותף הקדמון האב את , נחפשT(u, v) קשת לכל.3 v-ב Tבשדה . נשמור w[v]את משקל

.u ו-v של המשותף הקדמון לאבvמ- במסלול המקסימלית הקשת בעלת הקשת את , ונוציאT ל-(u, v) את כשנוסיף שיתקבל המשקל תוספת את נשמורT(u, v) קשת לכל

.(u, v) הוספת על-ידי שייסגר במעגל המקסימלי המשקלביותר. קטנה חיובית היא שתתקבל שהתוספת כך הקשת את נבחר.4

סיבוכיות:1.Kruskal:O(m log n).2.BFSעץ: עלO(m)..O(m)המקסימום: ושמירת הקשתות בדיקת.3.O(m)קשת: בחירת.4

.O(m log n)סה"כ:

נכונות:Kruskalידוע. – מינימלי פורש עץ מוצא

(u, v)הקשתות: שני על-ידי , המתקבל {(x, y)} ( T \ {(u, v)}) עץ הוא טוב הכי שני מינימלי פורש עץ כי ברורT-ו ,(x, y)Tההפרש: על-ידי המתקבלת המשקל שתוספת , כךw[x, y] – w[u, v]חיובית היא

ומינימלית.. f( T \ e) העץ את מציע שהאלגוריתם , כךe, e'T, f, f'T קשתות קיימות כי בשלילה נניחשמתקיים: כך פורש עץ הוא' f( 'T \ e) גם אבל

w(T) < w[(T \ e') f'] < w[(T \ e) f]האלגוריתם. על-ידי נמצא טוב, שלא הכי שני פורש עץ' f( 'T \ e) – כלומר

אזי:w(T) < w(T) – w(e') + w(f') < w(T) – w(e) + w(f) 0 < w(f') – w(e') < w(f) – w(e)

.w(f) - w(e) המשקל תוספת של למינימליות בסתירה

Page 81: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

81

: שאלה 'T מינימום פורש עץ המוצא אלגוריתם בו. תןT מינימלי פורש ממושקל, ועץG=(V, E) מכוון לא קשיר גרף נתון

.O(m log m) מינימלי, בזמן יהיה'T ול-Tל- המשותפות הקשתות שמספר , כךGב-

פתרון:

האלגוריתם: תאורo.משקלן. אם פי על עולה בסדר הקשתות את נמיין w(ei) = w(ek)אם כי נקבע , אזי eiT-ו ,ek

Tאזי , ekלפני יופיעו eiל- השייכות הקשתות משקל, אזי שוות קשתות קיימות אם – )כלומרTבמיון יופיעו (.Tל- שייכות שלא קשתות אחרי

p.אלגוריתם את נריץ Kruskalמינימלי פורש עץ (, ונקבל1 סעיף פי )על הממוינות הקשתות על .'T חדש

סיבוכיות:.O(m log m) (:MergeSort אוQuickSort) מיון.1.Kruskal: O(m log m) של האלגוריתם.2

.O(m log m) סה"כ:

נכונות: e'T'' ( , בקשת)'eT) eT קשת החלפת ידי על'Tמ- המתקבל''T מינימלי פורש עץ קיים לא כי נראהe'T(' e'T((קשת החלפת על-ידי – )כלומר eל- השייכתT-ול T'בקשת e'ל- השייכתT''ל- שייכת ולאT'ל- או

T.) כזו.e e' שקיימת בשלילה נניח

: 1 עזר טענתw(e) = w(e')

הוכחה:מינימלי. פורש עץ הוא''Tש- לכך סתירה זו, w(e') > w(e) אםמינימליים. פורשים עצים הם'T ו-Tש- לכך סתירה זו, w(e') < w(e) אם

: 2 עזר טענת.'T ב-e עם מעגל סוגרת 'e קשת

הוכחה:.e הקשת לפני מופיעה'e הקשתות, הקשת . במיון'T את בונה האלגוריתם בו באופן נתבונן לא עודe אבל, 'T ב-e עם מעגל סוגרתe )כי מעגל סוגרת אינה 'e כי , מתקיים'e את בוחן האלגוריתם כאשר

נבחרה(. e'ל- תבחרT'.

.'Tל- שייכת לא'e ש- להנחה סתירה

Page 82: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

82

: שאלה .Gל- חדשה(u, v) קשת בתוכו. מוסיפיםT מינימלי פורש ממושקל, ועץG=(V, E) מכוון לא קשיר גרף נתון

.O(n) , בזמןG' = G {(u, v)} בגרף'T מינימלי פורש עץ מצא

פתרון:

האלגוריתם: תאור.T {(u, v)} עלu מ-DFS* אלגוריתם את נריץ.1

DFS*לאלגוריתם דומה DFSהבאים: לשינויים "הרגיל", פרטDFS * (G, s)

1. for each vertex wV[G]2. color[w] WHITE3. [w] NIL4. time 05. DFS-VISIT*(s)

DFS-VISIT * (w) 1. color[w] GRAY2. d[w] time time + 13. for each zAdj[w]4. if ( z = s )5. stop6. if ( color[z] = WHITE ) 7. [z] w8. DFS-VISIT*(z)9. color[w] BLACK10. f[w] time time + 1

(u מחדש" את ש"גילה הקודקוד הואw: )FindMax(w) אלגוריתם את נריץ.2FindMax(s)

1. max 02. while (s u) 3. if (max < w(s, [s])4. max w(s, [s])5. s [s]

.T הוא'T , אזיmax w(u, v) אם.3.'T את , ונקבלT ב-(u, v) הקשת עםmax המשקל בעלת הקשת את נחליף , אזיmax > w(u, v) אם

סיבוכיות:.O(m + n) "הרגיל":DFS של לסיבוכיות זהה שהסיבוכיות ברור.1.O(n)האב: על-פי הקדקודים על ריצה.2.O(1)בדיקה:.3

.O(m + n)סה"כ:

נכונות:סוגרת(u, v) שהקשת ברור במעגלe קשת קיימת אםT ב- מעגל ,w(u, v)מ- הגדול משקל בעלת זה

.T ממשקל קטן שמשקלו'T עץ יתקבל . כך(u, v) ו-e בין יחליף האלגוריתם.'Tל- השייכת בקשת להחלפה הניתנת'G\Tל- השייכת קשת שאין להוכיח נותר\Gל- השייכת קשת קיימת שלא להוכיח דיG\T' = (G\T) {e}. . אזי: 3 בסעיף ההחלפה בוצעה שאכן נניח

Tל- השייכת בקשת נחליפה אם אשרT'עץ , נקבל T''יותר. קטן משקל בעל)וכן'Tב- מעגל סוגרתG\Tל- השייכת קשת כל e . אםG\Tל- השייכתe=(i, j) קשת (. תהיTב- מעגל סוגרת

מכיוון ('Tל- השייכת קשת עםe את להחליף ניתן שלא ברור , אזי(u, v) הקשת את מכיל שאינו'Tב- מעגל סוגרתמינימלי(. פורש עץ הואTש-.v ל-uמ- המסלול את , המכילTב- מעגל סוגרתe , אזי(u, v) הקשת את המכיל'Tב- מעגל סוגרתe אם

w(e) מ- במסלול קשת כל ממשקלi-ל j-ב Tאחרת( . eל- שייכת הייתהTכמו .) ,כןw(u, v)מהמשקל < (.3 סעיף פי )עלT ב-v ל-u"העוקף" מ- במסלול הקשתות של המקסימלי

w(e) מ- במסלול קשת כל של ממשקלi-ל j-ב T'.את נחליף אם eמ- למסלול השייכת אחרת בקשתi-ל j ,של ממשקלו נפחית לא T'.

Page 83: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

83

Page 84: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

84

: שאלה

pri(G) = הבא: באופןG=(V, E) גרף של עדיפות נגדיר

מתקייםe קשת שלכל הקשתות, כך על משקלים עם מכוון סופי, לא גרף בהינתן > 0ש: w(e) < 1תן , מקסימום. עדיפות בעל פורש עץ שמחזיר אלגוריתם

פתרון:

האלגוריתם: תאורכלהלן: , המתוארPrim*(G, w, r) אלגוריתם את נריץ

Prim * (G, w,r) 1. Q V[G]2. for each u Q3. key[u] -4. key[r] 05. [r] NIL6. while Q 07. u ExtractMax(Q)8. for each v Adj[u]9. if ( ( v Q ) and ( w(u, v) > key[v] ) )10. [v] u11. key[v] w(u, v)

סיבוכיות:.O(m log n) "הרגיל":Prim של האלגוריתם של לסיבוכיות זהה שהסיבוכיות ברור

נכונות:מקסימלי. הוא הקשתות משקלי סכוםש – מקסימלי, כלומר פורש עץ בונה*Prim שהאלגוריתם ברור

טענה: מקסימלי סכום הואw(e1) + w(e2) + ... + w(en)ש: כךG של פורש עץ של קשתותיו הןe1, e2, ... , en הקשתות

ב- פורש עץ קשתות משקלי של מקסימלית מכפלה הואw(e1) · w(e2) · ... · w(en) אם"ם הקשתות משקלי שלG.

הטענה: הוכחת eE, w(e)כי: שנתון כזו, משום פונקציה להגדיר . ניתןw': w'(e) = log [w(e)] חדשה משקל פונקצית נגדיר

> 0..w'(e1) > w'(e2) w(e1) > w(e2) כי ברור

המשקל פונקצית פי על הקשתות מיון תהליך wהמשקל פונקצית פי על הקשתות מיון לתהליך , זהה w'. באלגוריתם שימוש ידי על Prim*המשקל בפונקצית נשתמש אם מקסימלי, בין הפורש העץ אותו את , נקבל w'המשקל בפונקצית נשתמש אם , ובין w.

מקיים: *Prim באלגוריתם שימוש על-ידי הנפרש העץ w(e1) + w(e2) + ... + w(en)הוא של מקסימלי סכום מקסימלי סכום הואw. w'(e1) + w'(e2) + ... + w'(en) המשקל פונקצית פי , עלGב- פורש עץ קשתות משקלי

.'w המשקל פונקצית פי , עלGב- פורש עץ קשתות משקלי שלהנ"ל: המשקלים בסכום נתבונן

w'(e1) + w'(e2) + ... + w'(en) = log [w(e1)] + log [w(e2)] + … + log [w(en)] == log [w(e1) · w(e2) · ... · w(en)]

, עלGב- פורש עץ קשתות משקלי של מקסימלי סכום הואw(e1) + w(e2) + ... + w(en) שהסכום - ברור כלומר עץ קשתות משקלי של מקסימלי סכום הואw'(e1) + w'(e2) + ... + w'(en) הסכוםw המשקל פונקצית פי

של מקסימלית מכפלה שלlog הואw' log [w(e1) · w(e2) · ... · w(en)] המשקל פונקצית פי , עלGב- פורשw(e1) המכפלהG ב- פורש עץ קשתות משקלי · w(e2) · ... · w(en)משקלי של מקסימלית מכפלה היא .Gב- פורש עץ קשתות

Page 85: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

85

שאלה:לאG=(V, E) גרף נתון אלגוריתם . כתובeE קשת אי-שליליים. נתונה משקולות וקשיר, עם מכוון, פשוט

המכיל מינימלי פורש עץ למצוא – )כלומר המינימלי הפורש העץ אתe הקשת את המכילים העצים מבין המוצא(.e הקשת את

פתרון:

האלגוריתם: תאורלהלן: , המתואר*Kruskal אלגוריתם אתG על נריץ

Kruskal * (G, w) 1. A 2. for each vertex vV3. MakeSet(v)4. sort the edges of E by nondecreasing weight w, BUT place the edge e first.5. for each edge (u, v)E6. if ( FindSet(u) FindSet(v) )7. A A { (u, v) }8. return A

סיבוכיות:.O(m log n) "הרגיל":Kruskal אלגוריתם של לזו זהה שהסיבוכיות ברור

נכונות:.Kruskal מנכונות ישירות נובעת

Page 86: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

86

שאלה: , ושתיwV חדש קודקודGל- בתוכו. מוסיפיםT מינימלי פורש מכוון, ממושקל, ועץ לא גרףG=(V, E) נתון

.O(m)ב- החדש בגרף מינימלי פורש עץ המוצא אלגוריתם . הצעu, vV . כאשר(w, v), (w, u)קשתות:

פתרון:

האלגוריתם: תאורעלBFS נריץ.1 )לפניT העץ ועדuוהקשתות(, מ- הקודקוד הוספת vה- ריצת . במהלךBFSאת , נזכור

.(x, y) , ונסמנהv ל-u בין היחיד במסלול ביותר הכבדה הקשת:(w, u), (w, v), (x, y) הקשתות משקלי בין והקשתות, ונשווה הקודקוד את נוסיף.2

.(w, u) ו-(w, v) מבין הקלה הקשת אתTל- נוסיף – ביותר הכבדה אינה(x, y) הקשת אםא.) ו-(w, v) הקשתות שתי את , ונוסיףT מהעץ אותה נוציא – ביותר הכבדה היא(x, y) הקשת אםב.

w, u)..)החדש הפורש בעץ יהיוT של הקשתות שאר )כל

סיבוכיות:1.BFSעץ: על שמתבצעO(m)..O(1)השוואה:.2

O(1)הקלה: הקשת הקשתות, והוספת בין השוואהא..O(1)הקשתות: שתי מהעץ, והוספת קשת הוצאתב.

.O(m)סה"כ:

נכונות: : 1 טענהעץ. הוא האלגוריתם בסיום המתקבל החדשT הגרף

הוכחה: מקשתותיו אחת בלבד, אבל אחד מעגל מכילT {(w, u), (w, v)} עץ, כי יהיהT האלגוריתם שבסיום ברור

(. 2 סעיף )על-פי החדש בעץ ימצאו לא זה מעגל שלקשיר. יהיה , ולכןG קדקודי כל את יכיל גם החדשT – מעגלים. אבל חסר גרף יהיה החדשT – לכן

Tעץ. אכן הוא החדש : 2 טענהמינימלי. פורש עץ הוא האלגוריתם בסיום המתקבל החדשT העץ

הוכחה: ברור ביותר, ולכן הכבדה הקשת את הוצאנו המעגל מעגל. מתוך נוצר – והקשתות הקודקוד הוספת לאחר

המינימלי. יהיה זה באופן הקשתות שסכום

ו-1 מטענות נובע2 עםG הגרף של מינימלי פורש עץ הוא האלגוריתם בסיום שמתקבל החדשT הגרף כי .(w, u) ו-(w, v) והקשתותw הקודקוד איחוד

Page 87: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

87

שאלה: אי-שליליים(. הצע משקלים – )כלומר+ : Eℝ משקל פונקצית )קליקה(. נתונה מלאG=(V, E) גרף נתון

היותר לכל מורכבG'=(V, E') שהגרף מינימלי, כך משקלות סכום עםE'E קשתות קבוצת המוצא אלגוריתםקשירות. מרכיבי3מ-

פתרון:

האלגוריתם: תאור, ונסיים.E'= , נחזירn 3 עבור.1להלן: , המתואר*Kruskal אלגוריתםG על את , נריץn > 3 עבור.2

Kruskal * (G, w) 1. comp |V|2. A 3. for each vertex vV4. MakeSet(v)5. sort the edges of E by nondecreasing weight w6. for each edge (u, v)E, in sorted order7. if ( FindSet(u) FindSet(v) )8. comp comp - 19. A A {(u, v)}10. Union(u, v)11. if ( comp = 3 )12. return A13. return A

Kruskal*בשם שדה מתחזק compהקשירות. רכיבי מספר את , המונה.|V|ב- מאותחל זה שדה.1 ב-comp המונה את האלגוריתם, מקטינים שבונה ליער קשת הוספת כל עם

עד ליער שנכנסו הקשתות קבוצת היא המבוקשת האלגוריתם, והקבוצה את , עוצרים3ל- מגיע כשהמונהזה, כולל. לרגע

סיבוכיות:.O(1)בדיקה:.1.O(m log n) "הרגיל":Kruskal של לזו זהה*Kruskal של שהסיבוכיות ברור.2

.O(n2 log n), ולכן:m=O(n2)מלא(, מתקיים: )גרף קליקה הוא שהגרף , אבל, מכיווןO(m log n)סה"כ:

נכונות: ברור.– n 3 עבור:n > 3 עבור

הכבדות הקשתות2 , ללאGב- מינימלי פורש עץ של הקשתות כל היא מוצא שהאלגוריתם הקשתות קבוצתקודםKruskal את שעצרנו המדוברת, משום הקשתות לקבוצת "הספיקו" להיכנס לא אלו )קשתות ביותר

מינימלי. סכום תניב הזו הקשתות קבוצת – לכן(. לכן ריצתו באלגוריתם, ואופןcomp השדה תחזוקת מאופן ישירות נובע – הקשירות מרכיבי3 שקיימים לכך באשר

.Kruskal של

Page 88: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

88

שאלה:אי-שליליים. במשקלים מכוון, קשיר, וממושקל לאG=(V, E) סופי גרף נתון

כל מבין מינימום משקל בעל הינוv צומת לכלsמ- המסלול בוG של פורש כעץsל- ביחס ביותר קל עץנגדיר: .G ב-v ל-sמ- המסלולים

.sל- ביחס ביותר קל עץG ו-s המוצא, בהינתן אלגוריתם הצע

פתרון:

האלגוריתם: תאורלהלן: המתואר*Prim אלגוריתם , אתsמ- הגרף, החל על נריץ

Prim * (G, w, s) 1. Q V2. for each uQ3. [u] 4. [s] 05. [s] NIL6. while ( Q )7. v ExtractMin(Q)8. for each uAdj[v]9. if ( ( u Q ) and ( [u] > [v] + w[(v, u)] ) )10. [u] [v] + w[(v, u)]11. [u] v

הרעיון:[v]מ- ביותר הקל במסלול את יחזיקs-ל vעל-פי תהיה הפורש לעץ נכנסו לא שעדיין הצמתים שבחירת , כך

.sמ- מרחקם

סיבוכיות:.O(m log n) "הרגיל":Prim של לזו זהה שהסיבוכיות ברור

נכונות:טענה:

לא שעדיין הצמתים מבין מינימלי הואsמ- זו צומת של הנפרש, מרחקה לעץ חדשה צומת שמוסיפים פעם בכלנבחרו.הוכחה:

הצמתים: כניסת סדר על באינדוקציהמינימלי. , הוא0 – מעצמה מרחקה , ואכןs היא הנפרש לעץ שנכנסת הראשונה הצומתבסיס:-ית.nה- הצומת לפני שהוכנסו הצמתים כל עבור הטענה נכונות נניח: כל מבין ביותר הקל המסלול בעלת היא הנפרש לעץ הכניסה בסדר -יתnה- שהצומת נראהצעד:

הנפרש. לעץ נכנסו לא שעדיין הצמתים.vכ- זו צמת נסמן.v לפני נבחרה לא יותר, והיא קטןsמ- שמרחקהu צומת שקיימת בשלילה נניחביותר. הקל במסלולuל- הקודמת הצומת'u תהי

.[u'] < [v]שמתקיים: , בהכרחv ל-sמ- מהמסלול יותר קצר זה שמסלול מכיווןכבר'u- כלומר כל מבין מינימלי ערך בעל היה הוא האינדוקציה הנחת הנפרש, ולפי לעץ נכנס

.[u] [u'] + w[(u', u)]הסימון: את קבע הרגע, וגם באותו הצמתיםלהנחה! בסתירה, v בצומת טיפלנו בטרם הנפרש לעץ נכנסה[u]- כלומר

Page 89: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

89

שאלה: קודקוד ישנו עץ בכל מינימלי, בו פורש יערO(m log m) בזמן . מצאUV קדקודים , וקבוצתG=(V, E) גרף נתון.U לקבוצה השייך בלבד אחד

פתרון:

האלגוריתם: תאורהבאים: השינויים , עםKruskal של האלגוריתם את הגרף על נריץ

(.is_special – נוסף בוליאני שדה כ-"מיוחד". )על-ידיU הקדקודים קבוצת של הנציג האיבר את נסמן.1 לא שלה הנציג שהאיבר קבוצה "מיוחד" לבין הוא שלה הנציג שהאיבר קבוצה בין איחוד כי נדרוש.2

"מיוחד". נציג איבר עם להיות האיחוד את הופך – מיוחדמיוחדות. קבוצות2 בין לאחד אסור כי נדגיש.3

סיבוכיות: גם , וכךFindSetב- שימוש "מיוחדת" על-ידי קבוצה או קודקוד מזהים )כי דבר משנים לא שהשינויים ברור

.O(m log m)היא: הסיבוכיות "מיוחדת"( , ולכן "רגילה" לקבוצה קבוצה של הפיכתה מתבצע

נכונות:מיוחדות. קבוצות2 של מונע, למעשה, איחודם שהוצע האלגוריתם

.Kruskal "הרגיל" של לאלגוריתם זהה האלגוריתם התנהלות שאופן הרי – המינימלי הפורש העץ נבנה עוד כלוהוכחה. ידועהKruskal של הנכונות

בכדי מיוחדת, וזאת כקבוצהT כל את נסמן – המיוחדת לקבוצה השייך קודקודT הנבנה לעץ שמצטרף ברגעמיוחדת. קדקודים קבוצת או קודקודTל- שיתווסף האפשרות את למנוע

:T2 ו-T1 רכיבים: 2הריצה, נבחן, במהלך כעת.uT2, ו-vT1- הכלליות הגבלת , כלומר, בליT2 ו-T1 בין המחברתe=(u, v) קשת שקיימת נניחאזי:

"הרגיל".Kruskal של בתהליך מדובר–"רגילות" קבוצות הםT2 ו-T1 אםא. השייך קודקוד איןT2ב- "רגילה", אזי קבוצהT2ו- מיוחדת קבוצה הואT1הכלליות, הגבלת אם, בליב.

.U לקבוצה האיחוד, לאחר שיווצר'T שברכיב לכך נגרום הוספתה על-ידי חוקית, שכן הינהe הקשת הוספת – לכן

.T1ב- שקיים הקודקוד אותו– U לקבוצה השייך אחד קודקוד רק יהיה אחד קודקוד ישT2, ול-U לקבוצה השייך אחד קודקוד ישT1ל- אזי – מיוחדות קבוצות הםT2 ו-T1 אםג.

.U לקבוצה השייך . ברורU לקבוצה השייכים קדקודים2 יש שלו'T רכיב - נקבלe הקשת הוספת את נאפשר אם – לכן

שהוצע. האלגוריתם בתאור שכזו דרישה שהופיעה זו, כפי קשת הוספת נאפשר לא אסור, ולכן שהדבר

Page 90: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

90

שאלה:.E| - |V| | 100| |וממושקל. נתון: מכוון, קשיר לא גרףG יהי

.Gב- מינימלי פורש עץ , המוצא|V|ב- לינארי אלגוריתם תאר

פתרון:

האלגוריתם: תאורהבאים: השינויים , עםG עלDFS נריץ דרגה לכל קיים יהיה )המשתנה המקסימלי המשקל בעלת הקשת אתmax_edgeב- הסריקה, נזכור כדי תוך

ברקורסיה(..max_edgeב- שזכרנו המקסימלית הקשת את - נוריד אפור לקודקוד נגיע אםהיותר. לכל פעמים101 נבצע כך

סיבוכיות:101 · O(n) = O(n)

נכונות:פשוט(. מסלול מעגלים, ועוד100 קיימים , כיDFS סריקות101 נריץ

(.100) שבגרף המעגלים כל את הורדנו בעצם– DFSה- סריקות כל לאחרעץ. עבור מתקיים הרי , וזהE| = |V| - 1| הורדות, נקבל101 נבצע אם

מינימלי: פורש עץ שזהו להראות נותר מורידים פשוט מינימליות, אנו קשתות הוספת על-ידי הפורש העץ בניית "הסטנדרטי" של באופן לנקוט במקוםמקסימליות. קשתות

.DFS סריקות101 לבצע יש יחידה, ולכן קשת נוריד פעם בכל

Page 91: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

91

שאלה: האם הבודק אלגוריתם בלבן. תאר או בכחול צבועה קשת . כלG=(V, E) וממושקל מכוון, קשיר לא גרף נתון כחולות, וכל הן פחות או10 ממשקל הקשתות והלבנות. כל הכחולות הקשתות ללא מינימלי פורש עץ קיים

הקשתות. שאר של הצבעים לשאר משמעות לבנות. אין הן ויותר20 ממשקל הקשתות

פתרון:

האלגוריתם: תאור.T מינימלי פורש עץ , למציאתKruskal של האלגוריתם אתG על נריץ.1

מינימלי. הפורש העץ של המשקל– w(T)נסמן: ל- גדול/שווה שמשקלן הכחולות הקשתות , ואת10ל- קטן/שווה שמשקלן הלבנות הקשתות אתGמ- נסיר.2

20..'Gכ- זה גרף נסמן

.Kruskal של האלגוריתם את'G על נריץ.3כנדרש. עץ קיים לא אזי – פורש עץ לבנות נצליח לא אם

.'T העץ את - נסמן אחרתכנדרש. העץ הוא'T , אזיw(T') = w(T) אם.4

כנדרש. עץ קיים לא – אחרת

סיבוכיות:1.Kruskal:O(m log n)..G':O(m + n) בניית.23.Kruskal:O(m log n)..O(1)בדיקה:.4

.O(m log n)סה"כ:

נכונות:.Kruskal מנכונות ישירות נובעת הנכונות

Page 92: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

92

שאלה:דירות. m בבניין קומות. סה"כn ובו בניין נתון 2n mנציגים2 בדיוק בו שיהיו בית וועד לבנות . רוצים מכל

זו. בעיה הפותר אלגוריתם שונות(. תאר דירות2מ- נציגים2) קומה

פתרון:

האלגוריתם: תאור כך:G גרף נבנה.1

.fi, 1 i n הקומות. נסמנם את המייצגים קדקודים n ניצור.ai, 1 i m הדירות. נסמנם את המייצגים קדקודיםm ניצור.t ו-s קדקודים נוסיף הדירות.ai (1 i m)מ- אחד לכלs מ-1 קיבולת עם קשת נחבר.tל- הקומותfi (1 i n)מ- אחד מכל2 קיבולת עם קשת נחברשלה. לקומה מהדירות אחת כל בין , כלומרfi ל-ai כל בין1 קיבולת עם קשת נחבר

בשלמים. בזרימה שימוש מקסימלית, תוך זרימה למציאתEdmond's-Karp של האלגוריתם אתG על נריץ.2פתרון. - אין|2n > |f אם.3

הרוויות. הקשתות אוסף והוא קיים - הפתרון|2n = |f אם

סיבוכיות:.O(|V| + |E|)הגרף: בניית.12.Edmond's-Karp:O(|V| · |E|2)..O(|E|)הרוויות: הקשתות בדיקת.3

.O(|V| · |E|2)סה"כ:

נכונות:טענה:

2n = |f| פתרון. ישהוכחה:

פתרון: שיש , ונוכיח|2n = |f המקסימלית שהזרימה נניח : כיוון של )הקיבולת2 בגודל זרימה יוצאת קומה שמכל קומות, הריn , ויש2n בגודל היא שהזרימה כיוון

אחרת(. להיות יכול לא , ולכן2 הן מהקומות הקשתותלכלsמ- שהקיבולות כיוון רש1 בגודל זרימה להזרים יכולה דירה כל , אזי1 הן מהדירות אחת

אחת. לקומה אחרת קומה לאף מזרימות לא אלה בדיוק, ודירות דירות משתי1 זרימה מקבלת קומה כל – לכןהבעיה. דרישת אחרות(, וזו לקומות קשתות להן )אין

מקסימלית. זרימהf| = 2n|ש: פתרון, ונוכיח שיש נניח : כיוון לקומות שנבחרו הדירות בין שרק כך המקסימלית הזרימה את לבנות ניתן – פתרון שקיים כיוון

.0 נזרים הקשתות , ובשאר1 בגודל זרימה נזרים שלהןשלמה. שהזרימה , מכיוון2 בגודל בדיוק זרימה נכנסת קומה לכל – לכן

.2n היא המקסימלית הזרימה – קומות. לכןn וישt ל-2 בגודל זרימה יוצאת קומה מכל

Page 93: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

93

שאלה: קדקודים, כמה המוצא אלגוריתם בו. תאר מיוחדים קדקודים שניs, t וקשיר. יהיה מכוון לא גרףG=(V, E) יהי

.t מ-s את לנתק להוריד, כדי הפחות, יש לכל

פתרון:

האלגוריתם: תאורהבא: באופן'G גרף נבנה.1

.vin, voutV[G'] ניצורvV[G] קודקוד לכלהקשתות:

E[G'] = { (u, vin) | (u, v)E[G] } { (vout, u) | (v, u) E[G] } { (vin, vout) | vin, vout V[G'] } קיבולת ניתן(vin, vout) מסוג לקשתות , כאשר קיבולת ניתן(vin, vout) מהסוג , שאינן'Gב- הקשתות כל על

1..Edmond's-Karp באלגוריתם שימוש מקסימלית, על-ידי זרימה'G על נזרים.2

.t מ-s את לנתק הפחות, על-מנת להוריד, לכל שיש הקדקודים מספר הוא|f| הפלט

סיבוכיות:.G':O(|V| + |E|) בניית.12.Edmond's-Karp:O(|V| · |E|2).

.O(|V| · |E|2)סה"כ:

נכונות:טענה:

קדקודים.c הסרת על-ידיG ב-t מ-s את לנתק ניתן , אזיc קיבולת עם'Gב- חתך קיים אםהוכחה:

.Gב- קודקוד למעשה מסמנת בחתך קשת כל – בנייה על-פי – ברור

Page 94: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

94

שאלה: לעלות יכולים מטוסים לאיזה המפרטת טבלה נתונה כן מטוסים. כמוmו- נווטיםn טייסים, p של רשימה נתונה

והנווטים. הטייסים מטוסים של מקסימלי מספר לאוויר להעלות ונווט( כדי )טייס צוותים של מקסימלי מספר להרכיב – המטרה

בו-זמנית.זו. מטרה המשיג אלגוריתם תאר

פתרון:

האלגוריתם: תאורהבא: באופןG גרף נבנה.1

. i p 1 , כאשרpi קדקודים, ונסמנהp קבוצת על-ידי הטייסים קבוצת את נייצג. i n 1 , כאשרni קדקודים, ונסמנהn קבוצת על-ידי הנווטים קבוצת את נייצג.mp ו-mn – קדקודים קבוצות2 נבנה המטוסיםm עבור.s, t קדקודים נוסיף הקדקודים.piמ- אחד כל עםs את בקשת נחברנתונה. הטבלה , על-פיmp ל-pi כל בין קשתות נחבר.mnב- שלו להעתקmpב- קודקוד כל בקשת נחברהנתונה. לטבלה , בהתאםni ל-mnב- קודקוד כל בקשת נחבר.t ל-ni קודקוד כל בקשת נחבר

.1 קיבולת ניתן הקשתות כל עלבשלמים. מקסימלית זרימה , למציאתG עלEdmond's-Karp נריץ.2

זמנית. בו לאוויר לעלות שיכול המקסימלי המטוסים מספר יהיה|f| הפלט

סיבוכיות:.O(|V| + |E|)הגרף: בניית.12.Edmond's-Karp:O(|V| · |E|2).

.O(|V| · |E|2)סה"כ:

נכונות:טענה:מקסימלי. ציוות מייצגת הנתון בגרף מקסימלית זרימה

הוכחה: על1 זורם מקסימלי, אזי ציוות שמייצר בזרימה נביט שאם , מכיוון|f|ל- גדול/שווה לאוויר שיעלו המטוסים מספר

ציוות, ולכן לכל זרימה לייצר כן. ניתן גם עליו שיטוס לנווט מטוס מאותו1יטוס, ו- שעליו למטוס מטייס קשת כל.|f|ל- קטן/שווה המקסימלי הציוות שגודל כן אם המקסימלי. נקבל הציוות עבור בפרט.|f|ל- שווה המקסימלי הציוות גודל – ומכאן

Page 95: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

95

שאלה:.sV ממושקל, וקודקודG=(V, E) גרף נתון

.c(P) = min { c(u, v) | (u, v)P } על-ידי: G ב-P מסלול של קיבול נגדיר.v ל-sמ- מקסימלי קיבול בעל מסלולvV לכל המוצא אלגוריתם הצע

פתרון:

האלגוריתם: תאור.Dijkstra של האלגוריתם על וריאציה מעין נריץ

כה. עד אליהם שנמצאה המקסימלית הקיבולת את ייצגו העדיפויות בתור הקדקודים של העדיפותבהקדם. יבחר גבוהה עדיפות עם קודקוד

(.- כ-)v של העדיפות , תוגדרv ו-s בין מסלול קיים לא אם לא מסלול(, ולכן של קיבול להגדיל יכולים לא מעגלים )הוספת פשוט מסלול נחפשים אנו כי נניחהערה:

לעצמו.sמ- מקסימלית קיבולת נחפש

MaxCapcity(G)1. pred new vertex[n]2. pred[s] NIL3. for each v V \ {s}4. pred[v] s5. if ( (s, v) E )6. pq.SetPriority(v, c(s, v))7. else8. pq.SetPriority(v, -)9. pq new ProprityQueue(V \ {s})

10. for i 1 to n-111. u pq.ExtractMax()12. for each vAdj[u]13. if (pq.GetPriority(v) < min { pq.GetPriority(u), c(u, v) }14. pq.increasekey(v, min { pq.GetPriority(u), c(u, v) } )15. pred[v] u16. return (pred)

נכונות:העדיפויות. בתור הנמצאים הקדקודים קבוצת היאQ , כאשרT = V \ Q נסמן.c(v) = pg.GetPriority(v) נסמן:10 בשורה המתחילהforה- לולאת נכונות את נוכיח

טענה: .pred על-ידי המוגדרvל- המסלול קיבול הואc(v), ו-sמ- מסלולים עץ הינוpred על-ידי המוגדר הקודמים גרף

מקשרת(. צלע אין מהקדקודים חלק שבין קדקודים. ייתכן רצף זה, הוא )"מסלול" לענייןמקסימלי. קיבול בעל היאpred על-ידי המוגדר , המסלולvT\{s} לכל שלהם הביניים קדקודי שכל המסלולים מבין מקסימלי קיבול בעל הואpred על-ידי המוגדר , המסלולvT לכל

.Tב-הוכחה:

.T={s}ללולאה, הראשונה הכניסה עםבסיס:pred[s] = NILהריק. המסלול את מגדיר

ביניים. קדקודי ללאv ל-s בין מסלול מגדיר– pred[v] = s קייםvs לכל.c(u, v)= מקסימלי = קיבול הקודקוד עדיפות , אזיv ל-s בין צלע קיימת אם

נקבע. שאכן (, כפיח-) היא אחרת, העדיפותT\{s}.ריקה הואsש- מאחר לקודקודsמ- היחיד , המסלולTב- היחיד הקודקוד vTהוא קדקודי ללא מסלול

מוגדר. שאכן ביניים, כפיכלשהי. בכניסה נכונה הלולאה כינניח:

ממנה: ביציאה נכונה גם היא כינוכיח:.u של שכניו להשתנות, הם עשוי היה שלהםc ו-predש- היחידים הקדקודים

ל- המסלול קיבול הואc(v), ו-pred על-ידי , המוגדרuל- המסלול קיבול הואc(u)האינדוקציה, מהנחתvעל-ידי המוגדר predהשינוי . pred[v] = uל- המסלול כי קובעvל- המסלול מעתה הואuבתוספת

.(u, v) הצלעבאלגוריתם. נקבע שאכן , כפיmin { c(u), c(u, v) } הוא זה מסלול קיבול

Page 96: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

96

.predב- שינוי אחרים, אין קדקודים , ועבורu הואTל- שהוכנס היחיד הקודקוד.pred על-ידי המוגדרuל- המסלולP יהי

.c(P) < c(P') – ליותר, כלומר גדול קיבול , בעלu ל-P'P מסלול שקיים בשלילה נניח.Tב- שלו הביניים קדקודי שכלuל- המינימלי המסלול הואPהאינדוקציה, מהנחת

שייך שלא'Pב- הראשון הקודקוד אתwב- . נסמןTל- שייך שלא ביניים קודקוד דרך לעבור חייב'P לכן.Tל- של המקסימלי הקיבול , שקטן/שווהw ל-s בין'P של המסלול תת קיבול קטן/שווה הוא'P קיבול אזי

.c(P) = c(u) c(w) = Tב- שלו הביניים קדקודי שכלw ל-s בין מסלולהאינדוקציה. מהנחתc(w) הואTב- שלו הביניים קדקודי שכלw ל-s בין מסלול של המקסימלי הקיבול

c(w) c(u)מבחירת u.כלומר:

c(P') c(P)ולכן , Pל- מסלול הואuמקסימלי. קיבול בעל.u של משכניו חלק הם להשתנות היה עשוי שלהםpred ש-Tל- מחוץ היחידים הקדקודים

שכזה. שכןv יהי.min { c(u), c(u, v) } > c(v) אז

מבין המקסימלי הקיבול בעל המסלול הואvל- ללולאה, המסלול הכניסה האינדוקציה, לפני מהנחת.Tב- שלהם הביניים קדקודי שכל המסלולים

.(u, v) בצלע המסתיימים אלה – כאלה מסלולים עוד , נוספוT ל-u הכנסת לאחר.min { c(u), c(u, v) } של קיבול בעל הוא(u, v) בצלע שמסתיימים מאלו האופטימלי שהמסלול ברור

Tב- שלו הביניים קדקודי שכלvל- האופטימלי המסלול אכן אזmin { c(u), c(u, v) } > c(v) ולכן, אם.(u, v) הצלע בתוספתuל- האופטימלי המסלול הואהטענה. קיום על שומרות בלולאה שמתוארות ההשמות לכן

טענה:.v ל-s מ-c(v) מקסימלי קיבול בעל מסלול מגדירvV\{s}, pred לכל

הוכחה:.T = V[G]ומתקיים: ריק התור הלולאה שבסיום לעיל, ומהעובדה מהמצויין נובעת הטענה נכונות

Page 97: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

97

שאלה: – משולש המכילv ל-uמ- מסלול קיים האםo(n3)ב- . מצאu, v V קדקודים ושניG=(V, E) מכוון לא גרף נתון

בדיוק. קשתות3- כלומר

פתרון:

יסוד: הנחת.A שכניות מטריצת על-ידי מיוצגG הנתון הגרף

האלגוריתם: תאור.'A המכפלה את (. נסמןA A A מטריצות כפל נבצע – ) כלומר בשלישיתA המטריצה את נעלה.1להלן: המתוארתSearchMatrixForTriangle השגרה'A אתעל נריץ.2

SearchMatrixForTriangle(A ' ) 1. for i 1 to n2. if (A'[i, i] 1)3. return TRUE4. return FALSE

ריבוע.Gב- קיים אזי– TRUE תחזירSearchMatrixForTriangle(A') השגרה אם.3קיים. לא – אחרת

סיבוכיות:.O(n2.81)מטריצות: לכפלStrassen של האלגוריתם את נפעיל אם.12.SearchMatrixForTriangle:O(n)..O(1)בדיקה:.3

.O(n2.81) = o(n3)סה"כ:

נכונות:טענה:

(.k בחזקתA המטריצה היאAk )vj ל-vi מ-k באורך המסלולים מספר הואAk ב-entryה- ערך באינדוקציה: – הוכחה:k=1 עבורנבדוק:

הקדקודים, בין קשת קיימת אם1 הינה במטריצה כניסה וכל הנכונות, מאחר נובעת המטריצה מבניית(.1 באורך מסלול היא שקשת )ברור כזו קשת קיימת לא אם0 או

.n=k עבור נכונותנניח::n=k+1 עבורנוכיח:

v ל-vi מ-k באורך המסלולים למספר השווה מספר שלה(i, j) כניסה בכל מכילהAkש- להראות נרצהj.

ל-vj של השכן בין הקשת , בתוספתvj של לשכןvi מ-k-1 באורך מסלול הינוvj ל-vi מ-k באורך מסלולvj.

vj ל-vj של השכן בין שהקשת לב , ונשיםAk-1 בעצם זהvj של לשכןvi מ-k-1 באורך שמסלול לב נשים

.A זה,Ak = Ak-1 · Aוהרי:

. = Ak[i, j] (Ak-1[i, t] · A[t, j]) ובעצם:

.vi – לעצמוvi מ-3 באורך המסלולים מספר(i, i)ה- בכניסה ייצויין'A הטענה, במטריצה על בהסתמך.0מ- גדול יהיה(i, i)ה- בכניסה הערך – שכזה אחד מסלול לפחות קיים אם

משולש. הרי הוא לעצמו מקודקוד3 באורך מסלול אבל

משנה זה אין– 3 באורך במסלול שמדובר מכיוון פשוטים, אבל במסלולים דווקא לאו שמדובר לב נשיםהערה:האלגוריתם. של לנכונותו באשר

Page 98: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

98

שאלה: – ריבוע המכילv ל-uמ- מסלול קיים האםo(n3)ב- . מצאu, v V קדקודים ושניG=(V, E) מכוון לא גרף נתון

בדיוק. קשתות4- כלומר

פתרון:

יסוד: הנחת.A שכניות מטריצת על-ידי מיוצגG הנתון הגרף

האלגוריתם: תאור.'A המכפלה את (. נסמןA A מטריצות כפל נבצע – ) כלומר בריבועA המטריצה את נעלה.1להלן: המתוארתSearchMatrixForSquare השגרה'A אתעל נריץ.2

SearchMatrixForSquare(A ' ) 5. for i 1 to n6. for j 1 to n7. if ( ( A'[i, j] 2) and ( i j ) )8. return TRUE9. return FALSE

ריבוע.Gב- קיים אזי– TRUE תחזירSearchMatrixForSquare(A') השגרה אם.3קיים. לא – אחרת

סיבוכיות:.O(n2.81)מטריצות: לכפלStrassen של האלגוריתם את נפעיל אם.12.SearchMatrixForSquare:O(n2)..O(1)בדיקה:.3

.O(n2.81) = o(n3)סה"כ:

נכונות:טענה:

(.k בחזקתA המטריצה היאAk )vj ל-vi מ-k באורך המסלולים מספר הואAk ב-entryה- ערך באינדוקציה: – הוכחה:k=1 עבורנבדוק:

הקדקודים, בין קשת קיימת אם1 הינה במטריצה כניסה וכל הנכונות, מאחר נובעת המטריצה מבניית(.1 באורך מסלול היא שקשת )ברור כזו קשת קיימת לא אם0 או

.n=k עבור נכונותנניח::n=k+1 עבורנוכיח:

v ל-vi מ-k באורך המסלולים למספר השווה מספר שלה(i, j) כניסה בכל מכילהAkש- להראות נרצהj.

ל-vj של השכן בין הקשת , בתוספתvj של לשכןvi מ-k-1 באורך מסלול הינוvj ל-vi מ-k באורך מסלולvj.

vj ל-vj של השכן בין שהקשת לב , ונשיםAk-1 בעצם זהvj של לשכןvi מ-k-1 באורך שמסלול לב נשים

.A זה,Ak = Ak-1 · Aוהרי:

. = Ak[i, j] (Ak-1[i, t] · A[t, j]) ובעצם:

.vj ל-vi מ-2 באורך המסלולים מספר(i, j)ה- בכניסה ייצויין'A הטענה, במטריצה על בהסתמך.(w, v) והקשת(u, w) הקשת למעשה הינוu ל-u מ-2 באורך מסלול כלw ו-w1 – "נוספים" כאלו קדקודים2 לפחות שיש הרי– 2 באורך מסלולים2 לפחות ישij, (i, j)ה- בכניסה אם

2.מסלולים2 לפחות יש שאם ברור ל-uמ- שונים v –הרי שלנו, בלי-הגבלת זה, במקרה מעגל. מעגל שיש

.uw1vw2מהקדקודים: הכלליות, בנוי

Page 99: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

99

שאלה: v לקודקודu קודקוד בין האםo(n3 log n) בזמן המוצא אלגוריתם . תארu,vV קדקודים ושני מכוון לא גרף נתון.n פשוט( באורך דווקא )לאו מסלול קיים

פתרון:

יסוד: הנחת.A שכניות מטריצת על-ידי מיוצגG הנתון הגרף

האלגוריתם: תאור. k log n 1, ו- 2k n> 1ש: , כךk לכלA2^k נחשב.1

אותה. , ונשמורA2 המטריצה את בעצמה. נקבלA את מכפילים – כלומראותה. , ונשמורA4 המטריצה את בעצמה. נקבלA2 את נכפיל כעת

נשמור. , אותהA2^(k+1) המטריצה את בעצמה, ונקבלA2^k את נכפילkה- בצעד – כללי באופן.2k n עוד כל נמשיך כך

, ...A, A2, A4המטריצות: לנו יהיו זה שלב של בסיומוהמספר: של הבינארי הייצוג מחוברים, על-פי של מינימלי מספר , עם2 של חזקות של כסכוםn את נציג.2

, אזי:n = 37 יהי – למשלn = 1001012 = 37n = 32 + 4 + 1 = 25 + 22 + 20

הרלוונטית: בחזקה המטריצות את בינארי הייצוג נסמן, על-פיAn = Ak 1 Ak 2 … Ak t

המטריצות: אלו , יהיוn = 37 שלעיל, כאשר בדוגמא – כלומרA37 = A32 A4 A

שתואר. באופןAn את נחשב.3:An המטריצה של(u, v)ה- בכניסה נביט.4

.v ל-u ביןn באורך מסלול קיים אזי– 0מ- הגדול מספר קיים המטריצה של(u, v)ה- בכניסה אםכזה. מסלול קיים לא – אחרת

סיבוכיות:,Strassen על-פי הכפלה, מתבצעת . כלO(log n) הוא לבצע שישA של השונות החזקות מספר.1

.o(n3 log n):1 סעיף סה"כ , ולכןo(n3)ל- , השווהO(nlog 7)ב- כלומר.O(log n)המספרים: תורת על-פי.2,o(n3)ב- מתבצעתStrassen הכפלה, על-פי מטריצות, שכל של הכפלותO(log n) קיימים.3

.o(n3 log n):3 סעיף סה"כ ולכן.O(1)בדיקה:.4

.o(n3 log n)סה"כ:

נכונות:טענה:

(.k בחזקתA המטריצה היאAk )vj ל-vi מ-k באורך המסלולים מספר הואAk ב-entryה- ערך באינדוקציה: – הוכחה:k=1 עבורנבדוק:

הקדקודים, בין קשת קיימת אם1 הינה במטריצה כניסה וכל הנכונות, מאחר נובעת המטריצה מבניית(.1 באורך מסלול היא שקשת )ברור כזו קשת קיימת לא אם0 או

.n=k עבור נכונותנניח::n=k+1 עבורנוכיח:

v ל-vi מ-k באורך המסלולים למספר השווה מספר שלה(i, j) כניסה בכל מכילהAkש- להראות נרצהj.

ל-vj של השכן בין הקשת , בתוספתvj של לשכןvi מ-k-1 באורך מסלול הינוvj ל-vi מ-k באורך מסלולvj.

vj ל-vj של השכן בין שהקשת לב , ונשיםAk-1 בעצם זהvj של לשכןvi מ-k-1 באורך שמסלול לב נשים

.A זה,Ak = Ak-1 · Aוהרי:

. = Ak[i, j] (Ak-1[i, t] · A[t, j]) ובעצם:

טענה:

Page 100: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

100

.2 של חזקה מהם אחד מחוברים, שכלO(log n)ל- פירוק קייםn טבעי מספר לכלהוכחה:

הבינארי. הייצוג 2x = n

x = log2 n

Page 101: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

101

שאלה:.v ל-u מ-2 באורך המסלולים מספר את המוצא אלגוריתם . תארu,vV צמתים שני ובו מכוון לא גרף נתון

פתרון:

יסוד: הנחת.A שכניות מטריצת על-ידי מיוצגG הנתון הגרף

האלגוריתם: תאור.u של השכנים מספר את נחזיר , אזיu=v אם.1אחרת:.2

.A2 המטריצה את בעצמה, ונקבלA את נכפיל.(u, v) ה-entryשב- הערך את נחזיר.3

סיבוכיות:.O(n)השכנים: בדיקת.1.Strassen:o(n3) מטריצות, על-פי הכפלת.23.O(1).

.o(n3)סה"כ:

נכונות: ברור.– u=v עבור:uv עבור

טענה:(.k בחזקתA המטריצה היאAk )vj ל-vi מ-k באורך המסלולים מספר הואAk ב-entryה- ערך

באינדוקציה: – הוכחה:k=1 עבורנבדוק:

הקדקודים, בין קשת קיימת אם1 הינה במטריצה כניסה וכל הנכונות, מאחר נובעת המטריצה מבניית(.1 באורך מסלול היא שקשת )ברור כזו קשת קיימת לא אם0 או

.n=k עבור נכונותנניח::n=k+1 עבורנוכיח:

v ל-vi מ-k באורך המסלולים למספר השווה מספר שלה(i, j) כניסה בכל מכילהAkש- להראות נרצהj.

ל-vj של השכן בין הקשת , בתוספתvj של לשכןvi מ-k-1 באורך מסלול הינוvj ל-vi מ-k באורך מסלולvj.

vj ל-vj של השכן בין שהקשת לב , ונשיםAk-1 בעצם זהvj של לשכןvi מ-k-1 באורך שמסלול לב נשים

.A זה,Ak = Ak-1 · Aוהרי:

. = Ak[i, j] (Ak-1[i, t] · A[t, j]) ובעצם:

.v ל-u מ-2 באורך המסלולים מספר את לנו תיתןA2 המטריצה של(u, v) ה-entryב- בדיקה – ולכן

Page 102: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

102

שאלה:אליהם. שייךuש- המשולשים מספר את המוצא אלגוריתם . תארuV קודקוד מכוון, ונתון לא גרף נתון

פתרון:

יסוד: הנחת.A שכניות מטריצת על-ידי מיוצגG הנתון הגרף

האלגוריתם: תאור.Strassen של האלגוריתם , על-ידיA3 המטריצה את נחשב.1.2 חילוק זו במשבצת הרשום הערך את . נחזיר(u, u) ה-entryב- נסתכל.2

.A3[u, u] / 2את: נחזיר – כלומר

סיבוכיות:.Strassen:o(n3) על-פי מטריצות כפל.12.O(1).

.o(n3)סה"כ:

נכונות:טענה:

(.k בחזקתA המטריצה היאAk )vj ל-vi מ-k באורך המסלולים מספר הואAk ב-entryה- ערך באינדוקציה: – הוכחה:k=1 עבורנבדוק:

הקדקודים, בין קשת קיימת אם1 הינה במטריצה כניסה וכל הנכונות, מאחר נובעת המטריצה מבניית(.1 באורך מסלול היא שקשת )ברור כזו קשת קיימת לא אם0 או

.n=k עבור נכונותנניח::n=k+1 עבורנוכיח:

v ל-vi מ-k באורך המסלולים למספר השווה מספר שלה(i, j) כניסה בכל מכילהAkש- להראות נרצהj.

ל-vj של השכן בין הקשת , בתוספתvj של לשכןvi מ-k-1 באורך מסלול הינוvj ל-vi מ-k באורך מסלולvj.

vj ל-vj של השכן בין שהקשת לב , ונשיםAk-1 בעצם זהvj של לשכןvi מ-k-1 באורך שמסלול לב נשים

.A זה,Ak = Ak-1 · Aוהרי:

. = Ak[i, j] (Ak-1[i, t] · A[t, j]) ובעצם:

.3 באורך המסלולים מספר יצוינו(u, u)ה- בכניסה – הטענה על-פיהמשולש: יהי – שונים. למשל מסלולים2 מכיל משולש כל כי לב נשים

.u, w, v, u, והשני: u, v, w, u האחד: – 2 הוא המסלולים מספר אזי.2 בסעיף מתבצעת אכן זו חילוק . פעולת2 חילוק המסלולים מספר הוא המשולשים מספר ולכן

u

v w

Page 103: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

103

שאלה:בגרף. יש משולשים כמה המוצא אלגוריתם מכוון. תאר לא גרף נתון

פתרון:

יסוד: הנחת.A שכניות מטריצת על-ידי מיוצגG הנתון הגרף

האלגוריתם: תאור.Strassen של האלגוריתם , על-ידיA3 המטריצה את נחשב.1ה-entryמה- ) החלA3 המטריצה של האלכסון על נרוץ.2 ( ונסכום(0, 0) במשתנה האלכסון ערכי את

num_of_triangles.כתשובה. המנה את , ונחזיר6 ב-num_of_triangles את נחלק.3

סיבוכיות:.Strassen:o(n3) על-פי מטריצות כפל.1.O(n)האלכסון: על מעבר.2.O(1)אריתמטית: פעולה.3

.o(n3)סה"כ:

נכונות:טענה:

(.k בחזקתA המטריצה היאAk )vj ל-vi מ-k באורך המסלולים מספר הואAk ב-entryה- ערך באינדוקציה: – הוכחה:k=1 עבורנבדוק:

הקדקודים, בין קשת קיימת אם1 הינה במטריצה כניסה וכל הנכונות, מאחר נובעת המטריצה מבניית(.1 באורך מסלול היא שקשת )ברור כזו קשת קיימת לא אם0 או

.n=k עבור נכונותנניח::n=k+1 עבורנוכיח:

v ל-vi מ-k באורך המסלולים למספר השווה מספר שלה(i, j) כניסה בכל מכילהAkש- להראות נרצהj.

ל-vj של השכן בין הקשת , בתוספתvj של לשכןvi מ-k-1 באורך מסלול הינוvj ל-vi מ-k באורך מסלולvj.

vj ל-vj של השכן בין שהקשת לב , ונשיםAk-1 בעצם זהvj של לשכןvi מ-k-1 באורך שמסלול לב נשים

.A זה,Ak = Ak-1 · Aוהרי:

. = Ak[i, j] (Ak-1[i, t] · A[t, j]) ובעצם:

.3 באורך המסלולים מספר יצוינו(i, i)ה- בכניסה – הטענה על-פיהמשולש: יהי – שונים. למשל מסלולים2 מכיל משולש כל כי לב נשים

.u, w, v, u, והשני: u, v, w, u האחד: – 2 הוא המסלולים מספר אזי.2ב- הערך את לחלק יש לכן משלוש על נמצא מהם אחד כל כי לנו - יראו מסוים לש משו על הנמצאים קדקודים שלושה כי לב נשים עוד

A3[vמשולש, שקיים יצייןA3[u, u] משולש. אזי על נמצאיםu, v, w קודקוד – הנ"ל בדוגמא – )כלומר עצמו בפני, v]משולש, ו- שקיים יצייןA3[w, w]המשולש(. לאותו מתייחסים שלושתם משולש, כאשר שקיים יציין.6ב- לחלקו , ובסה"כ, יש3ב- הערך את לחלק יש לכן

u

v w

Page 104: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

104

Page 105: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

105

שאלה:.O(nlog 3) בזמן שלהם הכפלה סיביות. תארn בעליx, y שלמים מספרים2 נתונים

פתרון:

האלגוריתם: תאורy = c * 2n/2 + dנרשום:.1

x = a * 2n/2 + b(.a, b, c, d לווקטוריםy ומ-xמ- סיביות )מעתיקים

v = a * c נחשב:.2 w = b * d

u = (a + b) * (c + d)רקורסיבי( באופן מתבצעות ההכפלה )פעולות

z v * 2n + (u - v - w) · 2n/2 + wנחזיר:.3

סיבוכיות:.O(n) בזמן מתבצעות ביטים, ולכן הזזות הן2n/2 או2nב- ההכפלות , כלn=2k כי מיניחים ואנו מאחר

.O(n) בזמן מתבצעות, כמובן, גם וחיסור חיבור פעולות.O(n) בזמן היא אף , מתבצעתa, b, c, d לווקטוריםx, y הווקטורים העתקת.O(n) בזמן גם מתבצעים3 סעיף של החיבור ופעולות ההזזות

הנסיגה: נוסחת את נקבל2 שלב של מהרקורסיהT(n) = 3 T(n / 2) + O(n) =

= O(nlog 3) = = o(n2)

נכונות:.)* *( מנכונות ישירות נובע

Page 106: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

106

שאלה:.v ו-u נתונים קדקודים2 בין4 באורך המסלולים מספר את ממושקל. חשב מכוון, לא לא גרף נתון

פתרון:

האלגוריתם: תאורנתונה. לא היא , באםA השכניות מטריצת את נחשב.1את: נחשב.2

|Adj[u]| של השכנים - מספר u –של השורה את נסכום uבמטריצה A. |Adj[v]| –של השכנים מספר v –האופן. באותו

.Strassen של האלגוריתם (, על-ידיA2 את נחשב – )כלומרA את בריבוע נעלה.3(.v ל-u מ-2 באורך המסלולים )מספרa:a A2[u, v] למשתנה נציב.4

|]b:b a · | Adj]u[ | + a · | Adj]v למשתנה נציבשכנים(. אינםv ו-u , כאשרv ל-u מ-4 מחזיק את מספר המסלולים הלא פשוטים באורך bכלומר

.Strassen של האלגוריתם , על-ידיA3 את נחשב – , כלומרA ב-A2 את נכפיל.5עליהם, פעמיים(. נמצאuש- המשולשים )מספר. c:c A3[u, u] למשתנה נציב.6

עליהם, פעמיים(. נמצאvש- המשולשים )מספר.d:d A3[v, v] למשתנה נציב.e c + dאת: נחשב (, אזA[u, v] 0 )אםv של שכןu אם.7

.e 0נקבע: – אחרת.Strassen של האלגוריתם , על-ידיA4 את נחשב – , כלומרA ב-A3 את נכפיל.8(.v ל-u מ-4 באורך הפשוטים דווקא המסלולים, לאו )מספר.f: f A4[u, v] במשתנה נציב.9

.g f - b - eכתשובה: נחשב, ונחזיר.10

סיבוכיות:.A:O(n2) השכנויות מטריצת חישוב.1.O(n)במטריצה: הרלוונטית השורה על ריצה.23.Strassen:o(n3)..O(1)הצבה:.45.Strassen:o(n3)..O(1)הצבה:.6.O(1)והצבה: בדיקה.78.Strassen:o(n3)..O(1)הצבה:.9

.O(1)הצבה:.10.O(nlog 7) = o(n3)סה"כ:

נכונות:טענה:

(.k בחזקתA המטריצה היאAk )vj ל-vi מ-k באורך המסלולים מספר הואAk ב-entryה- ערך באינדוקציה: – הוכחה:k=1 עבורנבדוק:

הקדקודים, בין קשת קיימת אם1 הינה במטריצה כניסה וכל הנכונות, מאחר נובעת המטריצה מבניית(.1 באורך מסלול היא שקשת )ברור כזו קשת קיימת לא אם0 או

.n=k עבור נכונותנניח::n=k+1 עבורנוכיח:

v ל-vi מ-k באורך המסלולים למספר השווה מספר שלה(i, j) כניסה בכל מכילהAkש- להראות נרצהj.

ל-vj של השכן בין הקשת , בתוספתvj של לשכןvi מ-k-1 באורך מסלול הינוvj ל-vi מ-k באורך מסלולvj.

vj ל-vj של השכן בין שהקשת לב , ונשיםAk-1 בעצם זהvj של לשכןvi מ-k-1 באורך שמסלול לב נשים

.A זה,Ak = Ak-1 · Aוהרי:

Page 107: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

107

. = Ak[i, j] (Ak-1[i, t] · A[t, j]) ובעצם:

,v ל-u מ-2 באורך המסלולים מספר את מחזיקa – זו טענה פי עלcש- המשולשים מספר את מחזיקuמסלולים2 יוצר משולש כל )כי עליהם, פעמיים נמצא

(,3 באורךdש- המשולשים מספר את מחזיקvמסלולים2 יוצר משולש כל )כי עליהם, פעמיים נמצא

(,3 באורךfמ-4 באורך המסלולים מספר את מחזיק u-ל vהפשוטים(. המסלולים דווקא )לאו

טענה:שכנים. אינםv ו-u , כאשרv ל-u מ-4 באורך פשוטים הלא המסלולים מספר את מחזיקb המשתנה

הוכחה:ולכלu שלw שכן לכל ל-u מ-2 באורךuzv מסלול vקיים ל-u מ-4 באורך פשוט לא מסלול vמספר .

a · | Adj[u] – , כלומרv ל-u מ-2 באורך המסלולים במספרu של השכנים מספר מכפלת הוא האלה המסלולים|.

. |a · | Adj[v], ונקבל: v של השכנים לגבי האופן באותוטענה:

שכנים.v ו-u , כאשרv ל-u מ-4 באורך פשוטים הלא המסלולים מספר את מחזיקf המשתנההוכחה:

v ל-u מ-4 באורך פשוטים לא מסלולים2 נותן עליו נמצאu ש-uwzu משולש כל , אזיv של שכןu אם(.uzwuv, ו- uwzuvהם: )המסלולים

.d המשולשים, כלומר מספר פעמיים היא האלה המסלולים מספרעליהם. נמצאvש- המשולשים לגבי האופן באותוטענה:

.4 באורךv ל-uמ- הפשוטים המסלולים מספר את מחזיקg המשתנההוכחה:

באורך פשוטים הלא המסלולים מספר של להפרש שווהv ל-u מ-4 באורך הפשוטים המסלולים שמספר ברור.v ל-u מ-4 באורך הכולל המסלולים ממספרv ל-u מ-4

את מחזיקv, b ל-u מ-4 באורך הכולל המסלולים מספר את מחזיקfלעיל, שהוכחנו הטענות אבל, על-פי המסלולים מספר את מחזיקfשכנים, ו- אינםv ו-u , כאשרv ל-u מ-4 באורך הפשוטים הלא המסלולים מספר שכנים.v ו-u כאשרv ל-u מ-4 באורך פשוטים הלא

Page 108: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

108

שאלה:.o(n3)ב- בוליאניות מטריצות של לכפל אלגוריתם הצע

פתרון:

האלגוריתם: תאור.B ו-A הן הבוליאניות המטריצות נניח

.O(nlog 7)ב- מטריצות כפל של בעיות פותר , שכידועStrassen של באלגוריתם להשתמש נרצההבוליאני. בעולם מוגדרות אינן כאלו חיסור, ופעולות של פעולות כוללStrassen – אבללכן:

הבא: באופןB המטריצה ואתA המטריצה את נמיר.1.0ל- נהפוךFALSE ; כל1ל- נהפוךTRUE כל

.Cכ- זו מטריצה )"אמיתיים"(. נסמן טבעיים מספרים של מטריצה , ונקבלStrassen של האלגוריתם את נריץ.2הבא: בוליאנית, באופן למטריצה , ונמירהC מטריצה על נעבור.3

שליליים(. מספרים יהיו שלא )ברורTRUEל- נהפוך חיובי מס ; כלFALSEל- נהפוך0 כל

סיבוכיות:.O(n2)המטריצות: על מעבר.12.Strassen:O(nlog 7)..O(n2)המטריצה: על מעבר.3

.n להיות יכול ביותר הגדול שונים, האיבר , במקומותC שהמטריצה נזכור אבל אחד לביט זקוקים אנוFALSEל- אוTRUEשל- ביטים, בעודlog nל- זקוקים אנוn המספר את לייצג בכדי

בלבד..O(nlog 7 · log n)לכאורה: היא הסיבוכיות – לכן

.)B12 + B21· (( A11 + A12)מהסוג: מכפלות קיימותStrassen פועל: ב-Strassen של האלגוריתם כיצד נזכור אבל

· 2n 4= תהיה: המכפלה – ולכן

4n= הבא: ובשלב 16 ·

. 2log n · nהלאה, עד: וכך.log n2 שסברנו, אלא , כפיlog n אינו פעולה כל מחיר – ולכן.O(nlog 7 · log n2) = O(nlog 7 · log n) = o(n3)לבסוף: נקבל ולכן

נכונות: הלינארית האלגברה מתחום עובדות מסתמך הסיבוכיות . )ניתוחStrassen של מנכונותו ישירות נובעת הנכונות

(.B ו-A המטריצות מכפל המתקבלn המספר של ביטים על-ידי לייצוג המחשב. הכוונה ומדעי

Page 109: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

109

שאלה:ממשיות. כפל פעולות3ב- שימוש , תוךc+id ו-a+ib המרוכבים המספרים את לכפול ניתן כיצד הראה

פתרון:

הקלט:a, b, c, d.

הפלט:ac - bd –הממשי. הרכיבad + bc –המדומה. הרכיב

החישובים:

(a + ib) (c + id) = ac + adi + bci + bidi = ac + i(ad + bc) – bd = ac – bd + i(ad + bc)

ac – bd הממשי הרכיב :

כפל. פעולות2ב- הממשי הרכיב את קיבלנו – כלומרהמדומה: הרכיב לחישוב הזו במכפלה נשתמש כעת

ad + bc = (a + b) (c + d) – ac – bd המדומה הרכיב :

חישבנו. שכבר המכפלות2 על(a + b( )c + d) – אחת כפל פעולת הוספנו – כלומר

כפל, כנדרש. פעולות3סה"כ:

Page 110: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

110

אלה: ש.O(n log2 n) בזמןz1, z2, ... , zn ששורשם הפולינום מקדמי את . מצאz1, z2, ... , zn מספריםn נתונים

פתרון:

האלגוריתם: תאורהבא: באופןP(x) את נבנה.1

Pi(x) P(x) = ,כאשר Pi(x) = (x - zi).

.P(x) את נחזיר– 1 היאP(x) של המעלה אם.2אחרת:

חלקים: לשניP(x) את נחלק.3

Pi(x)⌈ P0(x) =

Pi(x) P1(x)=

של הראשונים הרכיבים[n/2] מכפלת את להחזיר , כדיP0(x) עם רקורסיביות, האחת קריאות שתי ונבצעP(x)עם , והשנייה P1(x)מכפלת את להחזיר , כדי [n/2]של האחרונים הרכיבים P(x).

כתוצאה שהתקבל בפולינום הראשונים הרכיבים[n/2] מהכפלת כתוצאה שהתקבל הפולינום את נכפיל.4זו. מכפלה תוצאת את האחרונים, ונחזיר הרכיבים[n/2] מהכפלת

סיבוכיות:.O(n)שורשים: על-פיP(x) הפולינום רישום.1.O(1)בדיקה:.2

הפולינומים: והכפלת הרקורסיבית השגרה הפעלת.4-3הנסיגה: נוסחת על-ידי הדרושות הפעולות מספר את לייצג ניתן

T(n) = 2 T(n / 2) + O(n log n)נקבל: הרקורסיה של -יiה- בעומק

T(n) = 2i T(n / 2i) + i · O(n log n)הרקורסיה: של העצירה תנאי

|n / 2i| = 1ולכן:

T(n) = 2log n T(n / 2log n) + (log n) · O(n log n) = = n · O(1) + O(n log2 n) = = O(n log2 n)

נכונות:הלינאריים: הרכיבים הכפלת על-ידי מתקבלz1, z2, ... , zn המספרים הם ששורשיו הפולינום

(x – z1) · (x – z2) · … · (x – zn).O(n log n)ב- פולינומים הכפלת לבצע ניתןFFT-1 ו-FFT שעל-ידי ראינו

ההכפלה. סדר את רק ההכפלה, אלא תוצאת את משנה אינה קטנות למכפלות המכפלה חלוקת

Page 111: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

111

שאלה:ש: , כךb0, b1, ... , bn-1 ו-a0, a1, ... , an-1 , ומספריםBnn ו-Ann מטריצות שתי נתונות

j i bj-I j i aj-i

0 אחרת0 אחרתאריטמטיות. פעולותO(n log n) של ביצוע על-ידיAB המטריצות כפל את המוצא אלגוריתם תאר

פתרון:

האלגוריתם: תאורכך: המטריצה איברי על להסתכל ניתן

.n-1 ממעלה פולינום של המקדמים – ראשונה שורהימינה. אחד צעד מוזזים האיברים , כאשרn-2 ממעלה פולינום של המקדמים – שניה שורה

הלאה. וכךבמטריצה. התוצאות את מקדמים, ולהציב על-ידי המיוצגים פולינומים מכפלת לחשב יש – כלומרערכים. על-ידי לייצוג מקדמים על-ידי מייצוג הפולינומים ייצוג את , להפוךFFT התמרת נבצעמכפלתם. את הפולינומים, נחשב של ערכים על-ידי הייצוג שברשותנו לאחר

סיבוכיות:1.FFT:O(n log n)..O(n)ערכים: על-ידי בייצוג פולינומים הכפלת.2

.O(n log n)סה"כ:

הערה:O(n2) = O(n2 / 2 ) לנו ייקח במטריצה התוצאות את להציב כדי אריתמטיות, אך פעולותO(n log n) ביצענו אמנם

נכונות:להוכיח. מה אין

השנייה , שהשורהn-1 ממעלה פולינום של למקדמים זהה ראשונה שורה שאכן הוא להוכיח שיש היחידי הדברוכו'. ימינה אחד צעד הזזה , עםn-2 ממעלה פולינום של למקדמים זהה אכן

זה. בקורס איתו מתעסקים שאנו נושא הלינארית, ואינו האלגברה מתחום הוכחה היא זו הוכחה אבל

Bij = } Aij = }

Page 112: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

112

שאלה:טופליץ(. )מטריצתi,j > 1 כל , עבורa[i, j] = a[i-1, j-1]ש: כזאתAnn מטריצה נתונה.o(n2) בזמן שרירותי בווקטורA את המכפיל אלגוריתם מצא

פתרון:

האלגוריתם: תאור

2n-2:aixi מסדר כפולינוםAnn המטריצה את נייצג.1 PA(x) =

. = n-1: bjxj Pb(x) מסדר כפולינוםb הווקטור את נייצג.2

.IFFT ו-FFT באלגוריתמי שימוש על-ידיPD(x) = PA(x) · Pb(x) המפכלה את נבצע.3 ndn-1+i??? המקדם: ?????? הואPD(x) ?????? המכפלה ממקדמי מתקבלc המכפלה ווקטור.4

סיבוכיות:FFT-ו IFFT:O(n log n).

?????

נכונות:???????

Page 113: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

113

שאלה:-ים(.0 הם לאלכסון מתחת )שהאברים עליונה משולשיתBnn כלשהי, ומטריצהAnn מטריצה נתונה.O(n2 log n) בזמןC = B · A המטריצות מכפלת את המוצא אלגוריתם תאר

פתרון:

האלגוריתם: תאור( b0, b1, ... , bn-1) כפולינום:Bnn המטריצה את נייצג.1

(an1, ... , a11) פולינומים:n כ-Ann המטריצה את נייצג(an2, ... , a12)

…(ann, ... , a1n)

ערכים. על-ידי ייצוג לקבלת לפולינומיםFFT התמרת נבצע.2 המטריצה את המייצג בפולינוםA המטריצה את המייצגים הפולינומיםn את , נכפילC המטריצה לקבלת.3

Bב- שימוש מקדמים, על-ידי על-ידי התוצאה ייצוג כדי , תוךFFT-1.

סיבוכיות:.O(n2)כפולינומים: המטריצות ייצוג.12.nהתמרות FFT:n · O(n log n) = O(n2 log n).3.nערכים על-ידי המיוצגים פולינומים על כפל פעולות +FFT-1:n · O(n log n) = O(n2 log n).

.O(n2 log n)סה"כ:

נכונות:באינדוקציה:

נכון. , האלגוריתםnn מטריצות עבורהנחה::(n+1)(n+1) מטריצות עבורנוכיח:

Page 114: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

114

שאלה: ,A, B נקודות שתי נתונים . עודQ בתוך נמצאיםP קודקודי שכל במישור, כךP, Q קמורים מצולעים שני נתונים

ומחוץQ בתוך כולו הנמצאB ל-Aמ- ביותר קצר מסלול המוצא אלגוריתם . הצעPל- , ומחוץQ בתוך הנמצאות.Pל-

פתרון:

האלגוריתם: תאור.B ומ-A, מ-P מהקמור קדקודים המכיל'P מצולע קמור, נבנה למציאתGraham של אלגוריתם על-ידי.1:B ל-Aמ- מסלולים של האפשרויות שתי ייתכנו כעת.2

.A מקודקוד ימינה הליכהא..A מקודקוד שמאלה הליכהב.

המסלול. אורך את ונזכור שמאלה פעם המסלול; ונלך אורך את ונזכור ימינה פעם נלךשקיבלנו. האורכים בין נשווה.3

.Q ובתוךPל- שמחוץ קדקודים דרך , העוברB ל-Aמ- ביותר הקצר המסלול הוא הקטן האורך עם המסלול

סיבוכיות:1.Graham:O(g log n)..O(n)הצלעות: על מעבר.2

.O(n)סה"כ:

נכונות::P שבתוך קדקודים דרך עוברB ל-Aמ- שהמסלול יתכן שלא תחילה נראה

לקמור, ומכיוון מחוץ קדקודים שיהיו נותן לאB ו-P, A של הקדקודים את המכיל הקמור למציאת האלגוריתםאותם. מכיל בהכרח'P החדש הקמור , אזיPל- מחוץ נמצאיםB ו-A הנקודות כי שנתוןשמצאנו. מהמסלול , השונהB ל-Aמ- ביותר קצר מסלול שקיים בשלילה נניח כעת.P של הפנים דרך לעבור צריך אינו בהכרח הוא – כך אם של שהוצע, והמסלול האלגוריתם שמניב המסלול הוא משולש של הבסיס כאילו שנוצר המצב על להסתכל ניתן

המשולש. צלעות הינו השלילה הנחת "האמיתי", המסלול לבין מצא שהאלגוריתם יותר, והמרחק שטוחות זוויות בעל הינו מצא שהאלגוריתם המסלול

קצר. יותרP של הקמור לבין,A דרך העובר "הקצר" מהישר המסלול של המרחק כן כמו Bיותר הקצר המסלול של מהמרחק גדול

מצא. שהאלגוריתם

Page 115: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

115

שאלה: של הפנימי לחלק שייכתP האם . בדוקP נקודה זה(, ונתונה את זה חותכים לא )שצלעותיו פשוט מצולע נתון

.O(n) בזמן לו מחוצה המצולע, או

פתרון:

האלגוריתם: תאורלמצולע. שייךPiPi+1 שהקטע , כךP1, P2, ... , Pnב- מסומנים המצולע שקדקודי נניח

.P1(x1, y1), P2(x2, y2)הבא: באופן מיוצגות הנקודותאליו. שייךP אם נבדוק המצולע שלPiPi+1 קטע לכל.1

נקודה קטעים לשני )אם המצולע של השפה על נמצאPש- האלגוריתם, וקובעים את מפסיקים – כן אםכנחתכים!( הקטעים את נגדיר – משותפת אחת

.0 ב-count מונה נאתחל.2המצולע: שלPiPi+1 קטע לכל.3

דבר. עושים לא– Pמ- שיוצאת הימנית הקרן עם נחתך לא הקטע אםא..1 ב-countאת נגדיל– yi yi+1הקרן, ו- עם נחתךPiPi+1 הקטע אםב. אז: – yi = yi+1הקרן, ו- עם נחתךPiPi+1 הקטע אםג.

I)אם yi+2 < yi < yi-1או , yi-1 < yi < yi+2 –את נגדיל אז count-1 ב.II)דבר. עושים לא – אחרת

.Pמ- שיוצאת הימנית הקרן על נמצאת היא האם בודקיםPi לכל.4.1 ב-count את נקטין אז– yi+1 < yi < yi-1 אוyi-1 < yi < yi+1נמצאת, ומתקיים: היא אם

המצולע. בתוך נמצאתP אזי – אי-זוגי הואcount של הערך אם.5

סיבוכיות:.O(n) קטעים(:n) קדקודיםn קיימים.1.O(1)הצבה:.2.O(n) קטעים:n קיימים.3.O(n) קדקודים:n קיימים.4.O(1)בדיקה:.5

ב- החישובים את לבצע ניתן – קמור מצולע לגבי מנוסחת השאלה אותה * אם.O(n)סה"כ:O(log n)

נכונות:טענה:

בסיום אם"ם המצולע בתוך נמצאתP המצולע, אזי של קודקוד אף מכילה לאPמ- שיוצאת הימנית הקרן אםאי-זוגי. הואcountה- ערך האלגוריתם

הוכחה:.xQ1 < xQ2 < ... < xQk , ונניחQ1, Q2, ... , Qk בנקודות המצולע קטעי עם נחתכת הקרן כי נניח : כיוון

אותנו מכניסה מהמצולע, או החוצה אותנו מוציאה אוQi עם פגישה ימינה, כלPמ- הקרן על כשזזיםהמצולע. לתוך

מוציאהQ3פנימה, אותנו מכניסהQ2החוצה, אותנו מוציאהQ1 המצולע, אז בתוך נמצאתP אםהלאה. החוצה, וכך שוב אותנו

Qkהחוצה, ולפיכך אותנו להוציא חייבת kאי-זוגי. להיות חייב מספר בהשוואה יותר אחת יציאה שיש החוצה, נובע יציאה להיות חייבתQ1ש- בגלל אי-זוגי, אזk אם : כיוון

פנימית. נקודה היאP הכניסות, לכןטענה:

חייבים , נהיהyi+1 < yi < yi-1 אוyi-1 < yi < yi+1 שמתקיים הקרן, כך על שנמצא המצולע שלPi קודקוד כל.1 ב-count את להקטיןהוכחה:

אחת. יציאה או אחת כניסה רק יש קטעים, אבל שני עם נחתכת הקרן האלה המקרים בשניטענה:

לעדכן צורך אין , אז(yi-1 > yi yi+1 > yi) או(yi-1 < yi yi+1 < yi)ומתקיים: הקרן על נמצאPi קודקוד אם.count את

הוכחה:כניסות0 יש קטעים, אבל שני עם נחתכת הקרן האלה במקרים יציאות, ולכן0ו- נשארתcount של הזוגיות תקינה.טענה:

Page 116: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

116

PiPi+1 שהקטע , אוyiyi+1ו- הקרן עם נחתךPiPi+1 שהקטע המצולע, ומתקיים של קדקודים מכילה הקרן אם

נכון.count את מעדכן האלגוריתם , אזיyi=yi91ו- הקרן עם נחתךהוכחה:

גיאומטריים. משיקולים – ברורהאלגוריתם. נכונות נובעת – לעיל שהוכחו מהטענות

Page 117: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

117

שאלה:.O(n log n) בזמן פשוט מצולע הוא זה מצולע האם הבודק אלגוריתם קדקודים. הצעn בעל מצולע נתון

פתרון:

האלגוריתם: תאורהמצולע. קשתות את נמספר.1השינוי: (, עם462 בעמוד )המתוארAnySegmentIntersect האלגוריתם את נפעיל.2

נחתכים: שהם שמצאנו הקטעים מספרי על נביט חיתוך נחשיב לא אזי–" )ציקלי( n" ממוספר ", והשני1" ממוספר שהאחד עוקבים, או המספרים אםא.

באלגוריתם. זה, ונמשיךפשוט. מצולע אינו המצולע ", אזיn" ו-"1" לא עוקבים, והם אינם המספרים אםב.

פשוט. מצולע הינו המצולע אזי – נחתכים קטעים זיהינו מסתיים, ולאAnySegmentIntersect האלגוריתם אם

סיבוכיות:.O(n)המצולע: קשתות מעבר.12.AnySegmentIntersect:O(n log n).

נכונות:הגדרה. על-פי – נחתכות אינם קשתותיו אשר מצולע הוא פשוט מצולעפשוט. מצולע אינו זה שמצולע הרי – חותכים קטעים נמצא אם – מכאן

פשוט. מצולע שהוא ברור – אחרתמוכחת. זה אלגוריתם של נחתכים, והנכונות קטעים מוצאAnySegmentIntersect האלגוריתם כי יודעים אנו

יש שכן – יחתכו "האחרונה" לעולם "הראשונה" והקשת הקשת עוקבים, וכן קטעים שזוג לב לשים רק נצטרךלחלוטין. ברורות ב', מסיבות2א' ו-2 בסעיף הבדיקות את הוספנו כך משותפת. לשם קודקוד להם

Page 118: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

118

שאלה: הקמור אתO(log n) בזמן . מצאPל- מחוץ הנמצאתQ במישור, ונקודה קדקודיםn בעלP קמור מצולע נתונים

PQ.

פתרון:

ייסוד: הנחתהשעון. כיוון כנגד ממוספרים הקדקודים

הרעיון: התנאים:2 את המקיימות הקמור של נקודות2 נחפשבקמור. הנבדקתPi הנקודה של - הזווית זווית נסמן : 1 תנאי

.1שנוצרה: החדשה זווית את בקשת. נסמןQ הנקודה עםPi הנקודה את נחברשלילי. להיות צריך - 1 ההפרש

.180מ- קטנה1 הזווית : 2 תנאי

האלגוריתם: תאורהראשונה: הנקודה את נחפש.1

התנאים: את , ונבדוק בקודקוד נתחיל

הרצויה. הנקודה את מצאנו – מתקיימים התנאי2 אם-

לא1 תנאי אם- עד1מ- הקדקודים את נזרוק – מתקיים של הימני בחלק לחפש , ונמשיך-1

שוב(. האמצע, ובודקים את )בוחרים בינארי הרשימה, בחיפוש

השמאלי החלק בינארי בחיפוש , וממשיכיםn עדמ- הקדקודים את נזרוק – מתקיים לא1 תנאי אם-

הרשימה. שלהרשימה(. של הימני )בחלק הקמור של השמאלי בצד נחפש הראשונה הנקודה את

הרשימה(: של השמאלי )בצד הקמור של ימין השנייה, בצד הנקודה את נחפש האופן באותו.2התנאים: את הקמור, ונבדוק של השמאלי בחצי האמצע נקודת את נבחר

הרצויה. הנקודה את מצאנו – מתקיים התנאים2 אם-)ימין(. השעון בכיוון שנמצא בחצי אמצעית נקודה נבדוק – מתקיים לא1 תנאי אם-)שמאל(. השעון כיוון נגד שנמצא החצי אמצעית נקודה נבדוק – מתקיים לא2 תנאי אם-

הקמור. שביניהן, על שמצאנו, ומהנקודות הנקודות , משניQ מהנקודה מתקבלPQ המבוקש הקמור.3

סיבוכיות:.O(log n)בינארי: חיפוש

נכונות:טענה:

( - 1 < 0)כלומר: נכון1 תנאיהוכחה:

.1מ- קטנה להיות צריכה הישנה, ולכן הזווית את להכיל צריכה החדשה הזוויתטענה:

נכון2 תנאיהוכחה:

כזה. מצב נקבל לא1 > 180 שמאלה, ואם לפנות צריכות - הקשתות השעון בכיוון הולכים אם – קמור לפיטענה:

נכון. האלגוריתםהוכחה: גדלה.1 הזווית זה בכיוון השעון, כי כיוון נגד הלכנו – התקיים לא1 תנאי הראשונה, אם הנקודה בחיפוש

קטנה.1 הזווית זה בכיוון השעון, כי בכיוון הלכנו – התקיים לא2 תנאי אםהשנייה. הנקודה בחיפוש הפעולה אופן – זהים משיקולים

Page 119: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

119

Page 120: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

120

שאלה: PiPi+1 הקטעים ובמקוםPi נקודהAמ- . מורידיםA בתוך כולו נמצאBש- , כךB ו-A קמורים מצולעים2 נתונים

.Pi-1Pi+1 קטע מעביריםPi-1Piו-.O(log n) בזמן ההורדה אחריAB הקמור את המוצא אלגוריתם הצע

פתרון:

האלגוריתם: תאורמשמאל. נניח – הכלליות הגבלת בלי אחד מצדB קדקודי כל את , שמשאירBל- משיקPi-1מ- נעביר.1

בזמן . למצואAל- מחוץ שנמצאתB ונקודהA קמור מצולע הפותר: נתון האלגוריתם על-ידי זאת )נבצעO(log n)מ- המשיק אתB-ל Aמשמאלו(. נמצאים המצולע קדקודי שכל , כך

.Qi-1ב- ההשקה נקודת את נסמןימין. מצד האחר, כלומר מהצדB קדקודי כל את , שמשאירBל- משיקPi+1מ- נעביר.2

.Qi+1ב- ההשקה נקודת את נסמן:u = Pi-1Qi-1, ו- w = Pi+1Qi+1לווקטורים: נתייחס.3

ל-uמ- הקצר הסיבוב אםא. wהוא , לאחרA שפת היא המבוקש הקמור שפת אזי – השעון כיוון נגד .Pi הורדתזו, ונסיים. תשובה נחזיר

זהה, ונסיים. תשובה נחזיר – מנוגדיםw ו-u אםב. ,Pi-1Qi-1 היא: הקטע המבוקש הקמור שפת אזי – השעון כיוון עם הואw ל-uמ- קצר הכי הסיבוב אםג.

עדB שפת של החלק Qi+1בהתקדמות( עדA משפת , החלקQi+1Pi+1 השעון(, הקטע כיוון נגד Pi-1

השעון(. כיוון נגד )בהתקדמות - נמשיך אחר מקרה בכלג.

סיבוכיות:.O(log n)השאלה: תת פתרון על-פי.1.O(log n)האופן: באותו.2.O(1)בדיקות:.3

.O(log n)סה"כ:

נכונות:גיאומטריים. משיקולים – "הכל" בפנים – השעון כיוון לפיגיאומטריים. - משיקולים "הכל" בחוץ – השעון כיוון נגד

Page 121: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

121

שאלה:.B ל-Aמ- ביותר קצר מסלול . מצאPל- מחוץ הנמצאותA, B נקודות במישור, ושתיP קמור מצולע נתונים

פתרון:

הרעיון:.PAB של הקמור שפת על עובר בהכרחPל- נכנס שלא ביותר קצר מסלול

האלגוריתם: תאורבנושא(. שאלה )ראהPA של הקמור את נמצא.1בנושא(. שאלה )ראשהPB של הקמור את נמצא.2.AB הקטע הואB ל-Aמ- ביותר הקצר המסלול אזי– A היא החיבור הנקודות אחת2 בשלב אם.3

אחרת: ימני. עוד קיצוני קודקודPmשמאלי, ו- קיצוני קודקודPk שקודקוד , כךPk ו-Pm הן החיבור נקודות ששתי נניח.Pj , ואחר-כךPm , אחר-כךPk , אחר-כךPi יהיה הקדקודים השעון, סדר כיוון נגד נלך שאם נניח

מביניהם. המינימלי את , ונבחרAPjPj-1...B ו-APiPi+1...PkB המסלולים אורכי את נחשב אזהמסלול(. את המרכיבות הצלעות מספר הוא המסלול )אורך

סיבוכיות:.O(log n)הקמור: מציאת.1.O(log n)כנ"ל:.2.O(n)הקשתות: על מעבר.3

.O(n)סה"כ:

נכונות:

Page 122: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

122

שאלה: בזמןl2 ו-l1 ישרים שני הקמור. מצא את , וחוסמיםlל- , המקביליםl2 ו-l1 ישרים ושניl קמור, ישר מצולע נתון

O(log n).

פתרון:

הרעיון: שכל הישר לעבור צריך שדרכה הנקודה את למצוא מנת המצולע, על קדקודי בין בינארי חיפוש מעין נבצע

משמאלו. נמצאות המצולע נקודות.Pfirst, Pfirst+1, ... , Plast – המצולע קדקודי מרשימת בחלק מסתכלים פעם כל

הנתון, לפי לישר שמקביל ישר דרכו האמצעי, מעבירים הקודקוד את חצאים, לוקחים לשני החלק את מחלקיםהחיפוש. את להמשיך חלק באיזה קרובים, וקובעים הכי קטעים זני עם יוצר שהישר הזוויותמימינו. נמצאים הקדקודים שכל הישר עבור גם התהליך את נבצע – כמובןנגדיר:

הנתון. הישר של כלשהו כיוון ווקטורv יהי עםvמ- מתקבלPfirstPfirst+1 . אםPfirstPfirst+1 ו-v הוקטורים ביןfirst הזווית את כך: מודדים שמוגדרת זוויתfirst תהי

.first = firstנקבע: . אחרתfirst = -firstנקבע: – השעון סיבובהבאות: הזוויות את נחשבPi קודקוד לכל

-בין הזווית v-ו PiPi+1. "-" ) סימן השעון, או כיוון קצר( נגד )הכי סיבוב עם מתקבלPiPi+1 חיובית( אם"+" ) סימןל- נקבע

השעון. כיוון קצר( עם )הכי סיבוב עם מתקבלPiPi+1 שלילית( אם -עבור אופן באותו v-ו PiPi-1.

.180-כ- , ולא180כ- ביניהם הזווית את ניקח מנוגדים, אז וקטורים שני יש אם – הנ"ל הזוויות להגדרות

האלגוריתם: תאורמשמאלו. נמצאים המצולע קדקודי שכל הדרושים( הישר הישרים )אחדl1 מציאתא.

בהתאמה.n ו-1 על-ידי אותם , ומאתחליםlast ו-first משתנים מגדירים.17, נבצע:first < last עוד כל.18

I) :נחשבi = .

II)מחשבים θfirstוקטורית. במכפלה שימוש , על-ידיIII)הזויות את מחשבים α, βעל-ידי , Pi.IV)

השינוי: (, עם462 בעמוד )המתוארAnySegmentIntersect האלגוריתם את נפעיל.2

Page 123: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

123

שאלה:(.y לציר )ביחס ביותר הגבוהה הנקודה את . מצאP קמור מצולע נתון

פתרון:

הרעיון: עצמה(Pi לנקודה )פרט הקמור של הקדקודים כל שבהPi הנקודה את , ונחפשxה- לציר מקביל ישר נעביר

זה. ישר )התחתון( של הצד באותו נמצאיםבינארי. חיפוש על-ידי נבצעPi הנקודה אחר החיפוש את

Page 124: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

124

בגרפים גרפים, מסלולים

עמודסיבוכיותשאלה + O(m כלשהו, בזמן בסדרG=(V, E) הגרף צלעות כל את המדפיס אלגוריתם הצע

n).O(m + n)1

O(m + n).O(m + n)2 קשיר, בזמן הואG=(V, E) גרף האם הבודק אלגוריתם הצעהואG=(V, E) מכוון לא גרף האם הבודק אלגוריתם הצע - חסר יער, כלומר

O(n).O(n)3 מעגלים, בזמן

וחסר קשיר – עץ, כלומר הואG=(V, E) מכוון לא גרף האם הבודק אלגוריתם הצעO(n).O(n)4 מעגלים, בזמן

מכוון. הצעG=(V, E) גרף נתון עם מכוון עץ הוא הגרף האם הקובע אלגוריתם O(m + n)6שורש.

את , המכווןO(m) בסיבוכיות אלגוריתם , הצעG=(V, E) מכוון ולא סופי גרף בהינתןO(m)7מכוונים. מעגלים ליצור , מבליG קשתות

לינארי. אם בזמן היטב קשיר שיהיה כך מכוון ולא קשיר גרף המכוון אלגוריתם הצעO(m)8כך. כל הודע – כזה באופן הגרף את לכוון ניתן לא

.O(m + n) בזמן ביותר הארוכה המסילה את מעגלים. מצא חסרG=(V, E) גרף נתוןO(m + n)9(.v מקודקוד ביותר הארוכה הפשוטה המסילה אורך את )למצוא

מעגלי, מסלול – )כלומר אויילר מסלול , המדפיסO(m) בזמן הפועל אלגוריתם תאר לא . אםG מכוון לא גרף בדיוק( של אחת פעם קשת בכל פשוט, העובר דווקא לאוכך. על מודיע – כזה מסלול קיים

O(m)10

כל את לכוון שניתן זוגית. הוכח היא בו צומת כל שדרגת וסופי מכוון בלתי גרף נתוןתאר לדרגת שווה הכניסה דרגת צומת שבכל כך הקשתות בקצרה היציאה.

זו. משימה לביצוע שתוכל ככל יעיל אלגוריתםO(m + n)12

הואG האם הבודק יעיל אלגוריתם וקשיר. הצע , סופיG=(V, E) מכוון לא גרף נתוןדו-צדדי. גרף

באותה קדקודים זוג המחברת קשת שאין כךV2 ו-V1 קבוצות2 ל-V את )לחלקהקבוצה(

קדקודים2 המחברת קשת שאין שונים, כך צבעים2ב- הגרף קדקודי את )לצבועהצבע( באותו

O(m + n)13

O(m·n).O(m·n)14 בזמן וקשיר מכוון גרף של טרנזיטיבי סגור המחשב אלגוריתם הצע אלגוריתם . הצעUV צמתים של קבוצה , ותתG=(V, E) קשיר, מכוון גרף נתון

U.O(m)15מ- אחד קודקוד לפחות דרך עוברGב- מעגל שכלO(m) הזמן הבודק

נגדיר: מספר מופיע ריבוע ריבועים, ובכל2ל- מחולק , אשר12x מלבני קלף- דומינו אבן

הריבועים. בשני המספר אותו גם . )יתכן6 ל-0 בין שלם,x, y {0, 1, 2, ... , 6} [x, y]נסמן:

, כאשר[x1, y1[ ]x2, y2[ ... ]xk, yk]דומינו: אבני של שרשרת- דומינו שרשרת.xi = yi-1 מתקיים: i=2, 3, ... , k לכל

(.[y, x] ל-[x, y] בין הבדל אין – דומינו. כלומר אבני להפוך )הערה: מותר O(N) בסיבוכיות אלגוריתם חזרות(, תן גם )יתכנו דומינו אבניN של אוסף בהינתןכלומר, הדומינו מאבני אחת דומינו שרשרת ליצור ניתן האם הבודק הנתונים.

הדומינו. אבניN כל את תכיל שהשרשרת

O(N)16

,G=(V גרף נתון E)אלגוריתם הקדקודים. מצא על חיוביים מכוון, ומשקלות )לאv ל-u בין במסלול המקסימלי המשקל בעל הקודקוד את לינארי בזמן המוצאפשוט(. בהכרח

O(m + n)17

v קודקוד הקדקודים. לכל על משקלים עם מעגלים חסר מכוון גרףG=(V, E) יהיV:נגיד

} w(u)פשוט( | בהכרח )לאu ל-vמ- מסלול קיים {max = p(v)

.G בגרףv קודקוד , לכלp(v) את לינארי בזמן המוצא אלגוריתם תאר

O(m + n)18

,G=(V גרף נתון E)ושני על משקלים , עם ,s קדקודים הקדקודים, tVתאר . ל-sמ- המסלול את המוצא אלגוריתם tהמקסימלי, הערך בעלת שהקודקוד , כך

O(m log , בזמןt ל-sמ- במסלולים המקסימליים הקדקודים מכל ביותר הקטן יהיהn).

O(m log n)19

הקשתות מספר את המפחית אלגוריתם . תארG=(V, E) קשיר מכוון לא גרף נתוןO(m + n).O(m + n)20 קשירותו, בסיבוכיות על שמירה בגרף, תוך

Page 125: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

125

,u, v, w V קדקודים שלושה קיימים האםO(m) בזמן . מצאG מכוון לא גרף נתוןקשיר. לא גרף תתן שהורדתם , כך E( u, v( ,)u, w( ,)v, w)ש: כאלה

קשיר.( לא יהיהG \ {u, v, w} שהגרף – )כלומרO(m)21

,u, vV צמתים קשיר. זוג בהכרח , שאינוG=(V, E) פשוט גרף נתון uvנקרא , את הניתן, המחשב ככל יעיל אלגוריתם . תארv ל-u ביןGב- מסלול קיים אם קשיר.Gב- קשיריםה הזוגות מספר

O(m + n)22

נקראG=(V, E) מכוון גרף u, vV הקדקודים זוגות כל עבור אם למחצה קשיר .v⇝u , אוu⇝vמתקיים:

למחצה. קשירG האם הקובע יעיל אלגוריתם הצעO(m + n)23

שאינוG=(V, E) מכוון גרף נתון את המדפיס יעיל אלגוריתם קשיר. הצע בהכרח O(m + n)24כלשהו. למעגל השייכים הצמתים כל רשימת

ומספורG=(V, E) מכוון גרף נתון צומת לכל – . כלומרU={1,..., n} הצמתים על ל-1 בין שונה סידורי מספר מתאים nב- . נסמןR[v]שניתן הקדקודים קבוצת את , שמספרוR[v]ל- השייכת = צמת[v] . נגדירGב- מסלול על-ידיvמ- אליהם להגיע

מינימלי. הסידורי.vV לכל[v] את המוצא האפשר ככל יעיל אלגוריתם תאר

O(m + n)25

מכיל נתוןG=(V, E) מכוון לא גרף האםO(m + n) בזמן הבודק יעיל אלגוריתם הצעO(m + n)26הפרדה(. נקודות גם מוצא זה גשרים. )אלגוריתם

.a, bV קדקודים2 וקשיר, ונתונים מכוון לא גרףG=(V, E) נתון., v A(a, b) = { vV | va, b דרך עוברb ל-a בין מסלול כל{נגדיר:

.A(a, b) את המוצא אלגוריתם הצעO(m + n)28

בגרף קיימת האם הבודק אלגוריתם . הצעsV מכוון, וקודקודG=(V, E) גרף נתוןקדקודים, או17 של קבוצה המחוברות הקשתות )עם מהגרף פחות, שהסרתם

מכוון. מעגל אף על נמצא לאs קודקוד בו גרף, אשר אליהם( תשאירO(m + n)30

,s קדקודים , ושניG=(V, E) מעגלים חסר מכוון גרף נתון tVאלגוריתם . תאר G.O(m + n)31 ב-t ל-sמ- השונות המסילות מספר את המחשב לינארי

אלגוריתם . תארI1=(s1, t1), I2=(s2, t2), ... , In=(sn, tn) פתוחים קטעים של אוסף נתון O(n log השני, בזמן את מכיל מהם שאחד קטעים שני קיימים באוסף האם המכריע

n).O(n log n)32

O(m + n)33מעגלים. חסר בגרף מינימלי מסלולים כיסויי למציאת אלגוריתם הצע

Page 126: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

126

ביותר קלים ומסלולים ביותר קצרים מסלולים

עמודסיבוכיותשאלה O(m + n) בזמן המוצא אלגוריתם . הצעUV מכוון, וקבוצה לאG=(V, E) גרף נתוןO(m + n)34הגרף. מקדקודי אחד לכלUמ- ביותר הקצרים המרחקים את

,G=(V מכוון לא גרף בהינתן E)ושתי ,SV קדקודים קבוצות , TVהצע , O(m + n).O(m + n)35 בסיבוכיות ביניהן ביותר הקצר המרחק את המוצא אלגוריתם

,G=(E מכוון לא גרף בהינתן V)ושתי ,SV קדקודים קבוצות , TVהצע , ומ-Sמ- שווה במרחק שנמצאים בגרף הקדקודים כל– Z קבוצה המוצא אלגוריתם

Tבסיבוכיות , O(m + n).O(m + n)36

,G=(V מכוון ולא קשיר גרף נתון E)בסיבוכיות המוצא אלגוריתם . הצע O(m), קצר מסלול כל על הנמצאים הצמתים כל קבוצת , אתt ו-s בגרף צמתים זוג בהינתן. t ל-s בין אפשרי

O(m)38

.t ו-s מסומנים קדקודים ממושקל, ושני מכוון, לאG=(V, E) גרף נתון.t ל-sמ- ביותר קצר מסלול לאף שייכת לא היא אם מיותרת תיקראe צלעלינארי. בזמןGב- מיותרותה הצלעות כל את המוצא אלגוריתם תאר

O(m + n)39

המדפיס אלגוריתם בגרף. כתוב כלשהי צומתuV מכוון. תהי גרףG=(V, E) יהי הודע – מעגל קיים לא בו. אם משתתףuש- ביותר הקצר זוגי האי המעגל אורך אתכך. על

O(m + n)41

אלגוריתם . מצאUV קדקודים , וקבוצתu, vV צמתים , שניG = (V, E) גרף נתון דרך , העוברv ל-u בין ביותר קצר מסלול קיים האם , המבררO(m + n) בזמן הפועל

Uב- הצמתים כלO(m + n)42

. תארA = {a1, a2, ..., an} צמתים , וקבוצתG=(V, E) מכוון לא קשיר גרף נתון קצר מסלול של אורכו אתvV צומת לכל , ומוצאO(m) בזמן הפועל אלגוריתם

.A צמתים מקבוצת ביותר קרוב לצומתvמ- ביותרO(m)44

צמתים (, זוג1 כולם הקשתות )משקלותG=(V, E) וקשיר מכוון, סופי לא גרף נתוןs, tוקבוצה , A V-{s,t}בסיבוכיות אלגוריתם . תאר O(|E|)השאלה על שעונה

דרך , העוברt ל-sמ- ביותר קל מסלול שיש , כךv A צומת קיים הבאה: "האםv"?

O(m)45

. תארt ו-s צמתים , ושניUV צמתים , ממושקל, וקבוצתG=(V, E) מכוון גרף נתון אחת צומת דרך , העוברt ל-sמ- ביותר הקל המסלול אורך את המוצא אלגוריתם

.Uב- לפחותO(m log n)46

,G=(V גרף נתון E)לא ושתי מכוון ,V1 תתי-קבוצות וממושקל, V2Vתאר . O(m log n).O(m log n)47 ב-V2 ל-V1 בין ביותר הקל המסלול את המוצא אלגוריתם

,G=(V גרף נתון E)מכוון ונתונים קדקודים2 וממושקל, s, tV :נגדיר אורך. בין ביותר כבד מסלול המוצא אלגוריתם ביותר. הצע הכבדה הקשת כמשקל מסלול.t לצומתs צומת

O(m log n)48

.e , וקשתt ו-s צמתים הקשתות, זוג על אי-שליליים משקלים עם מכוון לא גרף נתון המסלולים כל על נמצאתe הקשת אם הבודק שתוכל ככל יעיל אלגוריתם הצעא.

.t ל-s בין ביותר הקלים כלשהו ביותר קל מסלול על נמצאתe הקשת האם הבודק יעיל אלגוריתם הצעב.

. t ל-s בין

O(m log n)49

הקשתות. הקשתות על אי-שליליים משקלים עםG=(V, E) מכוון לא סופי גרף נתון.s קודקוד ושחור. נתון צבעים: אדום בשני צבועות

משקל אתvV קודקוד לכל , שמוצאO(m log n) בסיבוכיות אלגוריתם הצעא.ל-sמ- המסלולים מינימלי( בין הקשתות משקלי )שסכום ביותר קל מסלול v,

אדומות. קשתות של זוגי מספר המכילים משקל אתvV קודקוד לכל , שמוצאO(m log n) בסיבוכיות אלגוריתם הצעב.

ל-sמ- המסלולים מינימלי( בין הקשתות משקלי )שסכום ביותר קל מסלול v, שחורות. קשתות של אי-זוגי ומספר אדומות קשתות של זוגי מספר המכילים

O(m log n)51

הקשתות. כמו-כן על0מ- וגדולים שלמים משקלים , עםG=(V, E) מכוון גרף נתון קודקוד לכלsמ- ביותר קלים מסלולים למציאת אלגוריתם הרצת של הפלט נתוןלכל אחר שמצא ביותר הקל המסלול משקל רשום הגרף קודקוד בגרף:

לנו עצמם(. נאמר המסלולים את מוציא לא )האלגוריתם אליו ועדsמ- האלגוריתםביותר. הקצרים גם הם האלגוריתם שמצא המסלולים שכל

לשארsמ- ביותר קלים מסלולים משקלי למציאת יעיל אלגוריתם הצעא. .1ב- קשת כל של המשקל את מגדילים הגרף, כאשר קדקודי

א.O(m + n)

ב.O(m log n)

53

Page 127: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

127

לשארsמ- ביותר קלים מסלולים משקלי למציאת יעיל אלגוריתם הצעב. .1ב- קשת כל של המשקל את מקטינים הגרף, כאשר קדקודי

קשתותיו. מסלול משקלי סכום מבחינת מינימלי הוא ביותר קל מסלולהערה:הקשתות. מספר מבחינת מינימלי הוא ביותר קצר

הקשתות על חיוביים משקלות עם מכוון לא גרף בהינתן יעיל, אשר אלגוריתם תארבגרףv קודקוד כל , מסמןs מקור וקודקוד קצר מסלול אורך הבא: אם באופן

ביותר הקלים המסלולים מבין ביותר קצר מסלול מאורך ממש קטןv ל-sמ- ביותרל-sמ- vהוא מסלול "=". )אורך בסימון ">". אחרת, יסומן בסימון יסומן , אזי

בו(. הקשתות משקלי סכום הוא מסלול בו. משקל הקשתות מספר

O(n + m log n)

קשיר: אםO(m log n)

54

אי-שלילי. דווקא , לאוl(e) ממשי אורך ישe . לקשתG=(V, E) וסופי מכוון גרף נתוןשליליים. מעגליםGב- יתכנו

משקל המחזיר אלגוריתם , תארk (|V| > k) טבעי ומספרi, jV צמתים שני בהינתן קשתותk פשוטים( שבהם דווקא )לאו המכוונים המסלולים כל מבין מינימום מסלולבדיוק.

O(k · m)55

,T=(V יהי E)עץ מוגדרT של הקשתות. הקוטר על אי-שליליים משקלות עם )מסלול הקוטר את המוצא אלגוריתם . הצעTב- צמתים שני בין המקסימלי כמרחק

.O(n) בזמןT קדקודים( של2 בין ביותר כבדO(n)57

.u, vV קדקודים שני מעגלים, ונתונים וללא מכוון, ממושקלG=(V, E) גרף נתוןO(m).O(m)58 בזמןv ל-uמ- ביותר הארוך המסלול את המוצא אלגוריתם תאר

. איןw : E ℝ הקשתות על משקל פונקצית , עםG=(V, E) מכוון סופי גרף נתוןשלילי. שמשקלם מכוונים מעגליםGב-

את מסמן(u, v) , כאשר = *(v) {(u, v)} , נגדיר: vV קודקוד לכל

.v לקודקודu מקודקוד המרחק .v, (v, v) = 0 כל שעבור לב שים.O(m · n) בסיבוכיות הגרף קדקודי לכל*(v) את המוצא אלגוריתם הצע

O(m · n)59

שלושה נתונים הקשתות. עוד על חיוביים משקלים עםG=(V, E) מכוון גרף נתונים , העוברy ל-xמ- ביותר קצר מסלולO(m log n) בזמן . מצאx, y, z Vקדקודים:

פעמים. של זוגי מספרv דרךO(m log n)60

שני אי-שליליים, ונתונים במשקלים מכוון, וממושקל פשוט, לאG=(V, E) גרף נתוןv.O(m log n)62 ל-u בין ביותר הקל הזוגי המסלול את המוצא אלגוריתם . תארu, vV קדקודים

,G=(V ממושקל מכוון לא גרף נתון E)צמתים , שני u, vVוקשת , eEתאר . e.O(m log n)63ב- , המשתמשv ל-uמ- ביותר קל מסלול המוצא אלגוריתם

המשקלים כל כי הצלעות. נתון על משקלים מכוון, קשיר, עם לא גרףG=(V, E) יהישונים.

נקראתe צלע מקסימלית היא אם רעהמסוים, ו- בחתך מינימלית היא אם טובה מסוים. במעגל

.רעה או טובה היא האם , קובעeE צלע בהינתן לינארי, אשר אלגוריתם תאר

O(m + n)64

גרף תתH הצלעות. יהי על חיוביים משקלים עם קשיר מכוון לא גרףG=(V, E) יהי של צלעות של קבוצה תת המוצא יעיל אלגוריתם . תארV[H] = V[G]ש: כךG של

Gל- שהוספתה אפשרי, כך מינימלי משקל בעלתHלקשיר. אותו הופכתO(m log m)65

נתונים הקשתות. עוד על משקלים עם מעגלים וחסר מכוון, G=(V, E) גרף נתון המסילה את הקלט, המוצא באורך לינארי אלגוריתם . תארs, t V קדקודים שני

.t ל-sמ- ביותר הקצרהO(m + n)66

. המחירvV קודקוד לכלcost[v] 0 אי-שלילי מחיר עםG=(V, E) מכוון גרף נתון התחלה קדקודי )כולל המסלול על הקדקודים מחירי כסכום מוגדר מסלול של

.t נתון , לקודקודs נתון מקודקוד ביותר זול מסלול וסיום(. מצאO(m log n)67

של הצמתים כל בין מרחקים מכוון, ממושקל, ומטריצת לאG=(V, E) גרף נתוניםGבזמן . מצא O(n3)באלגוריתם שימוש ללא Floyd-Warshallביותר קלים מסלולים

צמתים. זוג כל ביןO(n3)68

,G=(V גרף נתונים E)לא ונתונה על חיוביים משקלים עם מכוון תת הקשתות, ש: כךv ל-u מ-P מסלול . מצאu, vV צמתים , ושניUV צמתים של קבוצה

.Uמ- אחת בצומת לפחות משתמשPב.

א'. סעיף את המקיימים המסלולים כל הין מינימלי הואP של המשקלג.

O(n + mlog n)קשיר: אם

O(m log n)69

אי-שליליים משקלים מכוון, עםG=(V, E) גרף על-ידי המתוארת כבישים רשת נתונה.v לעירu מעיר המרחק את מציין(u, v) הקשת הקשתות. משקל על

הוא מטען ללא משאית הבאים: גובה באילוצים בכבישים נוסעת מטען עם משאית מטר.4 הוא מטען עם משאית מטר, וגובה2

בהם, היא עוברת מטען עם משאית שאם סוגים: צמתים לשני מסוגיםV הצמתים

O(m log n)70

Page 128: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

128

במשאית. המטען את משנים רגילים, שאינם המטען, וצמתים כל את בהם מורידהמסווגותE הקשתות מטר,3 שגובהו גשר בהן שיש סוגים: קשתות לשני הן אף גשר(. יש בה בקשר לעבור יכולה לא מטען עם )משאית גשר בהם שאין וקשתות

המסלול משקל את רגילים, מוצא צמתיםs, tV צמתים אלגוריתם, שבהינתן הצע.sמ- לדרכה יוצאת המשאית , כאשרt ל-sביותר( מ- )הקל ביותר הקצר

במורד להחליק רצה סקי. הוא לחופשת החורף סמסטר בתום נסע זיגזג פרופסור ,t המסומנת בנקודה , מסתייםs המסומנת בנקודה מתחיל סללום. המסלול מסלול שורה הבא: בכל באופן לרוחבו. מחליקים דגלים של שורות יש המסלול ובמורד החופשה, פרופסור ההחלקה. בתחילת כיוון את הדגלים, ומשנים אחד את עוקפים

האפשר ככל ארוך בנתיב – האפשר, כלומר ככל מתון החלקה בנתיב מעוניין זיגזג מעוניין החופשה, הוא השורות(. בסוף בין הקטעים מרחקי = סכום הנתיב )אורך

אלגוריתם האפשר. תאר ככל קצר בנתיב – האפשר, כלומר ככל תלול במסלולהללו. הנתיבים לחישוב יעיל

O(m log n)71

דלק מיכל שלו הבחינות. למכונית תקופת בתום באילת לחופשה נוסע פרופ' שושניקילומטרים30 למרחק נסיעה זעיר, המאפשר בידיו של מדויקת מפה בלבד.

הן הקשתות וממושקל, כאשר מכוון גרף בצורת היא דלק. המפה ותחנות כבישים דלק. עליך תחנות יש מהצמתים חלק גבי מרחקים, ועל הם כבישים, המשקלות

יעיל הגרפים( אלגוריתם בתורת באלגוריתמים בקיא )שאינו לפרופ' שושני לספק בגרף(, באופן צמתים )שני לאילת מחיפה מינימלי באורך נסיעה מסלול למציאת

קילומטרים30מ- יותר יעבור לא שהמסלול )ניתן אחת דלק תחנת בין לבאה. מיכל עם ליעדו להגיע מלא, ומוכן מיכל עם מסעו את מתחיל שפרופ' שושני להניחריק(

O(n · m log n).73

Page 129: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

129

פורשים עצים

עמודסיבוכיותשאלהלאG=(V, E) גרף נתון ,p=<u מסלול של בקבוק צוואר מכוון, ממושקל. נגדיר

e1, ..., ek, v>הערך: אתw(e) b(p) = כאשר , w(e)הקשת משקל הוא e.

בקבוק צוואר בעלv ל-uמ- מסלולO(m log n) בזמן , מצאu, v צמתים שני בהינתןמקסימלי.

O(m log n)75

קשיר, לאG = (V, E) גרף נתון .UV קדקודים קבוצת מכוון, ממושקל. נתונה O(m log n)76זה. עץ של בעלים יהיוU שקדקודי כך מינימלי פורש עץO(m log n) בזמן מצא

Gמ- בתוכו. מורידיםT מינימלי פורש , ועץG וממושקל מכוון, קשיר לא גרף נתוניםO(m) .O(m)77 , בזמן G' = G \ e בגרף מינימלי פורש עץ . מצאe=(u, v) קשת

בזמן הקשתות. מצא על חיוביים משקולות בעלG=(V, E) מכוון ולא קשיר גרף נתוןO(m log n)עץ שלT פורש Gכזה תהייהTב- הקשתות משקלות שמכפלת , מקסימלית.

O(m log n)78

מינימלי משקל בעל פורש עץ וממושקל. מצא מכוון, קשיר לאG=(V, E) גרף נתוןO(n2).O(n2)79ב- טוב הכי שני

O(mב- במשקלו שני מינימלי פורש עץ וממושקל. מצא מכוון לאG=(V, E) גרף נתוןlog n).O(m log n)80

אלגוריתם בו. תןT מינימלי פורש ממושקל, ועץG=(V, E) מכוון לא קשיר גרף נתון יהיה'T ול-Tל- המשותפות הקשתות שמספר , כךG ב-'T מינימום פורש עץ המוצא

.O(m log m) מינימלי, בזמןO(m log n)81

בתוכו. מוסיפיםT מינימלי פורש ממושקל, ועץG=(V, E) מכוון לא קשיר גרף נתון ,G' = G {(u, v)} בגרף'T מינימלי פורש עץ . מצאGל- חדשה(u, v) קשת.O(n) בזמן

O(n)82

.pri(G) = הבא: באופןG=(V, E) גרף של עדיפות נגדיר

ש: מתקייםe קשת שלכל הקשתות, כך על משקלים עם מכוון סופי, לא גרף בהינתן0 < w(e) < 1מקסימום. עדיפות בעל פורש עץ שמחזיר אלגוריתם , תן

O(m log n)84

קשת אי-שליליים. נתונה משקולות וקשיר, עם מכוון, פשוט לאG=(V, E) גרף נתוןeEהקשת את המכילים העצים מבין המוצא אלגוריתם . כתוב eהפורש העץ את

(.e הקשת את המכיל מינימלי פורש עץ למצוא – )כלומר המינימליO(m log n)85

Gל- בתוכו. מוסיפיםT מינימלי פורש מכוון, ממושקל, ועץ לא גרףG=(V, E) נתון אלגוריתם . הצעu, vV . כאשר(w, v), (w, u)קשתות: , ושתיwV חדש קודקוד.O(m)ב- החדש בגרף מינימלי פורש עץ המוצא

O(m)86

– )כלומר+ : Eℝ משקל פונקצית )קליקה(. נתונה מלאG=(V, E) גרף נתוןעםE'E קשתות קבוצת המוצא אלגוריתם אי-שליליים(. הצע משקלים סכום קשירות. מרכיבי3מ- היותר לכל מורכבG'=(V, E') שהגרף מינימלי, כך משקלות

O(m log m) O(m log n) אוO(n2 log n) או

87

אי-שליליים. במשקלים מכוון, קשיר, וממושקל לאG=(V, E) סופי גרף נתון הינוv צומת לכלsמ- המסלול בוG של פורש כעץsל- ביחס ביותר קל עץנגדיר:

.G ב-v ל-sמ- המסלולים כל מבין מינימום משקל בעל.sל- ביחס ביותר קל עץG ו-s המוצא, בהינתן אלגוריתם הצע

O(m log n)88

יערO(m log m) בזמן . מצאUV קדקודים , וקבוצתG=(V, E) גרף נתון פורש U.O(m log m)89 לקבוצה השייך בלבד אחד קודקוד ישנו עץ בכל מינימלי, בו

.E| - |V| | 100| |וממושקל. נתון: מכוון, קשיר לא גרףG יהיG.O(n)90ב- מינימלי פורש עץ , המוצא|V|ב- לינארי אלגוריתם תאר

בלבן. או בכחול צבועה קשת . כלG=(V, E) וממושקל מכוון, קשיר לא גרף נתון הכחולות הקשתות ללא מינימלי פורש עץ קיים האם הבודק אלגוריתם תאר

20 ממשקל הקשתות כחולות, וכל הן פחות או10 ממשקל הקשתות והלבנות. כלהקשתות. שאר של הצבעים לשאר משמעות לבנות. אין הן ויותר

O(m log n)91

Page 130: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

130

זרימה רשתות

עמודסיבוכיותשאלה שיהיו בית וועד לבנות . רוצים2n m דירות. m בבניין קומות. סה"כn ובו בניין נתון

הפותר אלגוריתם שונות(. תאר דירות2מ- נציגים2) קומה מכל נציגים2 בדיוק בוזו. בעיה

O(|V| · |E|2)92

,G=(V יהי E)גרף יהיה מכוון לא ,s וקשיר. tשני בו. תאר מיוחדים קדקודים t.O(|V| · |E|2)93 מ-s את לנתק להוריד, כדי הפחות, יש קדקודים, לכל כמה המוצא אלגוריתם

המפרטת טבלה נתונה כן מטוסים. כמוmו- נווטיםn טייסים, p של רשימה נתונהוהנווטים. הטייסים לעלות יכולים מטוסים לאיזה

לאוויר להעלות ונווט( כדי )טייס צוותים של מקסימלי מספר להרכיב – המטרהבו-זמנית. מטוסים של מקסימלי מספרזו. מטרה המשיג אלגוריתם תאר

O(|V| · |E|2)94

.sV ממושקל, וקודקודG=(V, E) גרף נתון.c(P) = min { c(u, v) | (u, v)P } על-ידי: G ב-P מסלול של קיבול נגדיר.v ל-sמ- מקסימלי קיבול בעל מסלולvV לכל המוצא אלגוריתם הצע

95

Page 131: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

131

לינארית באלגרבה אלגוריתמים

עמודסיבוכיותשאלהושניG=(V, E) מכוון לא גרף נתון ,u קדקודים v Vב- . מצאo(n3)האם קיים

o(n3)97בדיוק. קשתות3- כלומר – משולש המכילv ל-uמ- מסלול

ושניG=(V, E) מכוון לא גרף נתון ,u קדקודים v Vב- . מצאo(n3)האם קיים o(n3)98בדיוק. קשתות4- כלומר – ריבוע המכילv ל-uמ- מסלול

o(n3 log n) בזמן המוצא אלגוריתם . תארu,vV קדקודים ושני מכוון לא גרף נתוןn.o(n3 log n)99 פשוט( באורך דווקא )לאו מסלול קייםv לקודקודu קודקוד בין האם

מספר את המוצא אלגוריתם . תארu,vV צמתים שני ובו מכוון לא גרף נתוןv.o(n3)101 ל-u מ-2 באורך המסלולים

ונתון לא גרף נתון תארuV קודקוד מכוון, מספר את המוצא אלגוריתם . o(n3)102אליהם. שייךuש- המשולשים

o(n3)103בגרף. יש משולשים כמה המוצא אלגוריתם מכוון. תאר לא גרף נתוןO(nlog 3)o(n2) =O(nlog 3)105 בזמן שלהם הכפלה סיביות. תארn בעליx, y שלמים מספרים2 נתונים

בין4 באורך המסלולים מספר את ממושקל. חשב מכוון, לא לא גרף נתון 2 v.o(n3)106 ו-u נתונים קדקודים

o(n3).o(n3)108ב- בוליאניות מטריצות של לכפל אלגוריתם הצעו-a+ib המרוכבים המספרים את לכפול ניתן כיצד הראה c+id3ב- שימוש , תוך

ממשיות. כפל פעולות109

Page 132: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

132

פולינומים על אלגוריתמים

עמודסיבוכיותשאלה z1, z2, ... , zn ששורשם הפולינום מקדמי את . מצאz1, z2, ... , zn מספריםn נתונים

O(n log2 n).O(n log2 n)110 בזמן

ש: , כךb0, b1, ... , bn-1 ו-a0, a1, ... , an-1 , ומספריםBnn ו-Ann מטריצות שתי נתונות j i bj-I j i aj-i

0 אחרת0 אחרת על-ידיAB המטריצות כפל את המוצא אלגוריתם תאר O(n log n) של ביצוע

אריטמטיות. פעולות

O(n log n)111

כזאתAnn מטריצה נתונה ,a[iש: j] = a[i-1, j-1]כל , עבור i,j > )מטריצת1 טופליץ(.

. ????????o(n2) בזמן שרירותי בווקטורA את המכפיל אלגוריתם מצאo(n2)

112 ?????

כלשהי, ומטריצהAnn מטריצה נתונה Bnnמשולשית מתחת )שהאברים עליונה -ים(.0 הם לאלכסון

C המטריצות מכפלת את המוצא אלגוריתם תאר = B · Aבזמן O(n2 log n)נכונות ????? . ??

O(n2 log n)113

?????

Bij = } Aij = }

Page 133: Algorithms Algoproblems

אלגוריתמים וניתוח תכנון

133

חישובית גיאומטריה

עמודסיבוכיותשאלה .Q בתוך נמצאיםP קודקודי שכל במישור, כךP, Q קמורים מצולעים שני נתונים

,A נקודות שתי נתונים עוד Bבתוך , הנמצאות Qומחוץ אלגוריתם . הצעPל- , ל-Aמ- ביותר קצר מסלול המוצא Bהנמצא ומחוץQ בתוך כולו ל-

P.??????????????? .

O(n)114

P האם . בדוקP נקודה זה(, ונתונה את זה חותכים לא )שצלעותיו פשוט מצולע נתון.O(n) בזמן לו מחוצה המצולע, או של הפנימי לחלק שייכת

קמור. מצולע לגבי השאלה * אותהO(n)115

מצולע הוא זה מצולע האם הבודק אלגוריתם קדקודים. הצעn בעל מצולע נתוןO(n log n).O(n log n)117 בזמן פשוט

בעלP קמור מצולע נתונים nקדקודים הנמצאתQ במישור, ונקודה .Pל- מחוץ PQ.O(log n)118 הקמור אתO(log n) בזמן מצא

נקודהAמ- . מורידיםA בתוך כולו נמצאBש- , כךB ו-A קמורים מצולעים2 נתוניםPiהקטעים ובמקום PiPi+1-ו Pi-1Piקטע מעבירים Pi-1Pi+1.

אחריAB הקמור את המוצא אלגוריתם הצע O(log בזמן ההורדה n)????????? .

O(log n)120

?????

במישור, ושתיP קמור מצולע נתונים ,A נקודות Bהנמצאות . מצאPל- מחוץ O(n)??????????????? . ????????????????? נכונותB ל-Aמ- ביותר קצר מסלול

121 ?????

ושניl קמור, ישר מצולע נתון ו-l1 ישרים l2ל- , המקביליםlהקמור. את , וחוסמים O(log n)?????????????????? .O(log n) בזמןl2 ו-l1 ישרים שני מצא

122 ?????

מצאP קמור מצולע נתון לציר )ביחס ביותר הגבוהה הנקודה את . y?????????? .)

?????123 ?????