1 / 53

בעיות פער Gap Problems

בעיות פער Gap Problems. בעיות פער Gap Problems. אנחנו לא יודעים להכריע (בזמן פולינומיאלי) האם קיים פתרון מדויק לבעית אופטימיזציה (למשל - בבעית הקליקה, האם קיימת קליקה בגודל α ? ) אנחנו כן יודעים להפריד בין המקרים בהם קיים פתרון מדויק, לבין המקרים בהם לא קיים אפילו פתרון מקורב

fleta
Download Presentation

בעיות פער Gap Problems

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. בעיות פערGap Problems

  2. בעיות פערGap Problems אנחנו לא יודעים להכריע (בזמן פולינומיאלי) האם קיים פתרון מדויק לבעית אופטימיזציה (למשל - בבעית הקליקה, האם קיימת קליקה בגודל α?) אנחנו כן יודעים להפריד בין המקרים בהם קיים פתרון מדויק, לבין המקרים בהם לא קיים אפילו פתרון מקורב (למשל, להפריד בין: א. קיימת קליקה בגודל α ב. לא קיימת קליקה בגודל α(1-ε)...)

  3. בעיות פערGap Problems מכונה שפותרת בעיית Gap[a,b]: • תחזיר 'כן' אם הפתרון המקסימלי ≥ b • תחזיר 'לא' אם הפתרון המקסימלי < a • ומה אם הפתרון המקסימלי בין a ל-b?

  4. בעיות פערGap Problems מכונה שפותרת בעיית Gap[a,b]: • תחזיר 'כן' אם הפתרון המקסימלי ≥ b • תחזיר 'לא' אם הפתרון המקסימלי < a • ומה אם הפתרון המקסימלי בין a ל-b... כל פלט של המכונה הוא חוקי עבור פתרון מקסימלי בין a ל-b M(x) = ? f(x) M(x) = Reject M(x) = Accept a b

  5. חתך מקסימליMaximum Cut • קלט: גרף G=(V,E) • פלט: חתך מקסימום בגרף G α = 11/13

  6. G חתך מקסימליMaximum Cut בעית MAXCUT היא NP-שלמה... נראה אלגוריתם לפתרון של gap-MAXCUT[α/2,α]: מפריד בין: א. קיים חתך בגודל α ב. לא קיים חתך בגודל α/2 α = 11/13

  7. gap-MAXCUT[α/2,α] G ניתוח: אם היינו מגרילים 2-צביעה של הגרף... לכל קשת e=(u,v)ϵE: Pr[eϵCUT] = Pr[Color(u)≠Color(v)] = 1/2 לכן אנחנו מצפים לקבל לפחות חצי מהקשתות בגרף...

  8. 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

  9. gap-MAXCUT[α/2,α] G אלגוריתם להכרעת gap-MAXCUT[α/2,α]: קבל אמ"ם α ≤ 1 נאותות – אם קבלנו, אז: α/2 ≤ 1/2 ≤ |MAXCUT| שלמות – אם דחינו, אז: |MAXCUT| ≤ 1 < α

  10. צביעת צמתיםVertex Coloring (Chromatic Number) קלט: גרף בלתי מכוון G פלט: צביעה של V עם k מינימליכך שאין צמתים שכנים עם אותו צבע G k=2

  11. קירוב לצביעת צמתיםgap-kCOL בעיית צביעת הצמתים היא NP-קשה, ולכן היינו רוצים לקרב אותה... נתבונן בבעית הפער: gap-kCOL[3,4]

  12. קירוב לצביעת צמתיםgap-kCOL נתבונן בבעית הפער: gap-kCOL[3,4] כל הגרפים: k ≥ 4 k ≤ 3 k = π?

  13. k ≥ 4 k ≤ 3 k = π? קירוב לצביעת צמתיםgap-kCOL מסקנה: gap-kCOL[3,4] = 3COL

  14. k ≥ 4 k ≤ 3 k = π? קירוב לצביעת צמתיםgap-kCOL מסקנה: gap-kCOL[3,4] = 3COL אבל... 3COL היא NP-שלמה

  15. קירוב לצביעת צמתיםgap-kCOL בעיית צביעת הצמתים היא NP-שלמה, ולכן היינו רוצים לקרב אותה, אבל... מסקנה: חישוב (3/4)-קירוב לבעיית צביעת צמתים היא בעיה NP-שלמה (למעשה, גם קירובים הרבה יותר חלשים הם NP-קשים...)

  16. קירוב לצביעת צמתיםgap-kCOL[3,3√|V|] המטרה: לפתור את gap-kCOL[3,3√|V|] בזמן פולינומיאלי.

  17. קירוב לצביעת צמתיםgap-kCOL[3,3√|V|] המטרה: לפתור את gap-kCOL[3,3√|V|] בזמן פולינומיאלי. האמצעי: נראה אלגוריתם לצביעה של גרף 3-צביע בעזרת 3√|V| צבעים. שלמות: אם הגרף 3-צביע, האלגוריתם יצליח לצבוע אותו ב-3√|V| צבעים, ולכן נקבל. נאותות: אם הגרף אינו 3√|V|-צביע, לא נצליח לצבוע אותו ב-3√|V| צבעים, ולכן נדחה. הערה: קיים אלגוריתם הצובע ב-O(|V|0.2111)...

  18. קירוב לצביעת צמתיםgap-kCOL[3,3√|V|] אלגוריתם עזר 1: אם d היא דרגת המקסימום של גרף G נצבע את G ב-d+1 צבעים בזמן פולינומיאלי: נעבור על כל הצמתים ובכל פעם שנגיע לצמת נצבע אותו בצבע ששונה מהשכנים הצבועים שלו. תמיד קיים צבע כזה כי יש d+1 צבעים, ולכל היותר d שכנים.

  19. קירוב לצביעת צמתיםgap-kCOL[3,3√|V|] אלגוריתם עזר 2: עבור צמת v בגרף 3-צביע נצבע את כל השכנים של v ב-2 צבעים בזמן פולינומיאלי: נתבונן בגרף המושרה ע"י קבוצת השכנים של v. זהו גרף 2-צביע (כי אף אחד מהם לא צבוע בצבע של v). בכל רכיב קשירות נבצע BFS מאחד הצמתים u. נצבע את השכבות הזוגיות בכחול, ואת האי-זוגיות בירוק.

  20. קירוב לצביעת צמתיםgap-kCOL[3,3√|V|] בכל רכיב קשירות נבצע BFS מאחד הצמתים u. נצבע את השכבות הזוגיות בכחול, ואת האי-זוגיות בירוק. u u v

  21. קירוב לצביעת צמתיםgap-kCOL[3,3√|V|] אלגוריתם לצביעת גרף 3-צביע G בעזרת 3√|V| צבעים: לולאה: • אם degmax(G)<√|V| צבע את G בעזרת אלג' עזר 1. • אחרת, קיים צמת v המקיים: deg(v)≥√|V|. נצבע את כל שכניו ב-2 צבעים (חדשים) בעזרת אלג' עזר 2 ונסיר אותם מהגרף.

  22. קירוב לצביעת צמתיםgap-kCOL[3,3√|V|] לולאה: • אם degmax(G)<√|V| צבע את G בעזרת אלג' עזר 1. • אחרת, קיים צמת v המקיים: deg(v)≥√|V|. נצבע את כל שכניו ב-2 צבעים (חדשים) בעזרת אלג' עזר 2 ונסיר אותם מהגרף. ניתוח: שלב 1 – מתבצע לכל היותר פעם אחת - √|V| צבעים שלב 2 – מתבצע לכל היותר √|V| פעמים - 2√|V| צבעים סה"כ - 3√|V| צבעים

  23. 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. 13 16 8 21 11 6 3 1

  24. SUBSET-SUM • דוגמא: S = {3,4,8,8,11}, t = 19:

  25. SUBSET-SUM • דוגמא: S = {3,4,8,8,11}, t = 19: Y = {3,8,8}… 3+8+8 = 19

  26. 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:

  27. 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> לא בשפה)

  28. gap-Subset Sum[(1-ε),1] • בעיית ה-Subset Sum היא NP-שלמה...

  29. gap-Subset Sum[(1-ε),1] • בעיית ה-Subset Sum היא NP-שלמה • נרצה למצוא פתרון מקורב...

  30. gap-Subset Sum[(1-ε),1] • בעיית ה-Subset Sum היא NP-שלמה • נרצה למצוא פתרון מקורב • במקום: yYy = t • נדרוש: (1-ε)t ≤yYy ≤ t

  31. 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

  32. 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

  33. 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 אין פתרון...

  34. gap-Subset Sum[(1-ε),1] • במקום: yYy = t • נדרוש: (1-ε)t ≤yYy ≤ t רעיון: במקום להסתכל על כל תתי-הסכומים, נתעלם מתתי סכומים שהם εt/|S|-קרובים...

  35. gap-Subset Sum[(1-ε),1] אתחול: {0}→R לולאה - לכל x ב-S: • x+R union R→R • מיין את R • min(R)→y • לולאה - לכל z ב-R: • אם y+εt/|S| < z ≤ t: z→y אחרת: R\{z} → R החזר את max(R) רעיון: במקום להסתכל על כל תתי-הסכומים, נתעלם מתתי סכומים שהם εt/|S|-קרובים... R – קבוצת תתי סכומים של S לולאה חיצונית – בכל איטרציה נאפשר הוספת משתנה אחד לכל תת-סכום לולאה פנימית – ננפה את תתי-סכומים קרובים מדי כדי לשמור על מספר קטן של אפשרויות

  36. 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 לולאה - לכל x ב-S: • x+R union R→R • מיין את R • min(R)→y • לולאה - לכל z ב-R: • אם y+εt/|S| < z ≤ t: z→y אחרת: R\{z} → R החזר את max(R)

  37. gap-Subset Sum[(1-ε),1] דוגמת הרצה: S = {3,4,8,8,11}, t = 19, ε = 0.3 R = {0} אתחול: {0}→R לולאה - לכל x ב-S: • x+R union R→R • מיין את R • min(R)→y • לולאה - לכל z ב-R: • אם y+εt/|S| < z ≤ t: z→y אחרת: R\{z} → R החזר את max(R)

  38. gap-Subset Sum[(1-ε),1] דוגמת הרצה: S = {3,4,8,8,11}, t = 19, ε = 0.3 R = {0} R = {0,3} אתחול: {0}→R לולאה - לכל x ב-S: • x+R union R→R • מיין את R • min(R)→y • לולאה - לכל z ב-R: • אם y+εt/|S| < z ≤ t: z→y אחרת: R\{z} → R החזר את max(R)

  39. 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 לולאה - לכל x ב-S: • x+R union R→R • מיין את R • min(R)→y • לולאה - לכל z ב-R: • אם y+εt/|S| < z ≤ t: z→y אחרת: R\{z} → R החזר את max(R)

  40. 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 לולאה - לכל x ב-S: • x+R union R→R • מיין את R • min(R)→y • לולאה - לכל z ב-R: • אם y+εt/|S| < z ≤ t: z→y אחרת: R\{z} → R החזר את max(R)

  41. 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 לולאה - לכל x ב-S: • x+R union R→R • מיין את R • min(R)→y • לולאה - לכל z ב-R: • אם y+εt/|S| < z ≤ t: z→y אחרת: R\{z} → R החזר את max(R)

  42. 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 לולאה - לכל x ב-S: • x+R union R→R • מיין את R • min(R)→y • לולאה - לכל z ב-R: • אם y+εt/|S| < z ≤ t: z→y אחרת: R\{z} → R החזר את max(R)

  43. gap-Subset Sum[(1-ε),1] סיבוכיות: אתחול: {0}→R לולאה - לכל x ב-S: • x+R union R→R • מיין את R • min(R)→y • לולאה - לכל z ב-R: • אם y+εt/|S| < z ≤ t: z→y אחרת: R\{z} → R החזר את max(R)

  44. gap-Subset Sum[(1-ε),1] סיבוכיות: מיון של R – O(|R|) (מיזוג...) לולאה פנימית – O(|R|) גודל מקסימלי של R – O(|S|/ε) אתחול: {0}→R לולאה - לכל x ב-S: • x+R union R→R • מיין את R • min(R)→y • לולאה - לכל z ב-R: • אם y+εt/|S| < z ≤ t: z→y אחרת: R\{z} → R החזר את max(R)

  45. gap-Subset Sum[(1-ε),1] סיבוכיות: מיון של R – O(|R|) (מיזוג...) לולאה פנימית – O(|R|) גודל מקסימלי של R – O(|S|/ε) לולאה חיצונית – |S| איטרציות סה"כ – O(|S|2/ε) אתחול: {0}→R לולאה - לכל x ב-S: • x+R union R→R • מיין את R • min(R)→y • לולאה - לכל z ב-R: • אם y+εt/|S| < z ≤ t: z→y אחרת: R\{z} → R החזר את max(R)

  46. gap-Subset Sum[(1-ε),1] נכונות?

  47. gap-Subset Sum[(1-ε),1] שלמות: (אם קיימת קבוצה Y המקיימת yYy = t) נוכיח באינדוקציה...

  48. 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

  49. gap-Subset Sum[(1-ε),1] שלמות: (אם קיימת קבוצה Y המקיימת yYy = t) טענת האינדוקציה – באיטרציה ה-i קיים z ב-R המקיים: yY(i)y-iεt/|S| ≤ z ≤ yY(i)y בסיס – טריוויאלי

  50. 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

More Related