יחידה 6

בעיות שלמות קנוניות

SAT, בעיות גרפים, Subset Sum ותבניות חוזרות ברדוקציות NP-שלמות.

מטרות

  • לנווט ברשת הרדוקציות הקנונית ולא לשנן שמות מבודדים.
  • להתאים בחירה לוגית, תאימות גרפית, מסלולים, חיתוכים וצבעים לגאדג׳ט מתאים.
  • להפריד בין גרסת הכרעה לגרסת אופטימיזציה.
  • לנתח קידוד בינרי ולהבחין בין זמן פולינומיאלי לזמן פסאודו־פולינומיאלי.

1. מפת הבעיות

Cook–Levin מתחיל את הרשת:

SAT⟶3SAT.\mathrm{SAT}\longrightarrow\mathrm{3SAT}.

מ-3SAT עוברים באמצעות גאדג׳טי פסוקיות ועקביות ל-Independent Set ול-CLIQUE. משלים גרף ומשלים קבוצת קודקודים מחברים בין CLIQUE, IS ו-Vertex Cover. ענפים אחרים מובילים לצביעה, Max-Cut, משפחת המילטון, Subset Sum, Partition ו-Bin Packing. Hamiltonian Cycle מובילה באופן טבעי לגרסת ההכרעה של TSP.

בנייה מודרכת

מפת רדוקציות קנונית

שלב 1 מתוך 6
רשת קנונית של רדוקציות בין בעיות NP-שלמותSAT עוברת ל־3SAT, ומשם הרשת מתפצלת לגרפי תאימות, בעיות מסלולים, בעיות חתך וצביעה וקידודים אריתמטיים. כל קשת מציינת את ההמרה הקונקרטית שלה.צייטין + פיצול פסוקיותSAT3SAT
לוגיקה / תאימות
הענף המוצג: מקור לוגי1 המרות מתויגות

כל חץ הוא משפט הדורש העתקה, הוכחת אם־ורק־אם וחסם פולינומיאלי; דמיון בין בעיות אינו מספיק.

2. SAT ו-3SAT

SAT שואלת אם לנוסחה בוליאנית יש השמה מספקת. 3SAT מגבילה ל-CNF עם שלושה ליטרלים בכל פסוקית, או לכל היותר שלושה לפי המוסכמה. השמה היא תעודת NP.

פתיחת סוגריים ישירה עלולה ליצור CNF מעריכי. הבנייה הפולינומיאלית מוסיפה משתנה לכל תת־נוסחה וכופה בפסוקיות את ערכה. פסוקית ארוכה מפצלים בעזרת משתני עזר. למשל

(a∨b∨c∨d∨e)(a\lor b\lor c\lor d\lor e)

מוחלפת ב-

(a∨b∨y1)∧(¬y1∨c∨y2)∧(¬y2∨d∨e).(a\lor b\lor y_1)\land (\neg y_1\lor c\lor y_2)\land (\neg y_2\lor d\lor e).

נדרשת שוות־סיפוקיות, לא שקילות לוגית על קבוצת המשתנים המוגדלת: השמה מספקת למקור ניתנת להרחבה, וכל השמה מספקת לחדש מעידה שלפחות ליטרל מקורי אחד אמיתי.

3. IS, CLIQUE ו-Vertex Cover

בגרף G=(V,E)G=(V,E):

  • IS מבקשת לפחות kk קודקודים בלתי־שכנים בזוגות.
  • CLIQUE מבקשת לפחות kk קודקודים שכנים בזוגות.
  • VC מבקשת לכל היותר kk קודקודים הנוגעים בכל צלע.

כולן ב-NP באמצעות רשימת קודקודים ובדיקה ישירה.

משלים גרף

ממפים (G,k)(G,k) אל (G‾,k)(\overline G,k), כאשר לקודקודים שונים

{u,v}∈E(G‾)  ⟺  {u,v}∉E(G).\{u,v\}\in E(\overline G)\iff\{u,v\}\notin E(G).

לכן

S קליקה ב-G  ⟺  S בלתי־תלויה ב-G‾.S\text{ קליקה ב-}G \iff S\text{ בלתי־תלויה ב-}\overline G.

בניית המשלים דורשת O(∣V∣2)O(|V|^2) זמן. אין מוסיפים לולאות עצמיות.

קבוצה בלתי־תלויה וכיסוי

מתקיימת הזהות

S בלתי־תלויה  ⟺  V∖S כיסוי קודקודים.S\text{ בלתי־תלויה} \iff V\setminus S\text{ כיסוי קודקודים}.

אם צלע הייתה כולה בתוך SS, הקבוצה לא הייתה בלתי־תלויה. ולהפך, אם המשלים מכסה כל צלע, אין צלע ששני קצותיה ב-SS. לכן

(G,k)∈IS  ⟺  (G,∣V∣−k)∈VC.(G,k)\in\mathrm{IS}\iff(G,|V|-k)\in\mathrm{VC}.

במסלול 1−2−3−41-2-3-4, הקבוצה {1,3}\{1,3\} בלתי־תלויה, ולכן {2,4}\{2,4\} כיסוי. בגרף המשלים {1,3}\{1,3\} קליקה. הפרמטר משתנה ברדוקציה ל-VC אך לא ברדוקציה ל-CLIQUE.

4. צביעה

kk-COLOR שואלת אם אפשר לצבוע קודקודים ב-kk צבעים כך ששכנים יקבלו צבעים שונים. וקטור צבעים הוא תעודה. עבור k=2k=2 בודקים דו־צדדיות ב-BFS; לכל k≥3k\ge3 קבוע הבעיה NP-שלמה.

ברדוקציה מ-3SAT ל-3-COLOR מקובל ליצור משולש צבעי ייחוס True, False, Base. גאדג׳ט משתנה כופה בחירה בין True ל-False, וגאדג׳ט פסוקית ניתן לצביעה בדיוק כאשר לפחות ליטרל אחד אמיתי. ציור אינטואיטיבי אינו הוכחה: יש להראות שכל השמה מספקת מתרחבת לצביעה ושכל צביעה חוקית מפענחת השמה מספקת. יש להבדיל בין 3-COLOR לבין COLORING שבה kk חלק מן הקלט.

5. Max-Cut

גרסת ההכרעה מקבלת (G,K)(G,K) ושואלת אם קיימת חלוקה (S,V∖S)(S,V\setminus S) שלפחות KK צלעות חוצות אותה. הגרסה האופטימלית מבקשת את המקסימום; טענת NP-שלמות מתייחסת לשפת ההכרעה.

החלוקה היא תעודה. במשולש כל חיתוך מכיל לכל היותר שתי צלעות, והחלוקה של קודקוד אחד מול שניים משיגה שתיים. לכן (K3,2)(K_3,2) הוא כן ו-(K3,3)(K_3,3) הוא לא.

גאדג׳טים משתמשים בצלע כחיזוק לכך ששני ערכים נמצאים בצדדים הפוכים. במשקלים בינריים יש לנתח את אורכם. החלפת צלע במשקל WW ב-WW עותקים היא פולינומיאלית רק אם WW חסום פולינומיאלית בגודל הקלט.

6. משפחת המילטון ו-TSP

Hamiltonian Path מבקשת מסלול פשוט המבקר בכל קודקוד בדיוק פעם אחת; Hamiltonian Cycle דורשת גם חזרה להתחלה. התעודה היא סדר קודקודים, ובודקים שונות, כיסוי וצלעות עוקבות.

רדוקציות משתמשות במסילות משתנה הניתנות למעבר בשני כיוונים, כמייצגות אמת ושקר, ובמעקפי פסוקית הנגישים רק ממסילה של ליטרל מספק. יש לציין אם הגרף מכוון או לא־מכוון; הגאדג׳טים אינם מתחלפים אוטומטית.

ממעגל המילטוני ל-TSP

בהינתן G=(V,E)G=(V,E), בונים גרף מלא על VV עם

w(u,v)={1,{u,v}∈E,2,{u,v}∉E.w(u,v)= \begin{cases} 1,&\{u,v\}\in E,\\ 2,&\{u,v\}\notin E. \end{cases}

ומציבים תקציב B=∣V∣B=|V|. מעגל המילטוני ב-GG נותן סיור במשקל ∣V∣|V|. בכיוון ההפוך, בכל סיור יש בדיוק ∣V∣|V| צלעות וכל אחת במשקל לפחות 1. לכן סיור במשקל לכל היותר ∣V∣|V| משתמש רק בצלעות משקל 1, ומפענח מעגל המילטוני ב-GG.

הבנייה בגודל O(∣V∣2)O(|V|^2) והמשקלים קטנים. שפת TSP כאן היא: ״האם קיים סיור במשקל לכל היותר BB?״, ולא בעיית האופטימיזציה.

7. Subset Sum וקידוד מספרי

הקלט הוא מספרים בינריים אי־שליליים a1,…,am,Ta_1,\ldots,a_m,T, והשאלה היא האם

∃I⊆{1,…,m},∑i∈Iai=T.\exists I\subseteq\{1,\ldots,m\},\quad\sum_{i\in I}a_i=T.

וקטור בחירה הוא תעודה וחיבור בינרי פולינומיאלי באורך הקלט.

בנייה מודרכת

3SAT → Subset Sum

שלב 1 מתוך 6
φ = (x₁ ∨ ¬x₂) ∧ (¬x₁ ∨ x₂)
מספר
x₁
x₂
C₁
C₂

המופע {3,5,6,11}\{3,5,6,11\} עם יעד 14 הוא כן כי 3+5+6=143+5+6=14.

קידוד ללא נשיאות

ברדוקציה מ-3SAT מקצים עמודות ספרות למשתנים ולפסוקיות. מספרי בחירת xix_i או ¬xi\neg x_i מסמנים עמודת משתנה ואת הפסוקיות שבהן הליטרל מופיע; מספרי השלמה ממלאים עמודות פסוקית. היעד כופה בחירה אחת לכל משתנה ותרומה מספקת לכל פסוקית.

בוחרים בסיס גדול מן הסכום המרבי בעמודה. אז אין נשיאות וכל עמודה נאכפת בנפרד. אם יש rr עמודות ובסיס קבוע BB, אורך המספר הוא

log⁡(Br)=rlog⁡B,\log(B^r)=r\log B,

ולכן פולינומיאלי.

זמן פסאודו־פולינומיאלי

טבלת תכנות דינמי בגודל O(mT)O(mT) אינה בהכרח פולינומיאלית בקלט בינרי: TT עשוי להיות מעריכי ב-log⁡T\log T. היא פסאודו־פולינומיאלית. בקידוד אונרי או בערכים חסומים פולינומיאלית המסקנה שונה.

8. Partition ו-Bin Packing

PARTITION שואלת אם אפשר לחלק מספרים לשתי קבוצות בעלות סכום שווה. אם הסכום הכולל SS אי־זוגי התשובה לא; אחרת מחפשים תת־קבוצה בסכום S/2S/2. זה מסביר את הקשר ל-Subset Sum, אך רדוקציית קושי ממופע Subset Sum כללי דורשת רכיב איזון; הקשר המבני לבדו אינו חץ קושי מלא.

רדוקציה מלאה מ-Subset Sum ל-Partition

יהי a1,…,am,Ta_1,\ldots,a_m,T מופע Subset Sum ונסמן S=∑iaiS=\sum_i a_i. בקלט פגום או במקרה T>ST>S מחזירים מופע לא קבוע. אחרת מוסיפים שני מספרים:

x=2S−T,y=S+T.x=2S-T,\qquad y=S+T.

הסכום הכולל החדש הוא

S+x+y=4S,S+x+y=4S,

ולכן כל צד בחלוקה צריך להסתכם ל-2S2S. אם קיימת תת־קבוצה מקורית בסכום TT, מצרפים אליה את xx ומקבלים 2S2S. שאר המספרים יחד עם yy נמצאים בצד השני.

בכיוון ההפוך, המספרים המקוריים לבדם מסתכמים רק ל-SS, ולכן אינם יכולים ליצור צד בסכום 2S2S. גם x+y=3Sx+y=3S, ולכן x,yx,y אינם יכולים להיות יחד באותו צד. מכאן שבכל צד נמצא בדיוק אחד מהם. אם צד מכיל xx, המספרים המקוריים שבו מסתכמים ל-TT. אם הוא מכיל yy, הם מסתכמים ל-S−TS-T, ולכן המספרים המקוריים בצד המשלים מסתכמים ל-TT. זו הוכחת אם־ורק־אם מלאה.

הערכים החדשים לכל היותר 3S3S. אורכם הבינרי O(log⁡S)O(\log S), ו-log⁡S\log S חסום באורך הכולל של הקלט ועוד O(log⁡m)O(\log m). חישוב הסכום והדפסת שני המספרים פולינומיאליים.

BIN PACKING מקבלת גדלי פריטים, קיבולת CC ומספר תאים bb, ושואלת אם ניתן לשבץ את כולם לכל היותר ב-bb תאים. התעודה משייכת פריט לתא. Partition היא מבנה מיוחד של שני תאים כאשר הסכום 2C2C. תוצאות קושי חזקות משתמשות לעיתים ב-3-PARTITION, שבה חסמי הגדלים כופים בדיוק שלושה פריטים לתא.

לדוגמה, 6,4,5,56,4,5,5 נכנסים לשני תאים בקיבולת 10 כ-(6,4)(6,4) ו-(5,5)(5,5). עבור 6,6,4,4,16,6,4,4,1 הסכום 21 גדול מהקיבולת הכוללת 20, ולכן המופע לא.

עבור מופע Subset Sum {3,5,6}\{3,5,6\} עם T=8T=8, מתקבל S=14S=14, ולכן מוסיפים x=20,y=22x=20,y=22. סכום מופע Partition הוא 56 וכל צד צריך 28. בצד אחד נמצאים {3,5,20}\{3,5,20\} ובשני {6,22}\{6,22\}.

בינרי לעומת אונרי וקושי חזק

כאשר מספר MM כתוב בינרית, אורכו Θ(log⁡M)\Theta(\log M); בקידוד אונרי אורכו Θ(M)\Theta(M). לכן אלגוריתם O(mT)O(mT) הוא מעריכי אפשרי בקלט בינרי אך פולינומיאלי בקלט אונרי. בעיה מספרית נקראת NP-קשה בחוזקה כאשר הקושי נשאר גם כשהערכים חסומים פולינומיאלית, ולכן אלגוריתם פסאודו־פולינומיאלי לבעיה כזו היה גורר תוצאה חזקה יותר. 3-PARTITION משמשת מקור קנוני לקושי חזק של בעיות אריזה ותזמון.

גם תעודת Bin Packing חייבת להימדד בקידוד. די לרשום לכל אחד מ-mm הפריטים מספר תא בן O(log⁡b)O(\log b) ביטים ולחבר גדלים בינריים. אין צורך לייצר מערך פיזי בגודל הקיבולת CC.

9. גאדג׳טים קטנים לחיתוך ולצביעה

ב-Max-Cut, המסלול u−a−vu-a-v הוא מיקרו־גאדג׳ט שימושי. אם u,vu,v באותו צד, מציבים את aa בצד השני ושתי הצלעות נחתכות. אם u,vu,v בצדדים שונים, לכל היותר צלע אחת נחתכת. לכן המסלול מתגמל שוויון בין קצותיו בשתי צלעות לעומת אחת. צלע ישירה uvuv מתגמלת דווקא אי־שוויון. שילוב משוקלל או שכפול פולינומיאלי של שני האפקטים יכול לבטא אילוץ בוליאני, בתנאי שסף החיתוך אינו משאיר מרווח להפרת גאדג׳ט.

בצביעה, משולש כופה שלושה צבעים שונים. לאחר שמכנים אותם T,F,BT,F,B, מחברים קודקוד משתנה אל BB, ולכן הוא יכול לקבל רק TT או FF. קודקוד נוסף עבור שלילת המשתנה מחובר כך ששניהם חייבים לקבל צבעי אמת הפוכים. גאדג׳ט פסוקית מלא חייב להיכשל רק כאשר שלושת הליטרלים שקריים ולהיות ניתן לצביעה בכל אחת משבע האפשרויות האחרות.

בדיקת שבעת המקרים, או הוכחת אינווריאנט מבני המכסה אותם, היא המקבילה בצביעה להוכחת אם־ורק־אם. דוגמאות קטנות אלה מסבירות את התבנית אך אינן מחליפות רדוקציה מלאה: יש לנתח כל קודקוד עזר וכל צביעה או חיתוך בלתי־מכוונים.

10. רדוקציות הגרף כרשת אחת

לאחר 3SAT→IS, שתי העתקות קצרות נותנות בעיות נוספות:

(G,k)↦(G‾,k)(G,k)\mapsto(\overline G,k)

מעבירה IS ל-CLIQUE, משום שאי־צלעות ב-GG הן צלעות במשלים. אחר כך

(G,k)↦(G,∣V∣−k)(G,k)\mapsto(G,|V|-k)

מעבירה IS ל-VC. בכל אחת קיימת גם רדוקציה הפוכה מאותו סוג, ולכן שלוש הבעיות שקולות פולינומיאלית. עם זאת, ״שקולות״ אינו אומר שהמופעים זהים: הראשונה משנה את קבוצת הצלעות והשנייה משנה את הפרמטר ואת פירוש קבוצת הפתרון.

11. בחירת בעיית מקור

  • בחירה בוליאנית ועקביות: 3SAT.
  • תאימות או סתירה זוגית: CLIQUE/IS.
  • בחירה עם סכום מדויק: Subset Sum.
  • מסלול גלובלי מחזורי: Hamiltonian Cycle.
  • חלוקה לפי אי־הסכמה: Max-Cut.
  • קבוצות תחת קיבולת: 3-Partition או Bin Packing.

התאמה מבנית עוזרת לנסח אינווריאנט, אך אינה מחליפה הוכחה.

טעויות נפוצות

  1. לעבור בשקט בין הכרעה לאופטימיזציה.
  2. להשמיט פרמטר מן המופע.
  3. למדוד זמן ב-TT במקום ב-log⁡T\log T.
  4. להניח שהמרת CNF נאיבית תמיד פולינומיאלית.
  5. להוכיח רק כיוון אינטואיטיבי של גאדג׳ט.
  6. לערבב גרף משלים עם קבוצת קודקודים משלימה.
  7. להשתמש בגאדג׳ט מכוון ליעד לא־מכוון.

תרגילים

תרגיל 1 — פרמטר IS→VC

הוכיחו את השקילות: לגרף G=(V,E)G=(V,E) יש קבוצה בלתי־תלויה בגודל ≥k\ge k אמ״ם יש כיסוי קודקודים בגודל ≤∣V∣−k\le |V|-k.

פתרון

אם SS בלתי־תלויה, אז V∖SV\setminus S כיסוי: כל צלע נוגעת מחוץ ל-SS. אם CC כיסוי, V∖CV\setminus C בלתי־תלויה. הגדלים משלים ל-∣V∣|V|. הפרמטר ברדוקציה הוא ∣V∣−k|V|-k.

תרגיל 2 — תקציב TSP ממשקל יחידה

ברדוקציה ממעגל המילטוני ל-TSP עם משקלי 11 על צלעות הגרף ומשקל גדול על הלא־צלעות, מדוע תקציב ∣V∣|V| נכון?

פתרון

סיור כולל ∣V∣|V| צלעות. אם כל צלעות הסיור הן צלעות מקוריות במשקל 1, העלות בדיוק ∣V∣|V|. אם חסרה צלע, נעשה שימוש במשקל הגדול והעלות >∣V∣>|V|. לכן תקציב ∣V∣|V| שקול לקיום מעגל המילטוני.

תרגיל 3 — בסיס גדול ב-Subset Sum

הסבירו מדוע קידוד עם בסיס גדול (למשל 44) נחוץ ברדוקציה מ-3SAT ל-Subset Sum.

פתרון

הבסיס הגדול מונע נשיאות בין עמודות, כך שכל אילוץ (הופעות ליטרל/פסוקית) מפורד ספרתית. בבסיס קטן נשיאות עלולה לאפשר סכומים ״מזויפים״ שאינם מתאימים להשמה חוקית.

תרגיל 4 — O(mT)O(mT) וקידוד בינרי

הוכיחו כי אלגוריתם זמן O(mT)O(mT) ל-Subset Sum אינו בהכרח פולינומיאלי כאשר TT מקודד בינרית.

פתרון

אורך הקלט n=Θ(mlog⁡T)n=\Theta(m\log T) בקירוב. אם T=2Θ(n)T=2^{\Theta(n)}, אז O(mT)O(mT) מעריכי ב-nn. זהו פסאודו־פולינומיאלי: פולינום בערך TT, לא באורך הקידוד.

תרגיל 5 — אחרי קושי: שייכות ל-NP

סטודנט מוכיח ש-AA NP-קשה אך שוכח שייכות ל-NP\mathrm{NP}. מה חסר לשלמות? תנו דוגמה מדוע 2-COLOR אינו יעד NP-שלם אלא אם P=NP\mathrm P=\mathrm{NP}.

פתרון

חסרה A∈NPA\in\mathrm{NP}. 2-COLOR ב-P\mathrm P (דו־צדדיות). אם היא NP-שלמה אז P=NP\mathrm P=\mathrm{NP}. לכן אינה יעד תקין להוכחת NP-שלמות בלי לקרוס את המחלקות.

סיכום

בעיות קנוניות מתחברות ברשת רדוקציות. פרמטרים, משקלים וקידודים מספריים הם מקום נפוץ לטעויות פורמליות.

תרגול מודרך

משימה 1 — CLIQUE↔IS

הוכיחו שקילות פולינומיאלית בין CLIQUE ב-GG ל-IS ב-G‾\overline G (או להפך) עם אותו kk.

פתרון

קבוצת קודקודים היא קליקה ב-GG אמ״ם היא בלתי־תלויה ב-G‾\overline G. הרדוקציה בונה את המשלים בזמן פולינומיאלי ושומרת את kk.

משימה 2 — בחירת בעיית מקור

מתי עדיף להתחיל רדוקציה מ-3SAT ומתי מ-Vertex Cover? תנו קריטריון קצר.

פתרון

מ-3SAT כשמבנים גאדג׳טים לוגיים/מספריים; מ-VC/IS/CLIQUE כשהיעד גרפי עם מבנה דומה. בוחרים מקור שכבר שלם ושגאדג׳ט שלו מתרגם ישירות לאילוצי היעד.

משימה 3 — מלכודת קידוד בצביעה

הסבירו מדוע רדוקציה ל-kk-COLOR חייבת לטפל בגרפים לא־פשוטים או בפרמטר kk כחלק מהקלט לפי הגדרת השפה בקורס.

פתרון

השפה חייבת להיות מוגדרת במדויק (האם kk קבוע או בקלט). קידוד פגום, לולאות עצמיות או פרמטר חסר משנים את השפה. הוכחת שלמות דורשת התאמה להגדרה שנבחרה ולשייכות ל-NP\mathrm{NP}.

מקורות

עדויות הקורס

  • תמליל 14 של סמסטר א׳ הנוכחי: גאדג׳טי גרפים והחומר על Hamiltonian/TSP המשמש כאן.
  • תמליל 15: החומר על בעיות מספריות, ובכלל זה Subset Sum, Partition וזהירות בקידודים.
  • הסיכום הממוזג, עמ׳ 55–57, 64–66 ו-72–75: משפחת בעיות הגרף והרדוקציות ביניהן בלבד, לרבות החומר הרלוונטי על קבוצה בלתי־תלויה, קליקה, כיסוי, צביעה וחיתוך.
  • פרקי Hamiltonian/TSP ו-Subset-Sum/Partition/Bin-Packing הם סינתזה של תמלילים וספרי לימוד. הם אינם מיוחסים לסיכום הממוזג.

אימות מספרי לימוד

  • Sipser, מהדורה שלישית, §7.5, עמ׳ 315–325.
  • Papadimitriou, פרק 9.
  • Garey–Johnson, פרק 3 וקטלוג הבעיות. המקורות מאמתים את הניסוחים והקידודים; הדוגמאות וסדר ההצגה עוקבים אחר הקורס.