280 likes | 498 Views
תרגול 3 - DFS. קודקודים מנתקים. הגדרה: קודקוד בגרף לא מכוון נקרא קודקוד מנתק אם הסרתו (יחד עם הקשתות הסמוכות אליו) מגדילה את מספר רכיבי הקשירות של הגרף. שאלה 1 – מציאת קודקודים מנתקים. תרגיל: נתון גרף לא מכוון תארו אלג ' יעיל למציאת כל הקודקודים המנתקים שלו.
E N D
קודקודים מנתקים • הגדרה: קודקוד בגרף לא מכוון נקרא קודקוד מנתק אם הסרתו (יחד עם הקשתות הסמוכות אליו) מגדילה את מספר רכיבי הקשירות של הגרף.
שאלה 1 – מציאת קודקודים מנתקים • תרגיל: נתון גרף לא מכוון תארו אלג' יעיל למציאת כל הקודקודים המנתקים שלו.
שאלה 1 – פתרון • נריץ DFS על הגרף (ונשמור את זמן הגילוי של כל קודקוד). a[1] b a d[4] b[2] c d c[3] e e[5] g f[6] f g[7]
שאלה 1 – המשך פתרון • מה אנחנו יודעים בינתיים? • השורש הינו קודקוד מנתק אם"ם יש לו לפחות 2 ילדים. (לא יתכנו קשתות בין תתי העצים שלו.) • עלה לא יכול להיות קודקוד מנתק. a[1] d[4] b[2] c[3] e[5] f[6] g[7]
שאלה 1 – המשך פתרון • תוך כדי הרצת ה-DFS נחשב לכל קודקוד (נבצע את החישוב בזמן הסיום של הקודקוד.)
דוגמת הרצה a[1] [1] b a d[4] [4] b[2] [1] c d c[3] [1] e [4] e[5] g [4] f[6] f [7] g[7]
אילו קודקודים מנתקים? • טענה: קודקוד שאינו שורש או עלה בעץ הינו קודקוד מנתק אמ"מ קיים בן של אשר עבורו מתקיים a[1] [1] b a d[4] [4] b[2] [1] c d c[3] [1] e [4] e[5] g [4] f[6] f [7] g[7]
אילו קודקודים מנתקים? • טענה: קודקוד שאינו שורש או עלה בעץ הינו קודקוד מנתק אמ"מ קיים בן של אשר עבורו מתקיים • הוכחה: נניח ש קודקוד מנתק שאינו שורש או עלה אז כשנריץ DFS, לא תהיה קשת אחורית מצאצא של לאב קדמון של . ערכי ה- של כל צאצאיו יהיו גדולים מ- או שווים ל- ולכן מהגדרת נקבל את הטענה. • נניח שקיים בן של אשר עבורו מתקיים • אז אין קשת אחורית מאף צאצא של לקודקוד מעל בעץ ולכן קודקוד מנתק.
אילו קודקודים מנתקים? • שאלה: עבור אילו קודקודים מתקיים ? a[1] [1] d[4] [4] b[2] [1] c[3] [1] [4] e[5] [4] f[6] [7] g[7]
קבוצת מוצא • הגדרה: קבוצת קודקודים בגרף מכוון נקראת קבוצת מוצא אם יש ממנה מסלול לכל קודקוד בגרף. ז"א
שאלה 2 – קודקודי מוצא • תרגיל: נתון גרף מכוון תארו אלג' למציאת קבוצת מוצא מינימאלית.
שאלה 2 – פתרון • תאור האלגוריתם: • נחשב רק"חים. • נבחר קודקוד אחד מכל רק"ח שאין אף קשת שנכנסת אליו (להלן, רק"ח כזה יכונה מקור).
פתרון יותר מפורט – גרף העל • הגדרה: גרף העל • בהנתן גרף מכוון , גרף העל של מכיל קודקוד עבור כל רק"ח של . עבור כל זוג רק"חים שיש ביניהם לפחות קשת אחת, תהיה קשת (יחידה) בין הקודקודים המייצגים את הרק"חים הנ"ל.
פתרון יותר מפורט • נבנה את גרף העל • נחשב רק"חים (כמו שנלמד בשיעור – DFS, הפיכת קשתות ושוב DFS).
פתרון יותר מפורט • נבנה את גרף העל • נחשב רק"חים (כמו שנלמד בשיעור – DFS, הפיכת קשתות ושוב DFS). c a d b
פתרון יותר מפורט • קיבלנו את גרף העל • גרף העל הוא אציקלי. • לכן, ניתן למיין אותו טופולוגית. c a c a d b d b
פתרון יותר מפורט • נמצא את קבוצת המקורות : • נעבור על קודקודי הגרף לפי הסדר הטופולוגי שלהם, ועבור כל קודקוד שנעבור בו, נסמן את הקודקודים שיש ממנו קשת אליהם. • כאשר נגיע לקודקוד שאינו מסומן, נכניס את אחד מקודקודי הרק"ח שהוא מייצג ל- . c d b a e f
הוכחת נכונות • נוכיח שמתקיים • אם נמצא ברק"ח של מקור, מההגדרה קיים • אחרת, קיים רק"ח אחר אשר יוצאת ממנו קשת אל הרק"ח של . נחצה את הקשת הזו אל . • נמשיך לחצות רק"חים באותו אופן, עד אשר נגיע למקור. מהגדרת האלג', מקור זה מכיל קודקוד ומתקיים c d b a e f
הוכחת נכונות • נוכיח שהקבוצה שבחרנו מינימאלית. • נסמן את מספר הרק"חים של מקורות בגרף ב-. ניקח קבוצה של קודקודים – אחד מכל מקור. • לא קיים קודקוד בגרף שממנו ניתן להגיע לשני קודקודים של לכן, • היות והקבוצה שמצאנו גם היא בגודל , היא מינימאלית. c d b a e f
סיבוכיות • חישוב רק"חים – • מציאת מקורות – • סה"כ זמן ריצה של האלג' –
שאלה 3 – תחנות במסלול • תרגיל: נתונים גרף מכוון וקבוצה תארו אלג' אשר בודק האם קיים בגרף מסלול העובר דרך כל קודקודי המסלול יכול לעבור בקודקודים נוספים ואף לחצות את אותה קשת מספר פעמים.
שאלה 3 – פתרון • האלגוריתם: • נמצא את הרק"חים של הגרף. • נחפש בגרף העל מסלול אשר עובר דרך כל הרק"חים המכילים לפחות איבר אחד מ- (להלן נכנה אותם בתור הרק"חים הרלוונטיים).
המשך פתרון • ניצור את גרף העל ונמיין טופולוגית: d e c a f d b g e c a f f b a e d c g g b
המשך פתרון • נראה כיצד לחפש מסלול שעובר דרך כל הרק"חים הרלוונטיים: • נטייל על גרף העל לפי הסדר הטופולוגי. • בכל פעם שנגיע לאיבר המייצג רק"ח רלוונטי, נבדוק האם קיים מסלול ממנו אל הרק"ח הרלוונטי הבא (בסדר הטופולוגי). • חיפוש מסלול מקודקוד אל קודקוד יתבצע באמצעות • BFS מ- על תת הגרף בין לבין f a e d c g b
נכונות האלגוריתם • הוכחה: • אם יש מסלול שעובר דרך כל קודקודי אז האלגוריתם ימצא מסלול כזה, כי מספיק למצוא מסלול שעובר דרך כל רק"ח. • אם האלגוריתם מוצא מסלול מתאים, נבחר מסלול מתאים בגרף המקורי, וכיוון שניתן להגיע מכל קודקוד לכל קודקוד אחר ברק"ח, ניתן להרחיב אותו למסלול מתאים שעובר דרך כל קודקודי . • שימו לב שב- השתמשנו בעובדה שניתן לחזור על קשתות.
סיבוכיות • מציאת רק"חים + מיון טופולוגי – • מציאת רכיבי הקשירות הרלוונטיים: • ניתן לבצע תוך כדי מציאת הרק"חים – • מציאת מסלול בין הרק"חים הרלוונטיים: • כל קודקוד משתתף לכל היותר בשתי ריצות BFS. • כל קשת משתתפת לכל היותר בריצת BFS אחת. • סך זמן הריצה של כל פעולות ה-BFS –