קירוב של בעיות NP-קשות
Download
Report
Transcript קירוב של בעיות NP-קשות
בעיות פער
Gap Problems
בעיות פער
Gap Problems
אנחנו לא יודעים להכריע (בזמן פולינומיאלי) האם קיים
פתרון מדויק לבעית אופטימיזציה
(למשל -בבעית הקליקה,
האם קיימת קליקה בגודל )?α
אנחנו כן יודעים להפריד בין המקרים בהם קיים פתרון
מדויק ,לבין המקרים בהם לא קיים אפילו פתרון מקורב
(למשל ,להפריד בין:
א .קיימת קליקה בגודל α
ב .לא קיימת קליקה בגודל ))...α(1-ε
בעיות פער
Gap Problems
מכונה שפותרת בעיית ]:Gap[a,b
• תחזיר 'כן' אם הפתרון המקסימלי ≥ b
• תחזיר 'לא' אם הפתרון המקסימלי < a
• ומה אם הפתרון המקסימלי בין aל?b-
בעיות פער
Gap Problems
מכונה שפותרת בעיית ]:Gap[a,b
• תחזיר 'כן' אם הפתרון המקסימלי ≥ b
• תחזיר 'לא' אם הפתרון המקסימלי < a
• ומה אם הפתרון המקסימלי בין aל...b-
כל פלט של המכונה הוא חוקי עבור פתרון מקסימלי בין aלb-
? = )M(x
)f(x
M(x) = Accept
b
a
M(x) = Reject
חתך מקסימלי
Maximum Cut
• קלט :גרף )G=(V,E
• פלט :חתך מקסימום בגרף
G
α = 11/13
חתך מקסימלי
Maximum Cut
בעית MAXCUTהיא -NPשלמה...
נראה אלגוריתם לפתרון של ]:gap-MAXCUT[α/2,α
מפריד בין:
א .קיים חתך בגודל α
ב .לא קיים חתך בגודל α/2
G
α = 11/13
]gap-MAXCUT[α/2,α
ניתוח:
אם היינו מגרילים -2צביעה של הגרף...
G
לכל קשת :e=)u,v(ϵE
Pr[eϵCUT] = Pr[Color)u(≠Color)v(] = 1/2
לכן אנחנו מצפים לקבל לפחות חצי מהקשתות בגרף...
gap-MAXCUT[α/2,α]
G
:ניתוח
...צביעה של הגרף-2 אם היינו מגרילים
:e=)u,v(ϵE לכל קשת
Pr[eϵCUT] = Pr[Color)u(≠Color)v(] = 1/2
:ז"א
E[|CUT|] = eE Pr[eϵCUT] / |E| = 1/2
:ולכן
|MAXCUT| ≥ E[|CUT|] = 1/2
]gap-MAXCUT[α/2,α
אלגוריתם להכרעת
]:gap-MAXCUT[α/2,α
G
קבל אמ"ם α ≥ 1
נאותות – אם קבלנו ,אז:
|α/2 ≥ 1/2 ≥ |MAXCUT
שלמות – אם דחינו ,אז:
|MAXCUT| ≥ 1 < α
צביעת צמתים
Vertex Coloring
)(Chromatic Number
קלט :גרף בלתי מכוון G
פלט :צביעה של Vעם kמינימלי
כך שאין צמתים שכנים עם אותו צבע
G
k=2
קירוב לצביעת צמתים
gap-kCOL
בעיית צביעת הצמתים היא -NPקשה ,ולכן היינו
רוצים לקרב אותה...
נתבונן בבעית הפער:
]gap-kCOL[3,4
קירוב לצביעת צמתים
gap-kCOL
נתבונן בבעית הפער:
]gap-kCOL[3,4
כל הגרפים:
k≥4
k≥3
?k = π
קירוב לצביעת צמתים
gap-kCOL
k≥4
k≥3
k = π?
:מסקנה
gap-kCOL[3,4] = 3COL
קירוב לצביעת צמתים
gap-kCOL
מסקנה:
gap-kCOL[3,4] = 3COL
אבל...
3COLהיא -NPשלמה
k≥4
k≥3
?k = π
קירוב לצביעת צמתים
gap-kCOL
בעיית צביעת הצמתים היא -NPשלמה ,ולכן היינו רוצים לקרב
אותה ,אבל...
מסקנה :חישוב )-(3/4קירוב לבעיית צביעת צמתים
היא בעיה -NPשלמה
(למעשה ,גם קירובים הרבה יותר חלשים הם -NPקשים)...
קירוב לצביעת צמתים
]|gap-kCOL[3,3√|V
המטרה :לפתור את ]| gap-kCOL[3,3√|Vבזמן פולינומיאלי.
קירוב לצביעת צמתים
]|gap-kCOL[3,3√|V
המטרה :לפתור את ]| gap-kCOL[3,3√|Vבזמן פולינומיאלי.
האמצעי :נראה אלגוריתם לצביעה של גרף -3צביע בעזרת |3√|V
צבעים.
שלמות :אם הגרף -3צביע ,האלגוריתם יצליח לצבוע אותו ב3√|V|-
צבעים ,ולכן נקבל.
נאותות :אם הגרף אינו |-3√|Vצביע ,לא נצליח לצבוע אותו ב3√|V|-
צבעים ,ולכן נדחה.
הערה :קיים אלגוריתם הצובע ב...O(|V|0.2111)-
קירוב לצביעת צמתים
]|gap-kCOL[3,3√|V
אלגוריתם עזר :1אם dהיא דרגת המקסימום של גרף G
נצבע את Gב d+1-צבעים בזמן פולינומיאלי:
נעבור על כל הצמתים ובכל פעם שנגיע לצמת נצבע אותו
בצבע ששונה מהשכנים הצבועים שלו.
תמיד קיים צבע כזה כי יש d+1צבעים ,ולכל היותר d
שכנים.
קירוב לצביעת צמתים
]|gap-kCOL[3,3√|V
אלגוריתם עזר :2עבור צמת vבגרף -3צביע נצבע את כל
השכנים של vב 2-צבעים בזמן פולינומיאלי:
נתבונן בגרף המושרה ע"י קבוצת השכנים של .v
זהו גרף -2צביע (כי אף אחד מהם לא צבוע בצבע של .)v
בכל רכיב קשירות נבצע BFSמאחד הצמתים .u
נצבע את השכבות הזוגיות בכחול ,ואת האי-זוגיות בירוק.
קירוב לצביעת צמתים
]|gap-kCOL[3,3√|V
בכל רכיב קשירות נבצע BFSמאחד הצמתים .u
נצבע את השכבות הזוגיות בכחול ,ואת האי-זוגיות בירוק.
u
v
קירוב לצביעת צמתים
]|gap-kCOL[3,3√|V
אלגוריתם לצביעת גרף -3צביע Gבעזרת | 3√|Vצבעים:
לולאה:
.1אם | degmax)G(<√|Vצבע את Gבעזרת אלג' עזר .1
.2אחרת ,קיים צמת vהמקיים.deg )v(≥√|V| :
נצבע את כל שכניו ב 2-צבעים (חדשים) בעזרת אלג'
עזר 2ונסיר אותם מהגרף.
קירוב לצביעת צמתים
]|gap-kCOL[3,3√|V
לולאה:
.1אם | degmax)G(<√|Vצבע את Gבעזרת אלג' עזר .1
.2אחרת ,קיים צמת vהמקיים.deg )v(≥√|V| :
נצבע את כל שכניו ב 2-צבעים (חדשים) בעזרת אלג'
עזר 2ונסיר אותם מהגרף.
ניתוח:
שלב – 1מתבצע לכל היותר פעם אחת √|V| -צבעים
שלב – 2מתבצע לכל היותר | √|Vפעמים 2√|V| -צבעים
סה"כ 3√|V| -צבעים
SUBSET-SUM
Instance: A multi-set of numbers denoted S and a
target number t.
Problem: To decide if there exists a subset YS,
s.t yYy=t.
SUBSET-SUM
:• דוגמא
S = {3,4,8,8,11}, t = 19:
SUBSET-SUM
:• דוגמא
S = {3,4,8,8,11}, t = 19:
Y = {3,8,8}… 3+8+8 = 19
SUBSET-SUM
:• דוגמא
S = {3,4,8,8,11}, t = 19:
Y = {3,8,8}… 3+8+8 = 19
:2 • דוגמא
S = {3,4,8,8,11}, t = 13:
SUBSET-SUM
• דוגמא:
S = {3,4,8,8,11}, t = 19:
Y = {3,8,8}… 3+8+8 = 19
• דוגמא :2
S = {3,4,8,8,11}, t = 13:
אין פתרון (> <S,tלא בשפה)
gap-Subset Sum[(1-ε(,1]
...שלמה-NP היאSubset Sum-• בעיית ה
]gap-Subset Sum[(1-ε(,1
• בעיית ה Subset Sum-היא -NPשלמה
• נרצה למצוא פתרון מקורב...
]gap-Subset Sum[(1-ε(,1
• בעיית ה Subset Sum-היא -NPשלמה
• נרצה למצוא פתרון מקורב
– במקום:
– נדרוש:
yYy = t
(1-ε)t ≥ yYy ≥ t
gap-Subset Sum[(1-ε(,1]
yYy = t
(1-ε)t ≥ yYy ≥ t
:– במקום
:– נדרוש
:1 דוגמא
S = {3,4,8,8,11}, t = 19, ε = 0.1
(0.9)19 ≥ )11+3+4( ≥ 19
gap-Subset Sum[(1-ε(,1]
yYy = t
(1-ε)t ≥ yYy ≥ t
:– במקום
:– נדרוש
:1 דוגמא
S = {3,4,8,8,11}, t = 19, ε = 0.1
(0.9)19 ≥ )11+3+4( ≥ 19
:2 דוגמא
S = {3,4,8,8,11}, t = 13, ε = 0.1
(0.9)13 ≥ )8+4( ≥ 13
gap-Subset Sum[(1-ε(,1]
yYy = t
(1-ε)t ≥ yYy ≥ t
:– במקום
:– נדרוש
:1 דוגמא
S = {3,4,8,8,11}, t = 19, ε = 0.1
(0.9)19 ≥ )11+3+4( ≥ 19
:2 דוגמא
S = {3,4,8,8,11}, t = 13, ε = 0.1
(0.9)13 ≥ )8+4( ≥ 13
:3 דוגמא
S = {3,4,8,8,11}, t = 10, ε = 0.1
...אין פתרון
]gap-Subset Sum[(1-ε(,1
– במקום:
– נדרוש:
yYy = t
(1-ε)t ≥ yYy ≥ t
רעיון :במקום להסתכל על כל תתי-הסכומים ,נתעלם
מתתי סכומים שהם |-εt/|Sקרובים...
]gap-Subset Sum[(1-ε(,1
אתחול{0}→R :
לולאה -לכל xב:S-
x+R union R→R .1
.2מיין את R
min)R(→y .3
.4לולאה -לכל zב:R-
.1אם :y+εt/|S| < z ≥ t
z→y
אחרת:
R\{z} → R
החזר את )max(R
רעיון :במקום להסתכל על כל
תתי-הסכומים ,נתעלם מתתי
סכומים שהם |-εt/|Sקרובים...
– Rקבוצת תתי סכומים של S
לולאה חיצונית – בכל איטרציה
נאפשר הוספת משתנה אחד
לכל תת-סכום
לולאה פנימית – ננפה את
תתי-סכומים קרובים מדי כדי
לשמור על מספר קטן של
אפשרויות
gap-Subset Sum[(1-ε(,1]
:דוגמת הרצה
S = {3,4,8,8,11}, t = 19, ε = 0.3
εt/|S| = )0.3)*(19)/5 = 1.14 > 1
{0}→R :אתחול
:S- בx לכל- לולאה
x+R union R→R .1
R מיין את.2
min)R(→y .3
:R- בz לכל- לולאה.4
:y+εt/|S| < z ≥ t אם.1
z→y
:אחרת
R\{z} → R
max(R) החזר את
gap-Subset Sum[(1-ε(,1]
:דוגמת הרצה
S = {3,4,8,8,11}, t = 19, ε = 0.3
R = {0}
{0}→R :אתחול
:S- בx לכל- לולאה
x+R union R→R .1
R מיין את.2
min)R(→y .3
:R- בz לכל- לולאה.4
:y+εt/|S| < z ≥ t אם.1
z→y
:אחרת
R\{z} → R
max(R) החזר את
gap-Subset Sum[(1-ε(,1]
:דוגמת הרצה
S = {3,4,8,8,11}, t = 19, ε = 0.3
R = {0}
R = {0,3}
{0}→R :אתחול
:S- בx לכל- לולאה
x+R union R→R .1
R מיין את.2
min)R(→y .3
:R- בz לכל- לולאה.4
:y+εt/|S| < z ≥ t אם.1
z→y
:אחרת
R\{z} → R
max(R) החזר את
gap-Subset Sum[(1-ε(,1]
:דוגמת הרצה
S = {3,4,8,8,11}, t = 19, ε = 0.3
R = {0}
R = {0,3}
R = {0,3,4,7}
{0}→R :אתחול
:S- בx לכל- לולאה
x+R union R→R .1
R מיין את.2
min)R(→y .3
:R- בz לכל- לולאה.4
:y+εt/|S| < z ≥ t אם.1
z→y
:אחרת
R\{z} → R
max(R) החזר את
gap-Subset Sum[(1-ε(,1]
:דוגמת הרצה
S = {3,4,8,8,11}, t = 19, ε = 0.3
R = {0}
R = {0,3}
R = {0,3,4,7}
R = {0,3,7,8,11,15}
{0}→R :אתחול
:S- בx לכל- לולאה
x+R union R→R .1
R מיין את.2
min)R(→y .3
:R- בz לכל- לולאה.4
:y+εt/|S| < z ≥ t אם.1
z→y
:אחרת
R\{z} → R
max(R) החזר את
gap-Subset Sum[(1-ε(,1]
:דוגמת הרצה
S = {3,4,8,8,11}, t = 19, ε = 0.3
R = {0}
R = {0,3}
R = {0,3,4,7}
R = {0,3,7,8,11,15}
R = {0,3,7,8,11,11,15,15,19,23}
{0}→R :אתחול
:S- בx לכל- לולאה
x+R union R→R .1
R מיין את.2
min)R(→y .3
:R- בz לכל- לולאה.4
:y+εt/|S| < z ≥ t אם.1
z→y
:אחרת
R\{z} → R
max(R) החזר את
gap-Subset Sum[(1-ε(,1]
:דוגמת הרצה
S = {3,4,8,8,11}, t = 19, ε = 0.3
R = {0}
R = {0,3}
R = {0,3,4,7}
R = {0,3,7,8,11,15}
R = {0,3,7,8,11,11,15,15,19,23}
R = {0,3,7,11,11,14,15,18,19,22,…
26,30}
(0.7)19 ≥ 18 = 3 + 4 + 11 ≥ 19
{0}→R :אתחול
:S- בx לכל- לולאה
x+R union R→R .1
R מיין את.2
min)R(→y .3
:R- בz לכל- לולאה.4
:y+εt/|S| < z ≥ t אם.1
z→y
:אחרת
R\{z} → R
max(R) החזר את
]gap-Subset Sum[(1-ε(,1
אתחול{0}→R :
לולאה -לכל xב:S-
x+R union R→R .1
.2מיין את R
min)R(→y .3
.4לולאה -לכל zב:R-
.1אם :y+εt/|S| < z ≥ t
z→y
אחרת:
R\{z} → R
החזר את )max(R
סיבוכיות:
]gap-Subset Sum[(1-ε(,1
אתחול{0}→R :
לולאה -לכל xב:S-
x+R union R→R .1
.2מיין את R
min)R(→y .3
.4לולאה -לכל zב:R-
.1אם :y+εt/|S| < z ≥ t
z→y
אחרת:
R\{z} → R
החזר את )max(R
סיבוכיות:
מיון של ( O(|R|) – Rמיזוג)...
לולאה פנימית – )|O(|R
גודל מקסימלי של O(|S|/ε) – R
]gap-Subset Sum[(1-ε(,1
אתחול{0}→R :
לולאה -לכל xב:S-
x+R union R→R .1
.2מיין את R
min)R(→y .3
.4לולאה -לכל zב:R-
.1אם :y+εt/|S| < z ≥ t
z→y
אחרת:
R\{z} → R
החזר את )max(R
סיבוכיות:
מיון של ( O(|R|) – Rמיזוג)...
לולאה פנימית – )|O(|R
גודל מקסימלי של O(|S|/ε) – R
לולאה חיצונית – | |Sאיטרציות
סה"כ –
)O(|S|2/ε
gap-Subset Sum[(1-ε(,1]
?נכונות
]gap-Subset Sum[(1-ε(,1
שלמות( :אם קיימת קבוצה Yהמקיימת )yYy = t
נוכיח באינדוקציה...
]gap-Subset Sum[(1-ε(,1
שלמות( :אם קיימת קבוצה Yהמקיימת )yYy = t
נסמן ב Y(i)-את קבוצת האיברים מ Y-עליהם עברנו ב i-האיטרציות
הראשונות של הלולאה החיצונית
טענת האינדוקציה – באיטרציה ה i-קיים zב R-המקיים:
yY(i)y-iεt/|S| ≥ z ≥ yY(i)y
]gap-Subset Sum[(1-ε(,1
שלמות( :אם קיימת קבוצה Yהמקיימת )yYy = t
טענת האינדוקציה – באיטרציה ה i-קיים zב R-המקיים:
yY(i)y-iεt/|S| ≥ z ≥ yY(i)y
בסיס – טריוויאלי
]gap-Subset Sum[(1-ε(,1
שלמות( :אם קיימת קבוצה Yהמקיימת )yYy = t
טענת האינדוקציה – באיטרציה ה i-קיים zב R-המקיים:
yY(i)y-iεt/|S| ≥ z ≥ yY(i)y
צעד –
א .אם המשתנה הנוכחי xשייך ל,Y-
לפני הניפוי z=zi-1+xנמצא בR-
ומאינדוקציה מתקיים שyY(i)y-(i-1)εt/|S| ≥ z ≥ yY(i)y -
אם zהוצא בניפוי בגלל קרבה ל ,z’-אז מתקיים:
|yY(i)y-(i-1)εt/|S| ≥ z ≥ z’+εt/|S| ≥ yY(i)y+εt/|S
yY(i)y-iεt/|S| ≥ z-εt/|S| ≥ z’ ≥ yY(i)y
]gap-Subset Sum[(1-ε(,1
שלמות( :אם קיימת קבוצה Yהמקיימת )yYy = t
טענת האינדוקציה – באיטרציה ה i-קיים zב R-המקיים:
yY(i)y-iεt/|S| ≥ z ≥ yY(i)y
צעד –
ב .אם המשתנה הנוכחי xלא שייך ל,Y-
לפני הניפוי z=zi-1נמצא בR-
ומאינדוקציה מתקיים שyY(i)y-(i-1)εt/|S| ≥ z ≥ yY(i)y -
אם zהוצא בניפוי בגלל קרבה ל ,z’-אז מתקיים:
|yY(i)y-(i-1)εt/|S| ≥ z ≥ z’+εt/|S| ≥ yY(i)y+εt/|S
yY(i)y-iεt/|S| ≥ z-εt/|S| ≥ z’ ≥ yY(i)y
]gap-Subset Sum[(1-ε(,1
נאותות( :אם בסוף הריצה קיים zב R-המקיים )z ≥ )1-ε)t
]gap-Subset Sum[(1-ε(,1
נאותות( :אם בסוף הריצה קיים zב R-המקיים )z ≥ )1-ε)t
בכל שלב בריצה Rמכיל רק תתי-סכומים חוקיים של .S
לכן ,אם בסוף הריצה קיים zב R-המקיים z ≥ )1-ε)tאז בהכרח
קיימת קבוצה Yהמקיימת:
(1-ε)t ≥ yYy ≥ t