שאלת מבחן באלגוריתמים - האוניברסיטה הפתוחה 2022 - הוכח או הפרך
שאלה 1 – מדעונות (צעויות מנוגדות עם צלעות שיליות) (34 נק׳)
בשאלה זו דברים בגרפים מכוונים שאפשר לחזור על צלעות. לכל צלע יש משקל (או עלות) . נחזור על הסימונים הבאים:
- בשאלה 1, דברים בגרפים בתחום שלנו הם "מדעונות" שהיא סדרת קדקודים שלכל קיימת צלע בגרף.
- עבור מדעון , המשקל שלו הוא .
- "מסלול" (path) הוא מדעון שבו כל קדקוד מופיע לכל היותר פעם אחת.
- "מעגל" הוא מסלול שבו הקדקוד הראשון שווה לקדקוד האחרון.
- קדקודים בדקדקודים: נקראים "זוגות דקדקודים" אם בשתי הדרכים הם מחוברים בצלע בגרף (כלומר קיימת צלע וגם צלע ).
- "צלעה שלילית" (negative edge) היא צלע עם .
- "מעגל שלילי" (negative cycle) הוא מעגל עם משקל שלילי.
לכל זה הנתון למעלה, הניח שיש לך גרף מכוון עם אפשרות של משקלות שליליים. הגדר את הבעיה הבאה:
הגדרה: בעיית "הנתיב הקצר ביותר עם צלעות שלילית" מוגדרת כך: בהינתן גרף וקדקודים מקור ויעד , מצא את המסלול מ- ל- עם המשקל הקטן ביותר. אם קיים מעגל שלילי בגרף, אז בעיית זו עלולה להיות חסרת משמעות או להיות לא פתירה בצורה רגילה.
(א) נניח שבגרף אין מעגלים שליליים. הוכח או הפרך: אם יש מסלול קצר ביותר מ- ל-, אז כל תת-מסלול של מסלול קצר ביותר הוא גם מסלול קצר ביותר בין קדקודיו.
(ב) עכשיו נניח שבגרף כן יכול להיות מעגלים שליליים. תאר אלגוריתם שקובע האם קיים מעגל שלילי הנגיש מהקדקוד . מהי סיבוכיות הזמן של האלגוריתם שלך?
בשאלה זו דברים בגרפים מכוונים שאפשר לחזור על צלעות. לכל צלע יש משקל (או עלות) . נחזור על הסימונים הבאים:
- בשאלה 1, דברים בגרפים בתחום שלנו הם "מדעונות" שהיא סדרת קדקודים שלכל קיימת צלע בגרף.
- עבור מדעון , המשקל שלו הוא .
- "מסלול" (path) הוא מדעון שבו כל קדקוד מופיע לכל היותר פעם אחת.
- "מעגל" הוא מסלול שבו הקדקוד הראשון שווה לקדקוד האחרון.
- קדקודים בדקדקודים: נקראים "זוגות דקדקודים" אם בשתי הדרכים הם מחוברים בצלע בגרף (כלומר קיימת צלע וגם צלע ).
- "צלעה שלילית" (negative edge) היא צלע עם .
- "מעגל שלילי" (negative cycle) הוא מעגל עם משקל שלילי.
לכל זה הנתון למעלה, הניח שיש לך גרף מכוון עם אפשרות של משקלות שליליים. הגדר את הבעיה הבאה:
הגדרה: בעיית "הנתיב הקצר ביותר עם צלעות שלילית" מוגדרת כך: בהינתן גרף וקדקודים מקור ויעד , מצא את המסלול מ- ל- עם המשקל הקטן ביותר. אם קיים מעגל שלילי בגרף, אז בעיית זו עלולה להיות חסרת משמעות או להיות לא פתירה בצורה רגילה.
(א) נניח שבגרף אין מעגלים שליליים. הוכח או הפרך: אם יש מסלול קצר ביותר מ- ל-, אז כל תת-מסלול של מסלול קצר ביותר הוא גם מסלול קצר ביותר בין קדקודיו.
(ב) עכשיו נניח שבגרף כן יכול להיות מעגלים שליליים. תאר אלגוריתם שקובע האם קיים מעגל שלילי הנגיש מהקדקוד . מהי סיבוכיות הזמן של האלגוריתם שלך?
העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
האוניברסיטה הפתוחהמועד 842022סמסטר א
★★★★★
הוכח או הפרךמסלולים קצריםבלמן-פורדהוכחהסיבוכיותניתוח אלגוריתמים
סעיף (א): הניחו בשלילה שקיים תת-מסלול שאינו הקצר ביותר, ובנו בעזרתו מסלול חדש וקצר יותר בין נקודות ההתחלה והסוף המקוריות. סעיף (ב): השתמשו באלגוריתם למציאת מסלולים קצרים המבוסס על הרפיות חוזרות, ובדקו מה קורה לאחר איטרציות.
(א) הטענה נכונה.
הוכחה: נוכיח זאת בדרך השלילה. יהי מסלול קצר ביותר מהקדקוד לקדקוד . נסמן את המסלול כסדרת קדקודים , כאשר ו-.
ניקח תת-מסלול כלשהו של , שנסמנו , כאשר . תת-מסלול זה הוא מסלול מהקדקוד לקדקוד .
נניח בשלילה ש- אינו מסלול קצר ביותר מ- ל-. משמעות הדבר היא שקיים מסלול אחר, , מ- ל- אשר משקלו קטן יותר, כלומר .
כעת, נבנה מסלול חדש, , מ- ל- באופן הבא: ניקח את המסלול המקורי , נחליף בו את תת-המסלול במסלול הקצר יותר . המסלול החדש יורכב מהחלק של מ- ל-, אחריו המסלול מ- ל-, ואחריו החלק של מ- ל-.
נחשב את משקל המסלול החדש :לשם השוואה, משקל המסלול המקורי הוא:מאחר והנחנו כי , נובע ישירות כי:זוהי סתירה להנחה המקורית ש- הוא מסלול קצר ביותר מ- ל-, שכן מצאנו מסלול קצר יותר. לכן, הנחת השלילה שגויה, ובהכרח כל תת-מסלול של מסלול קצר ביותר הוא בעצמו מסלול קצר ביותר בין קדקודיו. (ב) כדי לקבוע האם קיים מעגל שלילי הנגיש מהקדקוד , נשתמש באלגוריתם בלמן-פורד (Bellman-Ford).
האלגוריתם מבוסס על עקרון ההרפיה (relaxation) ופועל כך שבגרף עם קדקודים, כל מסלול פשוט (שאינו מכיל מעגלים) מכיל לכל היותר צלעות. האלגוריתם מבצע איטרציות, ובכל איטרציה הוא עובר על כל הצלעות ומנסה "להרפות" אותן, כלומר לשפר את המרחק המשוער לקדקוד היעד של הצלע. אם לאחר איטרציות, באיטרציה ה-, עדיין ניתן לבצע הרפיה על צלע כלשהי, הדבר מעיד בהכרח על קיום מעגל שלילי הנגיש מ-.
תיאור האלגוריתם:
1. אתחול: ניצור מערך מרחקים בגודל . נאפס את המרחק לקדקוד המקור, , ולכל קדקוד אחר נקבע .
2. הרפיות: נבצע את הלולאה הבאה פעמים:
- עבור כל צלע בגרף:
- אם , נעדכן את המרחק: .
3. בדיקת מעגל שלילי: נבצע איטרציה נוספת, ה-, על כל הצלעות:
- עבור כל צלע :
- אם , פירוש הדבר שנמצא מעגל שלילי הנגיש מ-. האלגוריתם יחזיר
אם הלולאה השלישית מסתיימת מבלי שבוצעה אף הרפיה, סימן שאין מעגלים שליליים הנגישים מ-, והאלגוריתם יחזיר
סיבוכיות זמן:
- שלב האתחול לוקח .
- שלב ההרפיות מורכב מלולאה חיצונית שרצה פעמים, ולולאה פנימית שעוברת על כל הצלעות. סיבוכיות שלב זה היא .
- שלב בדיקת המעגל השלילי עובר על כל הצלעות פעם אחת, ולכן סיבוכיותו .
הסיבוכיות הכוללת של האלגוריתם נשלטת על ידי שלב ההרפיות, ולכן היא .
הוכחה: נוכיח זאת בדרך השלילה. יהי מסלול קצר ביותר מהקדקוד לקדקוד . נסמן את המסלול כסדרת קדקודים , כאשר ו-.
ניקח תת-מסלול כלשהו של , שנסמנו , כאשר . תת-מסלול זה הוא מסלול מהקדקוד לקדקוד .
נניח בשלילה ש- אינו מסלול קצר ביותר מ- ל-. משמעות הדבר היא שקיים מסלול אחר, , מ- ל- אשר משקלו קטן יותר, כלומר .
כעת, נבנה מסלול חדש, , מ- ל- באופן הבא: ניקח את המסלול המקורי , נחליף בו את תת-המסלול במסלול הקצר יותר . המסלול החדש יורכב מהחלק של מ- ל-, אחריו המסלול מ- ל-, ואחריו החלק של מ- ל-.
נחשב את משקל המסלול החדש :לשם השוואה, משקל המסלול המקורי הוא:מאחר והנחנו כי , נובע ישירות כי:זוהי סתירה להנחה המקורית ש- הוא מסלול קצר ביותר מ- ל-, שכן מצאנו מסלול קצר יותר. לכן, הנחת השלילה שגויה, ובהכרח כל תת-מסלול של מסלול קצר ביותר הוא בעצמו מסלול קצר ביותר בין קדקודיו. (ב) כדי לקבוע האם קיים מעגל שלילי הנגיש מהקדקוד , נשתמש באלגוריתם בלמן-פורד (Bellman-Ford).
האלגוריתם מבוסס על עקרון ההרפיה (relaxation) ופועל כך שבגרף עם קדקודים, כל מסלול פשוט (שאינו מכיל מעגלים) מכיל לכל היותר צלעות. האלגוריתם מבצע איטרציות, ובכל איטרציה הוא עובר על כל הצלעות ומנסה "להרפות" אותן, כלומר לשפר את המרחק המשוער לקדקוד היעד של הצלע. אם לאחר איטרציות, באיטרציה ה-, עדיין ניתן לבצע הרפיה על צלע כלשהי, הדבר מעיד בהכרח על קיום מעגל שלילי הנגיש מ-.
תיאור האלגוריתם:
1. אתחול: ניצור מערך מרחקים בגודל . נאפס את המרחק לקדקוד המקור, , ולכל קדקוד אחר נקבע .
2. הרפיות: נבצע את הלולאה הבאה פעמים:
- עבור כל צלע בגרף:
- אם , נעדכן את המרחק: .
3. בדיקת מעגל שלילי: נבצע איטרציה נוספת, ה-, על כל הצלעות:
- עבור כל צלע :
- אם , פירוש הדבר שנמצא מעגל שלילי הנגיש מ-. האלגוריתם יחזיר
True ויעצור.אם הלולאה השלישית מסתיימת מבלי שבוצעה אף הרפיה, סימן שאין מעגלים שליליים הנגישים מ-, והאלגוריתם יחזיר
False.סיבוכיות זמן:
- שלב האתחול לוקח .
- שלב ההרפיות מורכב מלולאה חיצונית שרצה פעמים, ולולאה פנימית שעוברת על כל הצלעות. סיבוכיות שלב זה היא .
- שלב בדיקת המעגל השלילי עובר על כל הצלעות פעם אחת, ולכן סיבוכיותו .
הסיבוכיות הכוללת של האלגוריתם נשלטת על ידי שלב ההרפיות, ולכן היא .