קירוב של בעיות 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|] = eE 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 YS,
s.t yYy=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‬שלמה‬
‫• נרצה למצוא פתרון מקורב‬
‫– במקום‪:‬‬
‫– נדרוש‪:‬‬
‫‪yYy = t‬‬
‫‪(1-ε)t ≥ yYy ≥ t‬‬
gap-Subset Sum[(1-ε(,1]
yYy = t
(1-ε)t ≥ yYy ≥ t
:‫– במקום‬
:‫– נדרוש‬
:1 ‫דוגמא‬
S = {3,4,8,8,11}, t = 19, ε = 0.1
(0.9)19 ≥ )11+3+4( ≥ 19
gap-Subset Sum[(1-ε(,1]
yYy = t
(1-ε)t ≥ yYy ≥ 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]
yYy = t
(1-ε)t ≥ yYy ≥ 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‬‬
‫– במקום‪:‬‬
‫– נדרוש‪:‬‬
‫‪yYy = t‬‬
‫‪(1-ε)t ≥ yYy ≥ 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‬המקיימת ‪)yYy = t‬‬
‫נוכיח באינדוקציה‪...‬‬
‫]‪gap-Subset Sum[(1-ε(,1‬‬
‫שלמות‪( :‬אם קיימת קבוצה ‪ Y‬המקיימת ‪)yYy = t‬‬
‫נסמן ב‪ Y(i)-‬את קבוצת האיברים מ‪ Y-‬עליהם עברנו ב‪ i-‬האיטרציות‬
‫הראשונות של הלולאה החיצונית‬
‫טענת האינדוקציה – באיטרציה ה‪ i-‬קיים ‪ z‬ב‪ R-‬המקיים‪:‬‬
‫‪yY(i)y-iεt/|S| ≥ z ≥ yY(i)y‬‬
‫]‪gap-Subset Sum[(1-ε(,1‬‬
‫שלמות‪( :‬אם קיימת קבוצה ‪ Y‬המקיימת ‪)yYy = t‬‬
‫טענת האינדוקציה – באיטרציה ה‪ i-‬קיים ‪ z‬ב‪ R-‬המקיים‪:‬‬
‫‪yY(i)y-iεt/|S| ≥ z ≥ yY(i)y‬‬
‫בסיס – טריוויאלי‬
‫]‪gap-Subset Sum[(1-ε(,1‬‬
‫שלמות‪( :‬אם קיימת קבוצה ‪ Y‬המקיימת ‪)yYy = t‬‬
‫טענת האינדוקציה – באיטרציה ה‪ i-‬קיים ‪ z‬ב‪ R-‬המקיים‪:‬‬
‫‪yY(i)y-iεt/|S| ≥ z ≥ yY(i)y‬‬
‫צעד –‬
‫א‪ .‬אם המשתנה הנוכחי ‪ x‬שייך ל‪,Y-‬‬
‫לפני הניפוי ‪ z=zi-1+x‬נמצא ב‪R-‬‬
‫ומאינדוקציה מתקיים ש‪yY(i)y-(i-1)εt/|S| ≥ z ≥ yY(i)y -‬‬
‫אם ‪ z‬הוצא בניפוי בגלל קרבה ל‪ ,z’-‬אז מתקיים‪:‬‬
‫|‪yY(i)y-(i-1)εt/|S| ≥ z ≥ z’+εt/|S| ≥ yY(i)y+εt/|S‬‬
‫‪yY(i)y-iεt/|S| ≥ z-εt/|S| ≥ z’ ≥ yY(i)y‬‬
‫]‪gap-Subset Sum[(1-ε(,1‬‬
‫שלמות‪( :‬אם קיימת קבוצה ‪ Y‬המקיימת ‪)yYy = t‬‬
‫טענת האינדוקציה – באיטרציה ה‪ i-‬קיים ‪ z‬ב‪ R-‬המקיים‪:‬‬
‫‪yY(i)y-iεt/|S| ≥ z ≥ yY(i)y‬‬
‫צעד –‬
‫ב‪ .‬אם המשתנה הנוכחי ‪ x‬לא שייך ל‪,Y-‬‬
‫לפני הניפוי ‪ z=zi-1‬נמצא ב‪R-‬‬
‫ומאינדוקציה מתקיים ש‪yY(i)y-(i-1)εt/|S| ≥ z ≥ yY(i)y -‬‬
‫אם ‪ z‬הוצא בניפוי בגלל קרבה ל‪ ,z’-‬אז מתקיים‪:‬‬
‫|‪yY(i)y-(i-1)εt/|S| ≥ z ≥ z’+εt/|S| ≥ yY(i)y+εt/|S‬‬
‫‪yY(i)y-iεt/|S| ≥ z-εt/|S| ≥ z’ ≥ yY(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 ≥ yYy ≥ t‬‬