תרגיל - Algorithms
Download
Report
Transcript תרגיל - Algorithms
תרגול BF - 5
1
שאלה – 1הדיקות מס' האיטרציות
תרגיל :הראו שיתכן והאלגוריתם של בלמן-פורד זקוק ל -
n 1איטרציות בשביל לחשב מסלולים קצרים
ביותר.
2
1 פתרון
(ללאBellman-Ford נזכר בתקציר האלגוריתם של
:)בדיקת המעגלים השליליים
Bellman-Ford(G,s):
Initialize(G).
מספר האיטרציות
for i = 1 to |V|-1
for each edge (u,v)
if (d(v)>d(u)+w(u,v))
Relax (u,v,w)
3
1 פתרון
Bellman-Ford(G,s):
Initialize(G).
for i = 1 to |V|-1
for each edge (u,v)
if (d(v)>d(u)+w(u,v))
Relax (u,v,w)
1
:Bellman-Ford הרצת
1
1
1
s
0
1
2
7
8
9
4
שאלה – 2ארביטראג'
תרגיל :נתונים nסוגי מטבעות וטבלת מחירי ההמרה
ביניהם .תארו אלגוריתם הבודק האם ניתן להתחיל עם
מטבע אחד מסוג iולבצע סדרת המרות שבסופה נקבל
יותר ממטבע אחד מסוג .i
5
שאלה – 2דוגמא
1 X 22.3180 X 0.0120 X 0.7516 X 4.9517 =0.9967
6
שאלה – 2רעיון
נסמן את מספר המטבעות מסוג c jשניתן לקבל
בתמורה למטבע אחד מסוג ciבתור .ai , j
נבנה גרף מכוון ) . G (V , Eהגרף מכיל צומת עבור
כל סוג מטבע ,וקיימת קשת מכל צומת לכל צומת
אחרת.
לקשת בגרף היוצאת מקודקוד ciונכנסת לקודקוד c j
ניתן משקל .ai , j
המשקל של מעגל c1 c2 ... ck c1יהיה
.a1,2 a2,3 ... ak ,1
7
◦ אבל אנחנו מחפשים מעגל שמקיים .a1, 2 a2,3 ... ak ,1 1
שאלה – 2תיקון הבעיה
אנחנו מחפשים מעגל
שמתקיים .a1, 2 a2,3 ... ak ,1 1
, c1 c2 ... ck c1
כך
loga1,2 loga2,3 ... logak ,1 0
loga1,2 loga2,3 ... logak ,1 0
לקשת מ ci -אל c jניתן משקל
קיים רצף המרות שמביא לרווח אם"ם בגרף החדש
יש מעגל שלילי.
. logai, j
8
שאלה – 2המשך הפתרון
אנחנו רוצים למצוא מעגל שעבורו מתקיים
. log a1,2 log a2,3 ... log ak ,1 0
לצורך כך ,נשתמש באלג' של ,Bellman Fordוכך
נפתור את הבעיה בסיבוכיות זמן של
.OV E O n3
הגרף קשיר בחוזקה ,ולכן נוכל להריץ את
Bellman-Fordמאיזו צומת שנרצה.
9
שאלה - 3המסלול הקל לקודקוד
תרגיל :נתון גרף מכוון ) , G (V , Eופונקצית
משקל .w : E Rבנוסף ,ידוע שאין מעגלים
שליליים בגרף .עבור כל קודקוד v Vנגדיר:
) * (v) min (u, v
uV
(זהו משקל המסלול הקל ביותר מכל המסלולים
שמסתיימים ב .) v -
תארו אלגוריתם אשר מחשב את כל ערכי ). * (v
10
דוגמא- 3 שאלה
c
d
8
-1
-4
b
2
5
2
0
a
-2
e
* (a) 2
* (d ) 0
* (b) 4
* (e) 0
* (c ) 5
11
שאלה - 3פתרון
נוסיף קודקוד חדש sונוציא ממנו קשתות במשקל 0
לכל שאר קודקודי הגרף.
נריץ ,Bellman-Fordועבור כל קודקוד v V
*
נציב ). (v) (s, v
2
c
d
2
-1
-1
0
b
0
e
12
-2
s
0
1
a
00
0
0
נכונות וזמן ריצה
: נכונות האלגוריתם
*
. (s, v) minu w(s, u) (u, v) minu (u, v) (v)
: זמן ריצה
.OV – ◦ הוספת קודקוד לגרף
.OV | E |
– Bellman-Ford ◦
.OV | E |
- ◦ סה"כ
13
שאלה – 4מעגלים במשקל 0
תרגיל :נתון גרף מכוון ) , G (V , Eופונקצית
משקל .w : E Rבנוסף ,ידוע שאין מעגלים
שליליים בגרף .תארו אלג' שבודק האם קיים מעגל
במשקל 0בגרף.
-9
1
1
8
4
28
-3
14
9
שאלה – 4פתרון
בדומה לתרגיל הקודם ,נוסיף קודקוד , sועבור כל קודקוד v V
נוסיף קשת ) ( s, vבמשקל .0
נריץ Bellman-Fordמהצומת .s
ניצור תת-גרף ) ' , G' (V , Eכאשר
.E' (u, v) E | (s, v) (s, u) w(u, v)
במילים ,קשת נשארת בגרף אמ"מ היא
חלק ממק"ב היוצא מ.s -
(גרף המסלולים הקלים
ביותר מ).s -
-9
1
1
8
4
28
-3
15
s
9
שאלה – 4פתרון
המרחקים מ : s -
-9
b
s
-9
a
1
0
1
c
8
-8
28
9
d
4
נוריד קשתות:
f -7
16
-8
-3
-4
e
המשך פתרון
טענה :אם קיים ב G ' -מעגל ,אז בהכרח משקלו .0
הוכחה :נניח שקיים מעגל , v1 v2 ... vk v1
אז
) ( s, v2 ) w(v1 , v2 ) ( s, v1
) ( s, v3 ) w(v2 , v3 ) ( s, v2
) ( s, v1 ) w(vk , v1 ) ( s, vk
נסכום את המשוואות ונקבל
) 0 w(v1 , v2 ) w(v2 , v3 ) ... w(vk , v1
17
המשך פתרון
טענה :2מעגל במשקל 0ב G -יהיה קיים גם ב . G ' -
הוכחה :נניח בשלילה ש , v1 v2 ... vk v1
מעגל במשקל 0ב G -אבל לא ב '. G -
אז לפחות אחד מהאי-שיוויונים הבאים הוא חזק:
) ( s, v2 ) ( s, v1 ) w(v1 , v2
) ( s, v3 ) ( s, v2 ) w(v2 , v3
) ( s, v1 ) ( s, vk ) w(vk , v1
נסכום את המשוואות ונקבל
) 0 w(v1 , v2 ) w(v2 , v3 ) ... w(vk , v1
18
סיכום וזמן ריצה
לסיכום ,האלג' יראה כך:
◦
◦
◦
◦
נוסיף לגרף צומת sוקשתות היוצאות ממנה.
נריץ Bellman-Fordמ.s -
נזרוק את הקשתות שאינן חלק ממק"ב היוצא מ.s -
נבדוק האם קיים מעגל בתת הגרף שקיבלנו .למשל ,על ידי .DFS
כל השלבים פרט לשני לוקחים זמן לינארי .לכן ,סיבוכיות
זמן הריצה הינה הסיבוכיות של .Bellman-Ford
19