Professional Documents
Culture Documents
זיווגים בגרפים
זיווגים בגרפים
זיווגים בגרפים
גרף דו חלקי /דו צדדי
גרף יקרא דו-צדדי או דו חלקי אם קיימת חלוקה של הקודקודים ל 2 -קבוצות כך ש:
)1וגם
קבוצת צלעות תקרא זיווג אם לכל קודקוד קיימת לכל היותר צלע אחת שנוגעת
בו.
זיווג/שידוך
בהינתן גרף דו-צדדי כך ש , -יש ב G-זיווג מושלם אם"ם לכל מתקיים
כאשר:
משפט HALL
תארו אלגוריתם למציאת זיווג בגרף דו"צ בהסתמך על ההוכחה של משפט
.HALL
מה קורה כאשר הגרף הוא לא דו צדדי?
זיווג/שידוך
זיווג , ,בגרף (לא מכוון) הוא קבוצת צלעות , ,כך שכל קודקוד ב נוגע בלכל
היותר צלע אחת מ.
בהינתן גרף וזיווג , ,נאמר שקודקוד , ,מכוסה ע"י או -מכוסה במידה וקיימת
צלע עבור כלשהו.
בהינתן גרף וזיווג , ,נאמר שקודקוד , ,לא מכוסה ע"י או -חשוף במידה ולכל
מתקיים .
דוגמא
4
זיווג מקסימלי הוא זיווג שלא מוכל ממש באף זיווג אחר.
זיווג מקסימום הוא זיווג שמקיים ש מקסימלי מבין כל הזיווגים .כל
זיווג מקסימום הוא זיווג מקסימלי.
זיווג מושלם הוא זיווג שמקיים .כל זיווג מושלם הוא זיווג מקסימום.
דוגמא
בהינתן גרף וזיווג , ,מסלול ייקרא ,מסלול-חילוף של ,Mאם הצלעות במסלול
מסודרות כך שכל שתי צלעות עוקבות אחת מ Mוהשניה לא.
בהינתן גרף וזיווג , ,מסלול ייקרא ,מסלול-שיפור של ,Mאם הוא מסלול חילוף
של Mובנוסף שני הקודקודים השונים בקצוות שלו הם -Mחשופים.
דוגמא-מסלול חילוף לא שיפור
0 1
מסלול שיפור
הפרש סימטרי:יהיו קבוצות ,ההפרש הסימטרי של Aו ,B -מסומן ,ומוגדר להיות הקבוצה .
משפט
בהינתן גרף וזיווג , ,ו -Mקודקוד חשוף .עץ חילוף הוא עץ שמורכב ממסלולי
חילוף של Mשמתחילים ב.
עץ חילוף
יהי עץ חילוף אזי נחלק את הקודקודים שלו לשתי קבוצות. :
קודקודים ב הם קודקודים שיש מסלול באורך זוגי מ rאליהם בעץ .קודקודים ב
הם קודקודים שיש מסלול באורך איזוגי מ rאליהם בעץ.
ניתן ליצור עץ עם הפונקציה הבאה ,כאשר מתחילים מעץ בלי צלעות ועם
קודקוד אחד ,כאשר
עץ חילוף
Extend(M,G,T,(v,w))//,,w M-coverd
Let be the edge s.t
בניית/הגדלת עץ חילוף-דוגמא
4 קלט:
8
בניית/הגדלת עץ חילוף-דוגמא
4 קלט:
Extend
8 V=8
W=3
Z=2
בניית/הגדלת עץ חילוף-דוגמא
4 קלט:
Extend
V=8
8 7 6 W=7
Z=6
בניית/הגדלת עץ חילוף-דוגמא
4 קלט:
Extend
V=6
8 7 6 W=9
Z=10
9 10
בניית/הגדלת עץ חילוף-דוגמא
4 קלט:
Extend
V=6
4
8 7 6 5 W=5
Z=4
9 10
פונקציה ש"מגדילה" זיווג
דוגמא
4 T
4
Else
Else
Extend(M,G,T,(v,w))
Return no perfect matching
הרצת אלגוריתם על גרף דו-צדדי
קלט:
4
G+M 4
)(v,w)=(4,5
Augment
הרצת אלגוריתם על גרף דו-צדדי
G+M 4
T
1 2 3 5
7
B O
)(v,w)=(7,8
Augment
הרצת אלגוריתם על גרף דו-צדדי
G+M 4
T
1 2 3 5
6
B O
)(v,w)=(6,5
Extend
הרצת אלגוריתם על גרף דו-צדדי
T 4
G+M 4
5
1 2 3 5
6
8 7 6
B O
)(v,w)=(6,7
Extend
הרצת אלגוריתם על גרף דו-צדדי
T 4
G+M 4
5
1 2 3 5
8
7 6
8 7 6
B O
)(v,w)=(4,3
Augment
הרצת אלגוריתם על גרף דו-צדדי
G+M 4
)(v,w)=(1,2
Augment
הרצת אלגוריתם על גרף דו-צדדי
G+M 4
קלט:
4
)(v,w)=(4,5
Augment
הרצת אלגוריתם על גרף דו-צדדי
4
)(v,w)=(1,2
Augment
הרצת אלגוריתם על גרף דו-צדדי
4
)(v,w)=(3,2
Extend
הרצת אלגוריתם על גרף דו-צדדי
4
2
8 7 6
1
)(v,w)=(3,7
augment
הרצת אלגוריתם על גרף דו-צדדי
4
)(v,w)=(8,7
Extend
הרצת אלגוריתם על גרף דו-צדדי
4
)(v,w)=(3,2
Extend
הרצת אלגוריתם על גרף דו-צדדי
4
B-not in T
B-O
B-B
עץ חילוף
עץ חילוף ייקרא מתוסכל אם כל צלע בגרף שיש לה קודקוד ב Bהקודקוד השני שלה נמצא ב.O
עץ חילוף
תזכורת-
הוא גרף דו צדדי אםם לא מכיל מעגלים באורך אי-זוגי.
עץ חילוף
טענה
בהינתן גרף דו חלקי ,זיווג ,ועץ חילוף T ,כך שלא קיים קודקוד ב שיש לו שכן שאינו בעץ ,אזי העץ T
מתוסכל.
הוכחה
כל מה שצריך להראות זה שכל קודקוד ב Bשכן של קודקוד ב .Oמההנחה הקודקודים ב Bשכנים רק של
קודקודים בעץ .לכן נניח בשלילה שיש קודקוד ב Bששכן של קודקוד ב Bלשניהם יש מסלול באורך זוגי מr
מסלולים אלה בתוספת הצלע מהווים מעגל באורך אי זוגי ,בסתירה לכך שהגרף דו חלקי .ולכן העץ
מתוסכל ,כנדרש.
עץ חילוף
לא
… בעץ
x
r
… y
גרף לא דו צדדי
G+M 4
T 4
7 6
B O
)(v,w)=(4,3
Augment
נסיון הרצת האלגוריתם על גרף לא דו-צדדי
7 6
B O
)(v,w)=(5,6
Augment
נסיון הרצת האלגוריתם על גרף לא דו-צדדי
7 6
B O
)(v,w)=(7,6
Extend
נסיון הרצת האלגוריתם על גרף לא דו-צדדי
T
7 6
7 6
B O
)(v,w)=(7,3
Extend
נסיון הרצת האלגוריתם על גרף לא דו-צדדי
4
T
G+M 4
3 5
8 1 2 3 5
7 6
7 6
B O
מעגלים באורך אי זוגי
בדוגמא הזו לא הצלחנו למצוא זיווג מושלם בגלל שקיים מעגל באורך אי זוגי.
על מנת להתגבר על מכשול זה ,נסתכל על פונקציה ש"מכווצת" מעגלים באורך אי זוגי ,בצורה הבאה:
בהנתן גרף ומעגל אי זוגי נחזיר מולטיגרף כאשר
ו מכילה את כל הקשתות ששני הקודקודים בהם לא ב .Cובנוסף עבור צלע שקצה אחד שלה בקודקוד
שב Cוקצה שני בקודקוד לא ב , ,Cנוסיף צלע .
דוגמא -הגרף לפני הכיווץ
2 1
G 4
3 5
10 9
דוגמא -הגרף אחרי הכיווץ
2 1
𝐶𝐺
C
8
10 9
מעגלים באורך אי זוגי
אם קיים זיווג לגרף המכווץ אזי ניתן להגדיל את הזיווג בקלות כך שיתאים לגרף
לדוגמא (נלקח מהספר )Combinatorial optimization
עצים וכיווץ מעגלים באורך אי זוגי
באלגוריתם נרצה לכווץ מעגל שכל קודקודיו בעץ לאחר הכיווץ הצלעות שיהיו
בעץ הן צלעות שהיו בעץ מקודם או " מתאימות" לצלעות שהיו בעץ מקודם.
דוגמא-נלקח מהספר
Combinatorial optimization
אחרי הכיווץ
לפני הכיווץ
Blossom_Algorithm_for_Perfect_Matching (G=(V,E))
Else
2 1
T
3
G 4
3 5
7 6 8
10 9 B O
(v,w)=(3,7)
augment
הרצת האלגוריתם
2 1
G+M 4 T
9
3 5
7 6 8
10 9
B O
(v,w)=(9,10)
augment
הרצת האלגוריתם
2 1
T 1
G+M 4
3 5
7 6 8
10 9
B O
(v,w)=(1,8)
augment
הרצת האלגוריתם
2 1
T 4
G+M 4
3 5
7 6 8
10 9 B O
(v,w)=(4,3)
extend
הרצת האלגוריתם
2 1
T 4
G+M 4
3 5 3
7 6 8 7
10 9 B O
(v,w)=(7,6)
augment
הרצת האלגוריתם
2 1
4 T 5
G+M
3 5
7 6 8
10 9
B O
(v,w)=(5,6)
extend
הרצת האלגוריתם
2 1
T 5
G+M 4
3 5
7 6
7 6 8
10 9 B O
(v,w)=(7,3)
extend
הרצת האלגוריתם
2 1 T
4
4 3 5
G+M
3 5
7 6
7 6 8
10 9 B O
(v,w)=(4,5)
shrink
הרצת האלגוריתם
T
2 1
C
𝐺𝐶 +𝑀
B O
10 9
(v,w)=(C,1)
extend
הרצת האלגוריתם
2 1
T 1
𝐺𝐶 +𝑀
8 C
8
10 9 B O
(v,w)=(8,9)
extend
הרצת האלגוריתם B O
2 1 T 1
𝐺𝐶 +𝑀
C
C
8
8
10 9
10 9
(v,w)=(10,2)
augment
הרצת האלגוריתם
G+M 4
𝑀𝐺𝐶 +
3 5
C
Expand
סיבוכיות
בכל פעולת augmentכמות הקודקודים החשופים קטנה באחת .מכיוון שהזיווג
רק גדל ,כמות הפעולות הללו היא .
נשים לב שפעולה של Extendלא משנה את מספר הקודקודים ב ’Gומקטינה את
מספר הקודקודים שלא ב.T
פעלת כיווץ מקטינה את מספר הקודקודים ב ’Gאך לא משנה את מספר
הקודקודים שלא ב.T
לכן בין שתי פעולות augmentמספר פעולות הכיווץ וה Extendהוא לכל
היותר .כלומר סה"כ במהל האלגוריתם יש פעולות כאלה.
כל פעולה כזו תיקח לכל היותר ולכן סה"כ .