Algorithms Tirgul 3
Download
Report
Transcript Algorithms Tirgul 3
תרגול DFS - 3
1
קודקודים מנתקים
הגדרה :קודקוד בגרף לא מכוון נקרא קודקוד מנתק
אם הסרתו (יחד עם הקשתות הסמוכות אליו)
מגדילה את מספר רכיבי הקשירות של הגרף.
2
שאלה – 1מציאת קודקודים מנתקים
תרגיל :נתון גרף לא מכוון .G V , E תארו
אלג' יעיל למציאת כל הקודקודים המנתקים שלו.
3
שאלה – 1פתרון
נריץ DFSעל הגרף (ונשמור את זמן הגילוי של כל
קודקוד).
]a[1
b
a
]d[4
]b[2
c
]c[3
]e[5
]f[6
4
]g[7
d
g
f
e
שאלה – 1המשך פתרון
מה אנחנו יודעים בינתיים?
השורש הינו קודקוד מנתק אם"ם יש לו לפחות 2ילדים.
(לא יתכנו קשתות בין תתי העצים שלו).
]a[1
עלה לא יכול להיות קודקוד מנתק.
]d[4
]b[2
]c[3
]e[5
]f[6
]g[7
5
שאלה – 1המשך פתרון
תוך כדי הרצת ה DFS-נחשב לכל קודקוד
] d [v
) ( v , uקשת אחורית בעץ low [ v ] min d [ u ],
low [ u ],
uבן של vבעץ
(נבצע את החישוב בזמן הסיום של הקודקוד).
6
דוגמת הרצה
d [v ]
low [ v ] min d [ u ], ( קשת אחורית בעץv , u )
low [ u ],
בעץv בן שלu
a[1]
b
a
d[4]
b[2]
c
e
d
g
f
c[3]
e[5]
f[6]
g[7]
7
אילו קודקודים מנתקים?
טענה :קודקוד vשאינו שורש או עלה בעץ הינו קודקוד מנתק
אמ"מ קיים uבן של vאשר עבורו מתקיים ] .low [ u ] d [ v
]a[1
b
a
]d[4
]b[2
c
]c[3
]e[5
]f[6
8
]g[7
d
g
f
e
אילו קודקודים מנתקים?
טענה :קודקוד vשאינו שורש או עלה בעץ הינו קודקוד מנתק
אמ"מ קיים uבן של vאשר עבורו מתקיים ] .low [ u ] d [ v
נניח ש vקודקוד מנתק שאינו שורש או עלה אז
הוכחה:
כשנריץ ,DFSלא תהיה קשת אחורית מצאצא של vלאב
קדמון של . vערכי ה d [ w ] -של כל צאצאיו יהיו גדולים מ -או
שווים ל d [v ] -ולכן מהגדרת lowנקבל את הטענה.
נניח שקיים uבן של vאשר עבורו מתקיים
] .low [ u ] d [ vאז אין קשת אחורית מאף צאצא של uלקודקוד
מעל vבעץ ולכן vקודקוד מנתק.
9
אילו קודקודים מנתקים?
שאלה :עבור אילו קודקודים מתקיים
] low [ u ] d [ v
]a[1
]d[4
]b[2
]c[3
]e[5
]f[6
10
]g[7
?
קבוצת מוצא
G V , E
הגדרה :קבוצת קודקודים Sבגרף מכוון
נקראת קבוצת מוצא אם יש ממנה מסלול לכל קודקוד
בגרף .ז"א
v V , s S , s ~ v
11
שאלה – 2קודקודי מוצא
.G V , E
תרגיל :נתון גרף מכוון
למציאת קבוצת מוצא מינימאלית.
12
תארו אלג'
שאלה – 2פתרון
תאור האלגוריתם:
◦ נחשב רק"חים.
◦ נבחר קודקוד אחד מכל רק"ח שאין אף קשת שנכנסת
אליו (להלן ,רק"ח כזה יכונה מקור).
13
פתרון יותר מפורט – גרף העל
הגדרה :גרף העל
◦ בהנתן גרף מכוון ,G V , E גרף העל של Gמכיל קודקוד
עבור כל רק"ח של .Gעבור כל זוג רק"חים שיש ביניהם לפחות
קשת אחת ,תהיה קשת (יחידה) בין הקודקודים המייצגים את
הרק"חים הנ"ל.
14
פתרון יותר מפורט
נבנה את גרף העל
◦ נחשב רק"חים (כמו שנלמד בשיעור – ,DFSהפיכת
קשתות ושוב .)DFS
15
פתרון יותר מפורט
נבנה את גרף העל
◦ נחשב רק"חים (כמו שנלמד בשיעור – ,DFSהפיכת
קשתות ושוב .)DFS
c
a
d
b
16
פתרון יותר מפורט
קיבלנו את גרף העל
◦ גרף העל הוא אציקלי.
◦ לכן ,ניתן למיין אותו טופולוגית.
c
a
c
a
d
b
d
b
17
פתרון יותר מפורט
נמצא את קבוצת המקורות : S
נעבור על קודקודי הגרף לפי הסדר הטופולוגי שלהם,
ועבור כל קודקוד vשנעבור בו ,נסמן את הקודקודים
שיש ממנו קשת אליהם.
כאשר נגיע לקודקוד שאינו מסומן ,נכניס את אחד
מקודקודי הרק"ח שהוא מייצג ל. S -
c
d
b
f
18
e
a
הוכחת נכונות
נוכיח שמתקיים v V , s S , s ~ v
◦ אם vנמצא ברק"ח של מקור ,מההגדרה קיים .s ~ v
◦ אחרת ,קיים רק"ח אחר cאשר יוצאת ממנו קשת אל
הרק"ח של . vנחצה את הקשת הזו אל . c
◦ נמשיך לחצות רק"חים באותו אופן ,עד אשר נגיע
למקור .מהגדרת האלג' ,מקור זה מכיל קודקוד , s S
ומתקיים .s ~ v
c
d
b
19
f
e
a
הוכחת נכונות
נוכיח שהקבוצה שבחרנו מינימאלית.
◦ נסמן את מספר הרק"חים של מקורות בגרף ב . m -ניקח
קבוצה Pשל mקודקודים – אחד מכל מקור.
◦ לא קיים קודקוד בגרף שממנו ניתן להגיע לשני קודקודים
של . Pלכן. S m ,
◦ היות והקבוצה שמצאנו גם היא בגודל , mהיא מינימאלית.
c
d
b
20
f
e
a
סיבוכיות
חישוב רק"חים –
.O E V
מציאת מקורות –
.O E V
סה"כ זמן ריצה של האלג' –
21
.O E V
שאלה – 3תחנות במסלול
תרגיל :נתונים גרף מכוון G V , E וקבוצה
.S Vתארו אלג' אשר בודק האם קיים בגרף הילוך
העובר דרך כל קודקודי . Sההילוך יכול לעבור
בקודקודים נוספים ואף לחצות את אותה קשת מספר
פעמים.
22
שאלה – 3פתרון
האלגוריתם:
◦ נמצא את הרק"חים של הגרף.
◦ נחפש בגרף העל מסלול אשר עובר דרך כל הרק"חים המכילים
לפחות איבר אחד מ( S -להלן נכנה אותם בתור הרק"חים
הרלוונטיים).
◦ נרחיב את המסלול להילוך ע"י הרצת
( DFSייתכן מספר פעמים) בתוך
כל רק"ח.
23
המשך פתרון
ניצור את גרף העל ונמיין טופולוגית:
d
e
c
a
f
d
b
g
e
c
a
f
a
e
g24
d
c
b
f
b
g
המשך פתרון
נראה כיצד לחפש מסלול שעובר דרך כל הרק"חים
הרלוונטיים:
◦ נטייל על גרף העל לפי הסדר הטופולוגי.
◦ בכל פעם שנגיע לאיבר המייצג רק"ח רלוונטי ,נבדוק האם קיים
מסלול ממנו אל הרק"ח הרלוונטי הבא (בסדר הטופולוגי).
◦ חיפוש מסלול מקודקוד vאל קודקוד uיתבצע באמצעות
BFSמ v -על תת הגרף בין vלבין .u
f
a
e
25
g
d
c
b
נכונות האלגוריתם
26
הוכחה:
אם יש הילוך שעובר דרך כל קודקודי Sאז האלגוריתם
ימצא הילוך כזה ,כי מספיק למצוא מסלול שעובר דרך
כל רק"ח.
אם האלגוריתם מוצא מסלול מתאים ,נבחר מסלול
מתאים בגרף המקורי ,וכיוון שניתן להגיע מכל קודקוד
לכל קודקוד אחר ברק"ח ,ניתן להרחיב אותו להילוך
מתאים שעובר דרך כל קודקודי . S
השתמשנו בעובדה שניתן לחזור על
שימו לב שב-
קשתות.
סיבוכיות
מציאת רק"חים +מיון טופולוגי –
.O V E
מציאת רכיבי הקשירות הרלוונטיים:
◦ ניתן לבצע תוך כדי מציאת הרק"חים –
.O V E
מציאת מסלול בין הרק"חים הרלוונטיים:
◦ כל קודקוד משתתף לכל היותר בשתי ריצות .BFS
◦ כל קשת משתתפת לכל היותר בריצת BFSאחת.
◦ סך זמן הריצה של כל פעולות ה.O V E – BFS-
27
E 1 V 2 E 2 ... 2 V E
1
V
O V1 E 1 O V 2 E 2 ... O V E