קודקוד לכל השמה מספקת, קשת לכל סתירה

3SAT ≤p IS

3SAT≤pIS\mathrm{3SAT}\le_p\mathrm{IS}, ולכן IS\mathrm{IS} היא NP-שלמה.

הבנייה

על נוסחת 3CNF φ\varphi עם mm פסוקיות:

  1. קודקודים. לכל פסוקית CjC_j נגדיר קודקוד עבור כל השמה חלקית המספקת אותה. פסוקית בת שלושה ליטרלים מעל שלושה משתנים שונים מסופקת על ידי 77 מתוך 88 ההשמות החלקיות, ולכן תורמת 77 קודקודים.
  2. קשתות. נחבר בקשת כל שני קודקודים שההשמות החלקיות שלהם סותרות זו את זו — כלומר קיים משתנה שאחת נותנת לו True\mathrm{True} והשנייה False\mathrm{False}. בפרט כל שני קודקודים של אותה פסוקית מחוברים, שכן שתי השמות מספקות שונות של אותה פסוקית נבדלות בערך של משתנה כלשהו; כלומר קודקודי כל פסוקית יוצרים קליקה.
  3. החזר ⟨G,m⟩\langle G,m\rangle.

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

המחשה

בנייה מודרכת

3SAT → קבוצה בלתי תלויה

שלב 1 מתוך 7
φ =(x ∨ y ∨ z)∧(¬x ∨ y ∨ w)∧(¬y ∨ z ∨ w)
בנייה מ־3SAT לקבוצה בלתי תלויהשלוש פסוקיות הופכות לגאדג׳טים משולשים. קשתות רציפות מחברות ליטרלים באותה פסוקית, קשתות מקווקוות מחברות ליטרלים משלימים, ובשלב האחרון נבחרים x, y ו־z כקבוצה בלתי תלויה בגודל שלוש.C1x ∨ y ∨ zפסוקית מקורC2¬x ∨ y ∨ wפסוקית מקורC3¬y ∨ z ∨ wפסוקית מקור
קשת באותה פסוקיתסתירה בין משלימים

נכונות — שני הכיוונים

3SAT ∈ ⟹ IS ∈

נניח φ∈3SAT\varphi\in\mathrm{3SAT}, ותהי vv השמה מספקת. לכל פסוקית CjC_j, הצמצום של vv למשתני CjC_j הוא השמה חלקית המספקת את CjC_j, ולכן קיים בגרף קודקוד uju_j המתאים לה. נגדיר U={u1,…,um}U=\{u_1,\dots,u_m\}.

∣U∣=m|U|=m: הקודקודים שייכים לפסוקיות שונות ולכן הם עצמים שונים.

UU בלתי תלויה: יהיו uj,uj′∈Uu_j,u_{j'}\in U שונים. שתי ההשמות החלקיות הן צמצומים של אותה השמה vv, ולכן לכל משתנה המופיע בשתיהן הן נותנות את אותו ערך — הן אינן סותרות. לפי הבנייה קשת קיימת רק בין השמות סותרות, ולכן ujuj′∉Eu_ju_{j'}\notin E.

לכן ⟨G,m⟩∈IS\langle G,m\rangle\in\mathrm{IS}.

IS ∈ ⟹ 3SAT ∈

נניח ⟨G,m⟩∈IS\langle G,m\rangle\in\mathrm{IS}, ותהי UU קבוצה בלתי תלויה בגודל mm.

צעד 1 — בדיוק קודקוד אחד לכל פסוקית. קודקודי כל פסוקית יוצרים קליקה, ולכן UU מכילה לכל היותר קודקוד אחד מכל פסוקית. יש mm פסוקיות ו-∣U∣=m|U|=m, ולכן UU מכילה בדיוק אחד מכל פסוקית. נסמן אותו uju_j, ואת ההשמה החלקית שלו σj\sigma_j.

צעד 2 — ההשמות עקביות. לכל j≠j′j\ne j' הקודקודים uj,uj′u_j,u_{j'} אינם מחוברים (כי UU בלתי תלויה), ולכן לפי הבנייה σj\sigma_j ו-σj′\sigma_{j'} אינן סותרות: כל משתנה המופיע בשתיהן מקבל בהן אותו ערך.

צעד 3 — הרכבת ההשמה. נגדיר השמה מלאה vv: אם משתנה xx מופיע באיזשהו σj\sigma_j, נקבע v(x)=σj(x)v(x)=\sigma_j(x) — לפי צעד 2 ההגדרה אינה תלויה בבחירת jj ולכן מוגדרת היטב; אם xx אינו מופיע באף σj\sigma_j, נקבע v(x)=0v(x)=0 שרירותית.

צעד 4 — vv מספקת. תהי CjC_j פסוקית. ההשמה σj\sigma_j מספקת אותה לפי הבנייה, ו-vv מסכימה עם σj\sigma_j על כל משתני CjC_j, ולכן vv מספקת את CjC_j. מכיוון ש-jj שרירותי, vv מספקת את φ\varphi, כלומר φ∈3SAT\varphi\in\mathrm{3SAT}.

סיבוכיות הרדוקציה

זמןO(|φ|²)
מקוםO(|φ|²)
גודל הפלטO(m²) vertices-pairs, O(m) vertices

לכל פסוקית לכל היותר 23−1=72^3-1=7 קודקודים — קבוע, מפני שהפסוקית היא 3CNF. לכן ∣V∣≤7m=O(∣φ∣)|V|\le 7m=O(|\varphi|). הקשתות נקבעות בבדיקת כל זוג קודקודים, כלומר O(∣V∣2)=O(∣φ∣2)O(|V|^2)=O(|\varphi|^2) בדיקות, וכל בדיקה עולה זמן קבוע (השוואת שלוש הצבות לכל היותר). לכן זמן ריצה O(∣φ∣2)O(|\varphi|^2).

הנקודה הקריטית: החסם 77 לקודקודים לפסוקית תקף רק מפני שאורך הפסוקית חסום. לנוסחת CNF כללית מספר ההשמות המספקות פסוקית באורך kk הוא 2k−12^k-1 — מעריכי, והבנייה לא הייתה פולינומית. זו הסיבה שמתחילים מ-3SAT\mathrm{3SAT} ולא מ-SAT\mathrm{SAT}.

מה זה קונה

IS\mathrm{IS} היא NP-שלמה, ומכאן — דרך IS≤pCLIQUE\mathrm{IS}\le_p\mathrm{CLIQUE} ו-IS≤pVC\mathrm{IS}\le_p\mathrm{VC} — גם CLIQUE\mathrm{CLIQUE} ו-VC\mathrm{VC}.

מלכודות

  • הסף המוחזר הוא mm — מספר הפסוקיות, לא מספר המשתנים ולא מספר הקודקודים. הסף הזה הוא שכופה "אחד מכל פסוקית", ובלעדיו צעד 1 של הכיוון השני קורס.

  • הקשתות בתוך פסוקית אינן "תוספת" — הן נובעות מאותו כלל בדיוק (השמות סותרות), שכן שתי השמות מספקות שונות של אותה פסוקית חייבות להיבדל במשתנה כלשהו. אפשר לנסח את הבנייה בכלל אחד ולא בשניים.

השרשרת

נשענת על

משמשת בהמשך ל

מאיפה זה נקרא

  • תרגיל מודרךsat-to-independent-set
  • 2024 '1 מועד 1ספירת הקשתות בפלט הרדוקציה על (x1∨x2∨x3)∧(x1∨x4)(x_1\vee x_2\vee x_3)\wedge(x_1\vee x_4).
  • 2024 '1 מועד 2אותה בנייה, ספירה על נוסחה אחרת.
  • 2025"הוכיחו את נכונות הבנייה ונתחו את זמן הריצה. האם זמן הריצה פולינומי?"
  • הבנייה הזאת אינה מופיעה בשיעורי 2026ב׳ — שם IS\mathrm{IS} מוצגת בשיעור 7 והקושי שלה מגיע בהמשך דרך מסלול אחר. היא מתועדת כאן לפי הניסוח שהבחינות עצמן נותנות לה (2024 ו-2025 מתארות אותה במפורש כ"הרדוקציה שראינו"), ולכן היא ממופה למקורות הבחינה ולתרגיל המודרך ולא לשיעור.