שאלת מבחן באלגוריתמים - האוניברסיטה הפתוחה 2021 - גרפים

נתון גרף מכוון עם קדקוד מוצא ויעד , , ועם משקלים על הצלעות. בגרף ישנן צלעות במשקל שלילי, וגם צלעות במשקל חיובי. מסלול ב- ייקרא "חוקי" אם יש בו צלע שלילית אחת ויחידה. (מותר למסלול חוקי לעבור פעמיים דרך אותה צלע חיובית, אבל אסור לו לעבור פעמיים דרך הצלע השלילית.) הציגו אלגוריתם יעיל למציאת מסלול חוקי שמשקלו מזערי. לא יינתן שום ניקוד לאלגוריתם שזמן הריצה שלו הינו ומעלה ( מציין כאן קבוע חיובי).
העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
האוניברסיטה הפתוחהמועד 52 · 2021 · סמסטר ב
גרפיםדייקסטרהמסלולים קצריםרדוקציה
מסלול חוקי = חלק חיובי מ- ל-, צלע שלילית , חלק חיובי מ- ל-. חשבו מרחקי דייקסטרה על תת-הגרף החיובי בלבד ( ו-), ומזערו על כל צלע שלילית.
רעיון: מסלול חוקי הוא בהכרח מהצורה — קטע ראשון וקטע אחרון המורכבים מצלעות חיוביות בלבד, והצלע השלילית היחידה ביניהם.

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

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

זמן ריצה: שתי הרצות דייקסטרה, כל אחת (שכן ), ומעבר על הצלעות השליליות — סה"כ .