You are on page 1of 82

‫אלגוריתמים ‪2‬‬

‫זיווגים בגרפים‬
‫גרף דו חלקי‪ /‬דו צדדי‬

‫גרף יקרא דו‪-‬צדדי או דו חלקי אם קיימת חלוקה של הקודקודים ל‪ 2 -‬קבוצות כך ש‪:‬‬ ‫‪‬‬

‫‪ )1‬וגם‬ ‫‪‬‬

‫‪)2‬כל צלע מקיימת‪ :‬וגם או וגם ‪.‬‬ ‫‪‬‬


‫האם הגרפים הבאים דו חלקיים‬
‫הגדרה זיווג‪/‬שידוך‬

‫קבוצת צלעות תקרא זיווג אם לכל קודקוד קיימת לכל היותר צלע אחת שנוגעת‬ ‫‪‬‬
‫בו‪.‬‬
‫זיווג‪/‬שידוך‬

‫‪ ‬זיווג בגרף דו צדדי יכול לתאר בעיות מהעולם האמיתי‪:‬‬


‫‪ ‬מגרשים ומשפחות‬
‫‪ ‬כיתות ושיעורים‬
‫‪ ‬מרצים וקורסים‬
‫‪ ‬כליות לאנשים שצריכים כליה‬
‫דוגמא‬
‫הגדרה זיווג מושלם‬

‫זיווג יקרא מושלם ב‪ , -‬אם‬ ‫‪‬‬


‫משפט ‪HALL‬‬

‫בהינתן גרף דו‪-‬צדדי כך ש‪ , -‬יש ב‪ G-‬זיווג מושלם אם"ם לכל מתקיים‬ ‫‪‬‬

‫כאשר‪:‬‬ ‫‪‬‬
‫משפט ‪HALL‬‬

‫תארו אלגוריתם למציאת זיווג בגרף דו"צ בהסתמך על ההוכחה של משפט‬ ‫‪‬‬
‫‪.HALL‬‬
‫מה קורה כאשר הגרף הוא לא דו צדדי?‬ ‫‪‬‬
‫זיווג‪/‬שידוך‬

‫‪ ‬זיווג בגרף לא דו צדדי יכול לתאר בעיות מהעולם האמיתי‪:‬‬


‫‪ ‬שותפים לדירה‪/‬מעונות‬
‫‪ ‬צוות לימוד‬
‫הגדרות‬

‫זיווג‪ , ,‬בגרף (לא מכוון) הוא קבוצת צלעות‪ , ,‬כך שכל קודקוד ב נוגע בלכל‬ ‫‪‬‬
‫היותר צלע אחת מ‪.‬‬
‫בהינתן גרף וזיווג‪ , ,‬נאמר שקודקוד‪ , ,‬מכוסה ע"י או ‪-‬מכוסה במידה וקיימת‬ ‫‪‬‬
‫צלע עבור כלשהו‪.‬‬
‫בהינתן גרף וזיווג‪ , ,‬נאמר שקודקוד‪ , ,‬לא מכוסה ע"י או ‪-‬חשוף במידה ולכל‬ ‫‪‬‬
‫מתקיים ‪.‬‬
‫דוגמא‬

‫‪4‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪5‬‬ ‫‪10‬‬

‫‪8‬‬ ‫‪7‬‬ ‫‪6‬‬ ‫‪9‬‬


‫הגדרות‬

‫‪ ‬זיווג מקסימלי הוא זיווג שלא מוכל ממש באף זיווג אחר‪.‬‬
‫‪ ‬זיווג מקסימום הוא זיווג שמקיים ש מקסימלי מבין כל הזיווגים‪ .‬כל‬
‫זיווג מקסימום הוא זיווג מקסימלי‪.‬‬
‫‪ ‬זיווג מושלם הוא זיווג שמקיים ‪ .‬כל זיווג מושלם הוא זיווג מקסימום‪.‬‬
‫דוגמא‬

‫‪G‬‬ ‫זיווג מקסימלי‬ ‫זיווג מקסימום וגם מושלם‬


‫דוגמא‬

‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬

‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬

‫‪7‬‬ ‫‪6‬‬ ‫‪5‬‬ ‫‪7‬‬ ‫‪6‬‬ ‫‪5‬‬ ‫‪7‬‬ ‫‪6‬‬ ‫‪5‬‬

‫‪G‬‬ ‫זיווג מקסימלי‬ ‫זיווג מקסימום לא‬


‫מושלם‬
‫זיווג מקסימלי‬

‫‪ ‬איך ייראה אלגוריתם למציאת זיווג מקסימלי?‬


‫הגדרות‬

‫בהינתן גרף וזיווג‪ , ,‬מסלול ייקרא‪ ,‬מסלול‪-‬חילוף של ‪ ,M‬אם הצלעות במסלול‬ ‫‪‬‬
‫מסודרות כך שכל שתי צלעות עוקבות אחת מ‪ M‬והשניה לא‪.‬‬
‫בהינתן גרף וזיווג‪ , ,‬מסלול ייקרא‪ ,‬מסלול‪-‬שיפור של ‪ ,M‬אם הוא מסלול חילוף‬ ‫‪‬‬
‫של ‪ M‬ובנוסף שני הקודקודים השונים בקצוות שלו הם ‪-M‬חשופים‪.‬‬
‫דוגמא‪-‬מסלול חילוף לא שיפור‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬


‫דוגמא‪-‬מסלולי שיפור‬

‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬

‫‪0‬‬ ‫‪1‬‬
‫מסלול שיפור‬

‫‪ ‬הרעיון של מסלול שיפור הוא שניתן באמצעותו ל"הגדיל" את הזיווג‪.‬‬


‫תזכורת‬

‫‪ ‬הפרש סימטרי‪:‬יהיו קבוצות‪ ,‬ההפרש הסימטרי של ‪ A‬ו‪ ,B -‬מסומן ‪ ,‬ומוגדר להיות הקבוצה ‪.‬‬
‫משפט‬

‫‪ ‬משפט‪-‬מסלול שיפור וזיווגים‬


‫‪  ‬בהינתן גרף וזיווג‪, ,‬‬
‫‪ M  ‬זיווג מקסימום אם"ם לא קיים מסלול שיפור של ‪.M‬‬
‫עץ חילוף‪-‬הגדרה‬

‫בהינתן גרף וזיווג‪ , ,‬ו ‪-M‬קודקוד חשוף ‪ .‬עץ חילוף הוא עץ שמורכב ממסלולי‬ ‫‪‬‬
‫חילוף של ‪ M‬שמתחילים ב‪.‬‬
‫עץ חילוף‬
‫יהי עץ חילוף אזי נחלק את הקודקודים שלו לשתי קבוצות‪. :‬‬ ‫‪‬‬

‫קודקודים ב הם קודקודים שיש מסלול באורך זוגי מ‪ r‬אליהם בעץ‪ .‬קודקודים ב‬ ‫‪‬‬
‫הם קודקודים שיש מסלול באורך איזוגי מ‪ r‬אליהם בעץ‪.‬‬
‫‪ ‬ניתן ליצור עץ עם הפונקציה הבאה‪ ,‬כאשר מתחילים מעץ בלי צלעות ועם‬ ‫‪‬‬
‫קודקוד אחד ‪ ,‬כאשר‬
‫עץ חילוף‬

 Extend(M,G,T,(v,w))//,,w M-coverd
 Let be the edge s.t
‫בניית‪/‬הגדלת עץ חילוף‪-‬דוגמא‬

‫‪4‬‬ ‫‪ ‬קלט‪:‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪5‬‬ ‫‪10‬‬

‫‪8‬‬ ‫‪7‬‬ ‫‪6‬‬ ‫‪9‬‬

‫‪8‬‬
‫בניית‪/‬הגדלת עץ חילוף‪-‬דוגמא‬

‫‪4‬‬ ‫‪ ‬קלט‪:‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪5‬‬ ‫‪10‬‬

‫‪8‬‬ ‫‪7‬‬ ‫‪6‬‬ ‫‪9‬‬


‫‪2‬‬ ‫‪3‬‬

‫‪Extend‬‬
‫‪8‬‬ ‫‪V=8‬‬
‫‪W=3‬‬
‫‪Z=2‬‬
‫בניית‪/‬הגדלת עץ חילוף‪-‬דוגמא‬

‫‪4‬‬ ‫‪ ‬קלט‪:‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪5‬‬ ‫‪10‬‬

‫‪8‬‬ ‫‪7‬‬ ‫‪6‬‬ ‫‪9‬‬


‫‪2‬‬ ‫‪3‬‬

‫‪Extend‬‬
‫‪V=8‬‬
‫‪8‬‬ ‫‪7‬‬ ‫‪6‬‬ ‫‪W=7‬‬
‫‪Z=6‬‬
‫בניית‪/‬הגדלת עץ חילוף‪-‬דוגמא‬

‫‪4‬‬ ‫‪ ‬קלט‪:‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪5‬‬ ‫‪10‬‬

‫‪8‬‬ ‫‪7‬‬ ‫‪6‬‬ ‫‪9‬‬


‫‪2‬‬ ‫‪3‬‬

‫‪Extend‬‬
‫‪V=6‬‬
‫‪8‬‬ ‫‪7‬‬ ‫‪6‬‬ ‫‪W=9‬‬
‫‪Z=10‬‬
‫‪9‬‬ ‫‪10‬‬
‫בניית‪/‬הגדלת עץ חילוף‪-‬דוגמא‬

‫‪4‬‬ ‫‪ ‬קלט‪:‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪5‬‬ ‫‪10‬‬

‫‪8‬‬ ‫‪7‬‬ ‫‪6‬‬ ‫‪9‬‬


‫‪2‬‬ ‫‪3‬‬

‫‪Extend‬‬
‫‪V=6‬‬
‫‪4‬‬
‫‪8‬‬ ‫‪7‬‬ ‫‪6‬‬ ‫‪5‬‬ ‫‪W=5‬‬
‫‪Z=4‬‬
‫‪9‬‬ ‫‪10‬‬
‫פונקציה ש"מגדילה" זיווג‬

 Augment (M,G,T,r,(v,w))//,,w M-exposed


 Let P’ be the path from r to v in T
 P=P’

 
‫דוגמא‬

‫‪4‬‬ ‫‪T‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪5‬‬ ‫‪10‬‬


‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬

‫‪8‬‬ ‫‪7‬‬ ‫‪6‬‬ ‫‪9‬‬ ‫‪B‬‬ ‫‪O‬‬


‫דוגמא‬

‫‪4‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪5‬‬ ‫‪10‬‬

‫‪8‬‬ ‫‪7‬‬ ‫‪6‬‬ ‫‪9‬‬


‫אלגוריתם למציאת זיווג מושלם בגרף דו צדדי‬
 Perfect_Matching_Algorithm_for_Bipartite_Graph(G=(V,E))

 Choose an M-exposed vertex, r, and


 While there exists with ,
 If w is M-exposed
 Augment (M,G,T,r,(v,w))
 If there is no M-exposed vertex in G
 Return the perfect matching M

 Else

 Else
 Extend(M,G,T,(v,w))
 Return no perfect matching
‫הרצת אלגוריתם על גרף דו‪-‬צדדי‬

‫‪ ‬קלט‪:‬‬
‫‪4‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪5‬‬

‫‪8‬‬ ‫‪7‬‬ ‫‪6‬‬


‫הרצת אלגוריתם על גרף דו‪-‬צדדי‬

‫‪G+M‬‬ ‫‪4‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪5‬‬


‫‪T‬‬
‫‪4‬‬

‫‪8‬‬ ‫‪7‬‬ ‫‪6‬‬


‫‪B‬‬ ‫‪O‬‬

‫)‪(v,w)=(4,5‬‬
‫‪Augment‬‬
‫הרצת אלגוריתם על גרף דו‪-‬צדדי‬

‫‪G+M‬‬ ‫‪4‬‬
‫‪T‬‬
‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪5‬‬

‫‪7‬‬

‫‪8‬‬ ‫‪7‬‬ ‫‪6‬‬

‫‪B‬‬ ‫‪O‬‬

‫)‪(v,w)=(7,8‬‬
‫‪Augment‬‬
‫הרצת אלגוריתם על גרף דו‪-‬צדדי‬

‫‪G+M‬‬ ‫‪4‬‬
‫‪T‬‬
‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪5‬‬

‫‪6‬‬

‫‪8‬‬ ‫‪7‬‬ ‫‪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‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪5‬‬ ‫‪T‬‬ ‫‪1‬‬

‫‪8‬‬ ‫‪7‬‬ ‫‪6‬‬ ‫‪B‬‬ ‫‪O‬‬

‫)‪(v,w)=(1,2‬‬
‫‪Augment‬‬
‫הרצת אלגוריתם על גרף דו‪-‬צדדי‬

‫‪G+M‬‬ ‫‪4‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪5‬‬

‫‪8‬‬ ‫‪7‬‬ ‫‪6‬‬


‫הרצת אלגוריתם על גרף דו‪-‬צדדי‬

‫‪ ‬קלט‪:‬‬
‫‪4‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪5‬‬ ‫‪T‬‬


‫‪4‬‬

‫‪8‬‬ ‫‪7‬‬ ‫‪6‬‬

‫)‪(v,w)=(4,5‬‬
‫‪Augment‬‬
‫הרצת אלגוריתם על גרף דו‪-‬צדדי‬

‫‪4‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪5‬‬ ‫‪T‬‬


‫‪1‬‬

‫‪8‬‬ ‫‪7‬‬ ‫‪6‬‬

‫)‪(v,w)=(1,2‬‬
‫‪Augment‬‬
‫הרצת אלגוריתם על גרף דו‪-‬צדדי‬

‫‪4‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪5‬‬ ‫‪T‬‬


‫‪3‬‬

‫‪8‬‬ ‫‪7‬‬ ‫‪6‬‬

‫)‪(v,w)=(3,2‬‬
‫‪Extend‬‬
‫הרצת אלגוריתם על גרף דו‪-‬צדדי‬

‫‪4‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪5‬‬ ‫‪T‬‬


‫‪3‬‬

‫‪2‬‬
‫‪8‬‬ ‫‪7‬‬ ‫‪6‬‬

‫‪1‬‬
‫)‪(v,w)=(3,7‬‬
‫‪augment‬‬
‫הרצת אלגוריתם על גרף דו‪-‬צדדי‬

‫‪4‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪5‬‬ ‫‪T‬‬


‫‪8‬‬

‫‪8‬‬ ‫‪7‬‬ ‫‪6‬‬

‫)‪(v,w)=(8,7‬‬
‫‪Extend‬‬
‫הרצת אלגוריתם על גרף דו‪-‬צדדי‬

‫‪4‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪5‬‬


‫‪3‬‬

‫‪8‬‬ ‫‪7‬‬ ‫‪6‬‬


‫‪T‬‬ ‫‪7‬‬
‫‪8‬‬

‫)‪(v,w)=(3,2‬‬
‫‪Extend‬‬
‫הרצת אלגוריתם על גרף דו‪-‬צדדי‬

‫‪4‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪5‬‬


‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬

‫‪8‬‬ ‫‪7‬‬ ‫‪6‬‬


‫‪T‬‬ ‫‪7‬‬
‫‪8‬‬

‫האלגוריתם יחזיר שאין זיווג מושלם‬


‫נכונות האלגוריתם‬

‫‪ ‬אם אלגוריתם מחזיר זיווג מושלם אזי יש זיווג מושלם‬


‫‪ ‬צריך להוכיח‪ :‬אם האלגוריתם מחזיר שאין זיווג מושלם אזי אכן אין זיווג מושלם‪.‬‬

‫‪ ‬נשים לב‪ -‬כאשר האלגוריתם מחזיר שאין זיווג מושלם‬


‫‪ ‬קיים קודקוד חשוף‬
‫‪ ‬אין קודקוד של ‪ B‬שמחובר לקודקוד לא בעץ‬
B ‫אפשרויות של‬

 B-not in T
 B-O
 B-B
‫עץ חילוף‬

‫‪ ‬עץ חילוף ייקרא מתוסכל אם כל צלע בגרף שיש לה קודקוד ב‪ B‬הקודקוד השני שלה נמצא ב‪.O‬‬
‫עץ חילוף‬

‫‪ ‬טענה( בלי הוכחה)‪ -‬מבוסס על חומר שלא נלמד‬


‫‪ ‬בהינתן גרף וזיווג‪ , ,‬אם ‪ T‬עץ חילוף של ‪ M‬מתוסכל אזי ב‪ G‬אין זיווג מושלם‪.‬‬

‫‪ ‬תזכורת‪-‬‬
‫הוא גרף דו צדדי אםם לא מכיל מעגלים באורך אי‪-‬זוגי‪.‬‬ ‫‪‬‬
‫עץ חילוף‬

‫‪ ‬טענה‬
‫‪ ‬בהינתן גרף דו חלקי ‪ ,‬זיווג‪ ,‬ועץ חילוף‪ T ,‬כך שלא קיים קודקוד ב שיש לו שכן שאינו בעץ‪ ,‬אזי העץ ‪T‬‬
‫מתוסכל‪.‬‬
‫‪ ‬הוכחה‬
‫‪ ‬כל מה שצריך להראות זה שכל קודקוד ב ‪ B‬שכן של קודקוד ב‪ .O‬מההנחה הקודקודים ב‪ B‬שכנים רק של‬
‫קודקודים בעץ‪ .‬לכן נניח בשלילה שיש קודקוד ב‪ B‬ששכן של קודקוד ב‪ B‬לשניהם יש מסלול באורך זוגי מ‪r‬‬
‫מסלולים אלה בתוספת הצלע מהווים מעגל באורך אי זוגי‪ ,‬בסתירה לכך שהגרף דו חלקי‪ .‬ולכן העץ‬
‫מתוסכל‪ ,‬כנדרש‪.‬‬
‫עץ חילוף‬

‫לא‬
‫…‬ ‫בעץ‬
‫‪x‬‬
‫‪r‬‬

‫…‬ ‫‪y‬‬
‫גרף לא דו צדדי‬

‫‪ ‬נרצה להרחיב את האלגוריתם לגרף לא דו צדדי‪.‬‬


‫‪ ‬נסתכל על הריצה הבאה‪:‬‬
‫נסיון הרצת האלגוריתם על גרף לא דו‪-‬צדדי‬

‫‪G+M‬‬ ‫‪4‬‬
‫‪T‬‬ ‫‪4‬‬

‫‪8‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪5‬‬

‫‪7‬‬ ‫‪6‬‬
‫‪B‬‬ ‫‪O‬‬

‫)‪(v,w)=(4,3‬‬
‫‪Augment‬‬
‫נסיון הרצת האלגוריתם על גרף לא דו‪-‬צדדי‬

‫‪4‬‬ ‫‪T‬‬ ‫‪5‬‬


‫‪G+M‬‬

‫‪8‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪5‬‬

‫‪7‬‬ ‫‪6‬‬
‫‪B‬‬ ‫‪O‬‬

‫)‪(v,w)=(5,6‬‬
‫‪Augment‬‬
‫נסיון הרצת האלגוריתם על גרף לא דו‪-‬צדדי‬

‫‪G+M‬‬ ‫‪4‬‬ ‫‪T‬‬ ‫‪7‬‬

‫‪8‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪5‬‬

‫‪7‬‬ ‫‪6‬‬
‫‪B‬‬ ‫‪O‬‬

‫)‪(v,w)=(7,6‬‬
‫‪Extend‬‬
‫נסיון הרצת האלגוריתם על גרף לא דו‪-‬צדדי‬
‫‪T‬‬

‫‪G+M‬‬ ‫‪4‬‬ ‫‪5‬‬

‫‪8‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪5‬‬

‫‪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‬‬

‫‪7‬‬ ‫‪6‬‬ ‫‪8‬‬

‫‪10‬‬ ‫‪9‬‬
‫דוגמא‪ -‬הגרף אחרי הכיווץ‬

‫‪2‬‬ ‫‪1‬‬

‫𝐶𝐺‬

‫‪C‬‬

‫‪8‬‬

‫‪10‬‬ ‫‪9‬‬
‫מעגלים באורך אי זוגי‬

‫‪ ‬אם קיים זיווג לגרף המכווץ אזי ניתן להגדיל את הזיווג בקלות כך שיתאים לגרף‬
‫‪ ‬לדוגמא (נלקח מהספר ‪)Combinatorial optimization‬‬
‫עצים וכיווץ מעגלים באורך אי זוגי‬

‫באלגוריתם נרצה לכווץ מעגל שכל קודקודיו בעץ לאחר הכיווץ הצלעות שיהיו‬ ‫‪‬‬
‫בעץ הן צלעות שהיו בעץ מקודם או " מתאימות" לצלעות שהיו בעץ מקודם‪.‬‬
‫דוגמא‪-‬נלקח מהספר‬
‫‪Combinatorial optimization‬‬

‫אחרי הכיווץ‬
‫לפני הכיווץ‬
 Blossom_Algorithm_for_Perfect_Matching (G=(V,E))

 Choose an M’-exposed vertex in G’, r, and


 While there exists with ,
 If and is M’-exposed
 Augment (M’,G’,T,r,(v,w))
 Expand M' to a matching M of G

 If there is no M'-exposed vertex in G'


 Return the perfect matching M

 Else

 Else if and is M’-covered


 Extend(M',G',T,(v,w))
 Else if
 Let cycle C be the cycle that is formed from T and
 Shrink C. update M' and T.
 G has no perfect matching
‫הרצת האלגוריתם‬

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
‫הרצת האלגוריתם‬

‫‪2‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪1‬‬

‫‪G+M‬‬ ‫‪4‬‬
‫𝑀‪𝐺𝐶 +‬‬
‫‪3‬‬ ‫‪5‬‬
‫‪C‬‬

‫‪7‬‬ ‫‪6‬‬ ‫‪8‬‬


‫‪8‬‬

‫‪10‬‬ ‫‪9‬‬ ‫‪10‬‬ ‫‪9‬‬

‫‪Expand‬‬
‫סיבוכיות‬

‫בכל פעולת ‪ augment‬כמות הקודקודים החשופים קטנה באחת‪ .‬מכיוון שהזיווג‬ ‫‪‬‬
‫רק גדל‪ ,‬כמות הפעולות הללו היא ‪.‬‬
‫נשים לב שפעולה של ‪ Extend‬לא משנה את מספר הקודקודים ב‪ ’G‬ומקטינה את‬ ‫‪‬‬
‫מספר הקודקודים שלא ב‪.T‬‬
‫פעלת כיווץ מקטינה את מספר הקודקודים ב‪ ’G‬אך לא משנה את מספר‬ ‫‪‬‬
‫הקודקודים שלא ב‪.T‬‬
‫לכן בין שתי פעולות ‪ augment‬מספר פעולות הכיווץ וה‪ Extend‬הוא לכל‬ ‫‪‬‬
‫היותר ‪ .‬כלומר סה"כ במהל האלגוריתם יש פעולות כאלה‪.‬‬
‫כל פעולה כזו תיקח לכל היותר ולכן סה"כ ‪.‬‬ ‫‪‬‬

You might also like