10Vertex Cover, Max-Cut and Graph Colouring

מרחיבים את אוסף הבעיות ה-NP-קשות בעזרת שלוש רדוקציות: IS ≤p VC, 3NAE ≤p MAXCUT ו-3NAE ≤p 3COL, מוכיחים ש-2COL ∈ P, ולומדים איך נראית הוכחת נכונות מלאה של רדוקציה בשני הכיוונים.

confidence: medium1 recording(s)8 summary pagesnp-hardnessreductionsvertex-covermax-cutgraph-coloringnae-sat

Builds on: lesson 6, lesson 7, lesson 8, lesson 9

The handwritten summary pages

Open page 1 full size

סיבוכיות שיעור 10 VC MAXCUT צביעה בגרפים.pdf

Page 1 of 8 of the handwritten summary

בקצרה

  • מרחיבים את "אוצר" הבעיות ה-NP-קשות: בשיעור שעבר היו לנו SAT\mathrm{SAT}, 3SAT\mathrm{3SAT}, IS\mathrm{IS} ו-CLIQUE\mathrm{CLIQUE}; כאן מצטרפות VC\mathrm{VC}, MAXCUT\mathrm{MAXCUT}, 3COL\mathrm{3COL} ו-kCOL\mathrm{kCOL}.
  • הבחנה מרכזית: U⊆VU \subseteq V היא כיסוי בקודקודים של GG אם ורק אם V∖UV \setminus U היא קבוצה בלתי תלויה. מההבחנה הזו נובעת רדוקציה כמעט־זהותית IS≤pVC\mathrm{IS} \le_p \mathrm{VC} שמשנה רק את המספר: ⟨G,k⟩↦⟨G,∣V∣−k⟩\langle G,k\rangle \mapsto \langle G,|V|-k\rangle.
  • מגדירים סיפוק במובן NAE (Not All Equal) ואת הבעיה kNAEk\mathrm{NAE}, ומקבלים (דרך רדוקציות שניתנו כתרגיל בית) ש-3NAE\mathrm{3NAE} היא NP-קשה. משם ממשיכים.
  • 3NAE≤pMAXCUT\mathrm{3NAE} \le_p \mathrm{MAXCUT}: קודקוד לכל ליטרל, קשת "כחולה" בין ליטרל לשלילתו, משולש "אדום" לכל פסוקית, ויעד n+2mn+2m. הקסם הוא שמשולש תורם לחתך בדיוק 22 או בדיוק 00 קשתות, ולכן חסם עליון על הקשתות האדומות כופה שכל הקשתות הכחולות בחתך.
  • 3NAE≤p3COL\mathrm{3NAE} \le_p \mathrm{3COL}: קודקוד לכל ליטרל, קודקוד מיוחד NN המחובר לכולם, ומשולש לכל פסוקית שקודקודיו מחוברים לליטרלים המתאימים. הצבע של NN "שורף" צבע אחד ומשאיר שני צבעים שמתפקדים כאמת/שקר.
  • 3COL≤p4COL\mathrm{3COL} \le_p \mathrm{4COL} אינה מוכחת כאן אלא בשיעור 11 (משפט 2 שם, לפי עמודים 2–3 בסיכום ההוא); בקובץ הזה נשארת הפניה בלבד. מהמפגש ההוא נשמרה כאן רק הטעות העקרונית שהמרצה הקדיש לה זמן רב: רדוקציה אינה רואה את הצביעה.
  • לצד הקשיות: 2COL∈P\mathrm{2COL} \in \mathrm{P} (שקול לדו-צדדיות), וכן — אם kk הוא חלק מה-DNA של הבעיה ולא חלק מהקלט, בעיות מסוימות קורסות ל-P\mathrm{P} (למשל IS\mathrm{IS} עם kk קבוע).
  • כל רדוקציה כאן מוכחת בשני הכיוונים ובניתוח זמן ריצה מפורש. זהו הפורמט המדויק שנדרש במבחן.

רקע ותלויות

מה חייבים לדעת לפני השיעור.

משיעור 6 נדרשת ההגדרה של רדוקציית זמן פולינומי. נזכיר אותה במלואה, כי כל השיעור נשען עליה: לשפות A,B⊆Σ∗A,B \subseteq \Sigma^* נאמר ש-A≤pBA \le_p B אם קיימת פונקציה f:Σ∗→Σ∗f:\Sigma^* \to \Sigma^* הניתנת לחישוב בזמן פולינומי (כלומר קיימת מכונת טיורינג M=(Q,qstart,F,Σ,Γ,δ)M=(Q,q_{start},F,\Sigma,\Gamma,\delta) המחשבת אותה, כך ש-timeM(x)≤p(∣x∣)\mathrm{time}_M(x) \le p(|x|) עבור פולינום pp), המקיימת ∀x∈Σ∗:x∈A  ⟺  f(x)∈B.\forall x \in \Sigma^*:\quad x \in A \iff f(x) \in B .

הערה על כיוון: A≤pBA \le_p B נקרא "AA ניתנת לרדוקציה ל-BB", ומשמעותו ש-BB היא הבעיה הקשה לפחות כמו AA. כלומר החץ מצביע מהבעיה הידועה-כקשה אל הבעיה שאנחנו רוצים להוכיח שהיא קשה. בהקלטות אוטומטיות הכיוון הזה מתהפך כל הזמן; בכל רדוקציה בקובץ הזה נאמר את הכיוון גם במילים.

משיעור 7 נדרשים: ההגדרה IS={⟨G,k⟩∣G\mathrm{IS} = \{\langle G,k\rangle \mid G גרף, k∈Nk\in\mathbb{N}, וקיימת ב-GG קבוצה בלתי תלויה בגודל לפחות k}k\}, כאשר U⊆VU \subseteq V נקראת בלתי תלויה אם לכל x,y∈Ux,y \in U מתקיים xy∉Exy \notin E; וכן הרדוקציה IS≤pCLIQUE\mathrm{IS} \le_p \mathrm{CLIQUE} (מעבר לגרף המשלים).

משיעור 8–9 נדרש משפט קוק–לוין: SAT\mathrm{SAT} היא NP-קשה, ובעקבותיו שרשרת התזכורת שנפתח בה השיעור (עמוד 1 בסיכום):

SAT is NP-hard  ⟹  SAT≤p3SAT  ⟹  3SAT≤pIS  ⟹  IS≤pCLIQUE.\mathrm{SAT} \text{ is NP-hard} \;\Longrightarrow\; \mathrm{SAT} \le_p \mathrm{3SAT} \;\Longrightarrow\; \mathrm{3SAT} \le_p \mathrm{IS} \;\Longrightarrow\; \mathrm{IS} \le_p \mathrm{CLIQUE}.

הראשונה נראתה בכיתה, השנייה ניתנה כתרגיל בית (המרצה נתן את הרדוקציה ודרש רק את הוכחת הנכונות), השלישית הוכחה בשיעור. בסיכום נרשמה השורה השלישית כ-SAT≤pIS\mathrm{SAT}\le_p \mathrm{IS}; שתי הגרסאות נכונות, שכן ≤p\le_p טרנזיטיבית.

התזכורת הטכנית שנשתמש בה שוב ושוב: אם AA היא NP-קשה ו-A≤pBA \le_p B אז BB היא NP-קשה. ההוכחה היא בדיוק טרנזיטיביות: לכל C∈NPC \in \mathrm{NP} מתקיים C≤pA≤pBC \le_p A \le_p B, והרכבה של שתי פונקציות פולינומיות היא פולינומית (הפלט של הראשונה חסום פולינומית באורך הקלט, ולכן זמן הריצה של השנייה עליו הוא פולינום בפולינום).

מוטיבציה שהמרצה נתן ל[00:02:08]: המטרה בשבוע הקרוב אינה טכניקה חדשה אלא הרחבת המאגר. ככל שהמאגר גדול יותר, כך כשנרצה להוכיח שבעיה חדשה היא NP-קשה נוכל לבחור ממנו בעיה דומה לה ולעשות רדוקציה קצרה, במקום לחזור כל פעם ל-3SAT\mathrm{3SAT}. שתי רדוקציות בשיעור עוברות "בין עולמות" (מנוסחאות בוליאניות לגרפים) ואחת נשארת באותו עולם (גרפים→גרפים).


הגדרות

הגדרה 1: כיסוי בקודקודים (Vertex Cover)

יהי G=(V,E)G=(V,E) גרף לא מכוון. קבוצה U⊆VU \subseteq V תיקרא כיסוי בקודקודים (vertex cover) אם

∀e∈E:e∩U≠∅.\forall e \in E:\quad e \cap U \neq \emptyset .

ההגדרה מנצלת את העובדה שקשת בגרף לא מכוון היא קבוצה של שני קודקודים — זוג לא סדור, כלומר e={x,y}e = \{x,y\} — ולכן החיתוך e∩Ue \cap U הוא ביטוי חוקי. במילים: כל קשת מכילה לפחות קודקוד אחד מהכיסוי.

השפה המתאימה:

VC={⟨G,k⟩  |  G=(V,E) graph, k∈N,∃U⊆V a vertex cover of G, ∣U∣≤k}\mathrm{VC} = \left\{ \langle G,k \rangle \;\middle|\; \begin{array}{l} G=(V,E) \text{ graph},\ k \in \mathbb{N},\\ \exists U \subseteq V \text{ a vertex cover of } G,\ |U| \le k \end{array} \right\}

צורת כתיבה נוספת (עמוד 1 בסיכום, ואסייד ארוך ב-[00:04:50]–[00:11:13]). אפשר להגדיר את אותה בעיה בדיוק כך:

קלט: גרף G=(V,E)G=(V,E) ומספר טבעי k∈Nk \in \mathbb{N}. שאלה: האם קיים כיסוי בקודקודים U⊆VU \subseteq V בגודל לכל היותר kk?

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

אינטואיציה ומוטיבציה ([00:09:34]). דמיינו מפת כבישים: הקודקודים הם צמתים והקשתות הן כבישים. אנחנו רוצים למקם מצלמות בצמתים כך שכל כביש ייצפה על ידי לפחות מצלמה אחת, ובמספר מצלמות מינימלי. זה בדיוק כיסוי בקודקודים. השם המלא הוא למעשה "כיסוי הקשתות בקודקודים", ו-"כיסוי בקודקודים" הוא קיצור.

דוגמה (עמוד 1 בסיכום). יהי GG הגרף על V={a,b,u1,u2,c}V=\{a,b,u_1,u_2,c\} עם E={ au1,  bu2,  u1u2,  u1c,  u2c }.E=\{\,au_1,\; bu_2,\; u_1u_2,\; u_1c,\; u_2c\,\}. אז U={u1,u2}U=\{u_1,u_2\} היא כיסוי בקודקודים: au1∋u1au_1 \ni u_1, bu2∋u2bu_2 \ni u_2, u1u2∋u1u_1u_2 \ni u_1, u1c∋u1u_1c \ni u_1, u2c∋u2u_2c \ni u_2. כלומר ⟨G,2⟩∈VC\langle G,2\rangle \in \mathrm{VC}.

אי-דוגמה. U′={u1}U'=\{u_1\} אינה כיסוי: הקשת bu2bu_2 מקיימת bu2∩U′=∅bu_2 \cap U' = \emptyset. ואכן ⟨G,1⟩∉VC\langle G,1\rangle \notin \mathrm{VC}, כי au1au_1 ו-bu2bu_2 הן קשתות זרות ולכן דרושים לפחות שני קודקודים.

הגדרה 2: סיפוק במובן NAE, והבעיה kNAEk\mathrm{NAE}

תהי φ\varphi נוסחה בצורת CNF ותהי VV הצבה לקבוצת המשתנים של φ\varphi (הצבה = פונקציה מהמשתנים ל-{0,1}\{0,1\}).

תזכורת (אינה חלק מההגדרה החדשה). VV מספקת את φ\varphi אם ורק אם לכל פסוקית CC ב-φ\varphi קיים ליטרל ב-CC ש-VV נותנת לו את הערך 11.

ההגדרה החדשה. נאמר ש-VV מספקת את φ\varphi במובן Not All Equal, ונסמן זאת בקיצור NAE, אם

לכל פסוקית CC ב-φ\varphi קיים ליטרל ב-CC ש-VV נותנת לו 11 וגם קיים ליטרל ב-CC ש-VV נותנת לו 00.

הבעיה:

kNAEk\mathrm{NAE} — קלט: נוסחה φ\varphi מצורת kCNFk\mathrm{CNF} (כלומר CNF שבכל פסוקית שלה יש kk ליטרלים). שאלה: האם קיימת הצבה VV למשתני φ\varphi המספקת את φ\varphi במובן NAE?

אינטואיציה. סיפוק רגיל אומר "בכל פסוקית יש לפחות אמת אחת". סיפוק במובן NAE אומר "בכל פסוקית יש גם אמת וגם שקר" — כלומר הפסוקית אינה מונוכרומטית מבחינת ערכי האמת. שימו לב היטב ([00:35:48], והמרצה חזר על זה שלוש פעמים): התכונה הזו היא תכונה של הזוג (נוסחה, הצבה), לא של הנוסחה לבדה. כשאומרים "φ\varphi מסופקת במובן NAE" מתכוונים "קיימת הצבה שמספקת אותה במובן NAE".

אי-דוגמה מבנית ([00:36:21], שאלת סטודנט). אם ב-φ\varphi יש פסוקית עם ליטרל יחיד, אז אף הצבה אינה מספקת את φ\varphi במובן NAE, כי לא ייתכן שאותו ליטרל יקבל גם 11 וגם 00. זה לא סותר את ההגדרה — פשוט הנוסחה אינה ב-NAE\mathrm{NAE}.

דוגמה (עמוד 3 בסיכום). תהי φ=(x1∨x2∨x3)∧(x1‾∨x2).\varphi = (x_1 \vee x_2 \vee x_3) \wedge (\overline{x_1} \vee x_2).

  • ההצבה VV הנותנת לכל משתנה את הערך 11 מספקת את φ\varphi אך אינה מספקת אותה במובן NAE: בפסוקית הראשונה כל שלושת הליטרלים מקבלים 11.
  • ההצבה V(x1)=0,  V(x2)=V(x3)=1V(x_1)=0,\; V(x_2)=V(x_3)=1 מספקת את φ\varphi אך שוב לא במובן NAE: הפסוקית הראשונה מקבלת (0,1,1)(0,1,1) — מצוין — אבל השנייה מקבלת (x1‾=1, x2=1)(\overline{x_1}=1,\ x_2=1), כלומר שני ליטרלים בערך 11.
  • ההצבה V(x1)=0,  V(x2)=0,  V(x3)=1V(x_1)=0,\; V(x_2)=0,\; V(x_3)=1 כן מספקת את φ\varphi במובן NAE: הפסוקית הראשונה מקבלת (0,0,1)(0,0,1), השנייה מקבלת (1,0)(1,0). בשתיהן יש גם 11 וגם 00.

הגדרה 3: חתך מושרה ובעיית MAXCUT\mathrm{MAXCUT}

יהי G=(V,E)G=(V,E) מולטיגרף — גרף לא מכוון שבו מותרות קשתות מקבילות (יותר מקשת אחת בין אותו זוג קודקודים), ובאופן עקרוני גם לולאות. (גרף פשוט הוא גרף שבו בין כל שני קודקודים יש לכל היותר קשת אחת; כל גרף פשוט הוא בפרט מולטיגרף.)

תהי U⊆VU \subseteq V. החתך המושרה ב-GG על ידי UU הוא קבוצת הקשתות

cutG(U)={ e∈E  ∣  ∣e∩U∣=1 },\mathrm{cut}_G(U) = \{\, e \in E \;\mid\; |e \cap U| = 1 \,\},

כלומר כל הקשתות שיש להן בדיוק קצה אחד ב-UU. מקובל לומר ש-UU ו-V∖UV\setminus U הם שני צדדי החתך, ושהקשתות בחתך חוצות אותו.

הבעיה:

MAXCUT\mathrm{MAXCUT} — קלט: מולטיגרף G=(V,E)G=(V,E) ומספר k∈Nk \in \mathbb{N}. שאלה: האם קיימת U⊆VU \subseteq V כך שהחתך המושרה על ידיה מכיל לפחות kk קשתות?

למה דווקא "לפחות" ([00:51:48], [00:55:09]). בכיסוי בקודקודים ובקבוצה בלתי תלויה יכולנו להחליף "לכל היותר"/"לפחות" ב-"בדיוק", כי מה שסופרים הוא בדיוק מה שבוחרים — קודקודים. כאן בוחרים קודקודים אבל סופרים קשתות, ואין שליטה עדינה: הזזה של קודקוד יחיד מדרגה גבוהה יכולה לשנות את גודל החתך דרמטית. ייתכן אפילו גרף שבו כל חתך הוא בגודל זוגי, ואז לא נוכל להגיע ל-kk אי-זוגי בדיוק גם אם קיים חתך גדול יותר. לכן ה-"לפחות" כאן קריטי ואי אפשר להחליפו.

דוגמה (עמוד 4 בסיכום, [00:47:35]–[00:49:39]). יהי GG על V={a,b,c,d,e,f}V=\{a,b,c,d,e,f\} עם E={ ab, af, ac, bc, bd, cd, ce, de, ef },E = \{\,ab,\ af,\ ac,\ bc,\ bd,\ cd,\ ce,\ de,\ ef\,\}, ותהי U={b,c,f}U=\{b,c,f\}. אז

cutG(U)={ ab, af, ac, bd, cd, ce, ef },∣cutG(U)∣=7.\mathrm{cut}_G(U) = \{\,ab,\ af,\ ac,\ bd,\ cd,\ ce,\ ef\,\},\qquad |\mathrm{cut}_G(U)| = 7 .

שתי הקשתות שאינן בחתך ממחישות את שני אופני הכישלון: bcbc אינה בחתך כי שני קצותיה ב-UU, ו-dede אינה בחתך כי אף אחד מקצותיה אינו ב-UU.

הגדרה 4: צביעה חוקית ובעיות kCOL\mathrm{kCOL}

יהי G=(V,E)G=(V,E) גרף ויהי k∈Nk \in \mathbb{N}. צביעה של GG ב-kk צבעים היא פונקציה f:V⟶{1,2,…,k}=[k].f : V \longrightarrow \{1,2,\dots,k\} = [k]. הצביעה תיקרא חוקית אם לכל קשת uv∈Euv \in E מתקיים f(u)≠f(v)f(u) \neq f(v). במילים אחרות: אין בגרף קשת מונוכרומטית (קשת ששני קצותיה צבועים באותו צבע).

הבעיה:

kCOL\mathrm{kCOL} — קלט: גרף G=(V,E)G=(V,E). שאלה: האם קיימת צביעה חוקית של GG ב-kk צבעים?

נקודה עדינה מאוד ([01:38:26], שאלת סטודנטית). שימו לב ש-kk אינו חלק מהקלט — הוא חלק מה-DNA של הבעיה. יש בעיה בשם 2COL\mathrm{2COL}, בעיה אחרת בשם 3COL\mathrm{3COL}, בעיה שלישית בשם 4COL\mathrm{4COL} וכן הלאה; לכל kk קבוע זו בעיה נפרדת. זה שונה מהותית מ-IS\mathrm{IS}, CLIQUE\mathrm{CLIQUE} ו-VC\mathrm{VC}, שבהן kk הוא חלק מהקלט.

מה ההבדל עושה ([01:40:00]–[01:42:12]). נגדיר ISk\mathrm{IS}_k = הבעיה שבה הקלט הוא גרף בלבד והשאלה היא האם יש בו קבוצה בלתי תלויה בגודל kk, כאשר kk קבוע. אז ISk∈P\mathrm{IS}_k \in \mathrm{P}: מספר תת-הקבוצות בגודל kk הוא (∣V∣k)≤∣V∣k\binom{|V|}{k} \le |V|^k, ולכל אחת מהן בדיקת אי-תלות עולה זמן פולינומי; מכיוון ש-kk קבוע, ∣V∣k|V|^k הוא פולינום בגודל הקלט. אותה בעיה עצמה, כאשר kk הוא חלק מהקלט, היא NP-שלמה. ההבדל אינו קוסמטי: ∣V∣k|V|^k עם kk מהקלט הוא אקספוננציאלי בגודל הקלט.

דוגמה. משולש K3K_3 אינו 22-צביע (שלושה קודקודים המחוברים הדדית), אך הוא 33-צביע. K4K_4 אינו 33-צביע אך הוא 44-צביע.

אי-דוגמה לתפיסה שגויה ([00:15:50] בהקלטה 17). צביעה ב-kk צבעים אינה חייבת להיות על: אין בהגדרה שום דרישה להשתמש בכל kk הצבעים. לכן גרף 33-צביע הוא בפרט 44-צביע — פשוט לא נשתמש בצבע הרביעי.


משפטים והוכחות

משפט 1 (ההבחנה המרכזית): UU כיסוי בקודקודים   ⟺  \iff V∖UV \setminus U בלתי תלויה

טענה. יהי G=(V,E)G=(V,E) גרף ותהי U⊆VU \subseteq V. אז UU היא כיסוי בקודקודים של GG אם ורק אם V∖UV \setminus U היא קבוצה בלתי תלויה ב-GG.

הוכחה.

כיוון ⟸\Longleftarrow: נניח ש-UU היא כיסוי בקודקודים; נראה ש-V∖UV\setminus U בלתי תלויה.

צריך להראות: לכל x,y∈V∖Ux,y \in V\setminus U מתקיים xy∉Exy \notin E. אז יהיו x,y∈V∖Ux,y \in V \setminus U.

נניח בשלילה ש-xy∈Exy \in E. מכיוון ש-UU כיסוי בקודקודים, לקשת xyxy יש קצה ב-UU, כלומר x∈Ux \in U או y∈Uy \in U. אבל שנינו הנחנו x,y∈V∖Ux,y \in V\setminus U, כלומר x∉Ux \notin U וגם y∉Uy \notin U — סתירה. לכן xy∉Exy \notin E, ומכיוון ש-x,yx,y היו שרירותיים, V∖UV \setminus U בלתי תלויה. □\square (כיוון ראשון)

כיוון ⟹\Longrightarrow: נניח ש-V∖UV\setminus U בלתי תלויה; נראה ש-UU כיסוי בקודקודים.

צריך להראות: לכל קשת יש קצה ב-UU. תהי e=xy∈Ee = xy \in E קשת. מכיוון ש-V∖UV\setminus U בלתי תלויה, לא ייתכן ש-x,yx,y שניהם ב-V∖UV\setminus U (אחרת הייתה ביניהם קשת בסתירה לאי-תלות). לכן x∉V∖Ux \notin V\setminus U או y∉V∖Uy \notin V\setminus U, כלומר x∈Ux \in U או y∈Uy \in U, כלומר e∩U≠∅e \cap U \neq \emptyset. מכיוון ש-ee הייתה שרירותית, UU היא כיסוי בקודקודים. ■\blacksquare

הערה מתודית מהשיעור ([00:14:59]–[00:19:48]): המרצה עצר את הכיתה פעמיים על מבנה ההוכחה ולא על התוכן. (א) בכיוון הראשון סטודנט הציע מיד "נניח בשלילה". המרצה: אל תרוצו להוכחה בשלילה כשזה לא המבנה הנכון. המבנה הנכון מתחיל מ-"יהיו x,y∈V∖Ux,y \in V\setminus U", ורק אחרי שניסחנו מה בדיוק צריך להוכיח מגיעה השלילה, ורק על הצעד הנקודתי. "לדעת לנסח מה אנחנו רוצים להוכיח זה לפעמים 90% מהפתרון". (ב) בכיוון השני: כשההנחה שלנו היא טענת "לכל" (אי-תלות של V∖UV\setminus U) אין מה "לצטט" אותה — פשוט מפעילים אותה על העצם הקונקרטי שבידינו. כשההנחה היא טענת "קיים", כן כדאי לפתוח אותה ולתת שם למשתנה שהיא מספקת, כי נשתמש בו בהמשך.

משפט 2: IS≤pVC\mathrm{IS} \le_p \mathrm{VC}, ולכן VC\mathrm{VC} היא NP-שלמה

הכיוון במילים: אנחנו מבצעים רדוקציה מ-IS\mathrm{IS} (הבעיה שכבר ידוע שהיא NP-קשה) אל VC\mathrm{VC} (הבעיה שאנחנו רוצים להוכיח שהיא קשה). התוצאה היא ש-VC\mathrm{VC} קשה לפחות כמו IS\mathrm{IS}.

הרדוקציה (עמוד 2 בסיכום). נתבונן באלגוריתם הבא:

קלט: גרף G=(V,E)G=(V,E) ומספר k∈Nk \in \mathbb{N}.

  1. החזר את ⟨G, ∣V∣−k⟩\langle G,\ |V|-k \rangle.

זהו. אותו גרף בדיוק, רק המספר משתנה.

ניתוח זמן ריצה. האלגוריתם מעתיק את הקלט ומבצע חיסור יחיד. במודל RAM זה אפילו זמן קבוע; במכונת טיורינג יש לבצע חיסור בינארי על מספר שאורכו לכל היותר אורך הקלט, כלומר זמן פולינומי (למעשה O(∣⟨G,k⟩∣2)O(|\langle G,k\rangle|^2) בגישה נאיבית). בכל מקרה — פולינומי בגודל הקלט, וזה כל מה שנדרש; אין צורך להתחייב ליותר.

נכונות. יהיו G=(V,E)G=(V,E) גרף ו-k∈Nk\in\mathbb{N}.

כיוון ⟹\Longrightarrow: נניח ⟨G,k⟩∈IS\langle G,k\rangle \in \mathrm{IS}.

אז קיימת U⊆VU \subseteq V בלתי תלויה ב-GG עם ∣U∣=k|U| = k. לפי משפט 1, V∖UV \setminus U היא כיסוי בקודקודים של GG, וגודלה ∣V∖U∣=∣V∣−∣U∣=∣V∣−k.|V\setminus U| = |V| - |U| = |V| - k . לכן קיים ב-GG כיסוי בקודקודים בגודל ∣V∣−k|V|-k, ומכאן ⟨G,∣V∣−k⟩∈VC\langle G, |V|-k\rangle \in \mathrm{VC}.

כיוון ⟸\Longleftarrow: נניח ⟨G,∣V∣−k⟩∈VC\langle G,|V|-k\rangle \in \mathrm{VC}.

אז קיים כיסוי בקודקודים U⊆VU \subseteq V של GG עם ∣U∣=∣V∣−k|U| = |V|-k. לפי משפט 1, V∖UV\setminus U היא קבוצה בלתי תלויה ב-GG, וגודלה ∣V∖U∣=∣V∣−(∣V∣−k)=k.|V \setminus U| = |V| - (|V|-k) = k . לכן ⟨G,k⟩∈IS\langle G,k\rangle \in \mathrm{IS}.

קיבלנו שלכל קלט ⟨G,k⟩\langle G,k\rangle מתקיים ⟨G,k⟩∈IS  ⟺  ⟨G,∣V∣−k⟩∈VC\langle G,k\rangle \in \mathrm{IS} \iff \langle G,|V|-k\rangle \in \mathrm{VC}, והאלגוריתם רץ בזמן פולינומי; לכן זו רדוקציית זמן פולינומי מ-IS\mathrm{IS} ל-VC\mathrm{VC}, ומכאן ש-VC\mathrm{VC} היא NP-קשה. ■\blacksquare

נקודה טכנית שהמרצה הוסיף באדום ([00:30:14]–[00:31:46], שאלת סטודנטית). בהוכחה השתמשנו בגודל בדיוק kk ובגודל בדיוק ∣V∣−k|V|-k, בעוד שההגדרות מדברות על "לפחות kk" ב-IS\mathrm{IS} ועל "לכל היותר kk" ב-VC\mathrm{VC}. זה חוקי, וזו למעשה טענת עזר שכדאי לזכור:

  • ב-VC\mathrm{VC}: אם יש כיסוי בגודל ≤k\le k (ו-k≤∣V∣k \le |V|), אפשר תמיד להוסיף קודקודים שרירותיים עד לגודל kk בדיוק — הוספת קודקוד לכיסוי לעולם אינה מקלקלת את היותו כיסוי. לכן "קיים כיסוי בגודל לכל היותר kk"   ⟺  \iff "קיים כיסוי בגודל בדיוק kk".
  • ב-IS\mathrm{IS}: אם יש קבוצה בלתי תלויה בגודל ≥k\ge k, אפשר תמיד להוציא קודקודים עד לגודל kk בדיוק — תת-קבוצה של קבוצה בלתי תלויה היא בלתי תלויה. לכן "קיימת קבוצה בלתי תלויה בגודל לפחות kk"   ⟺  \iff "בגודל בדיוק kk".

שימו לב שהכיווניות הפוכה בין שתי הבעיות, וזה בדיוק המקום שבו זה מסוכן. בכל בעיה חדשה יש לשאול מחדש האם "לכל היותר"/"לפחות"/"בדיוק" שקולים.

VC∈NP\mathrm{VC} \in \mathrm{NP} ([00:31:46]). בהינתן ⟨G,k⟩\langle G,k\rangle והעד U⊆VU \subseteq V (שאורכו לכל היותר ∣V∣|V|, כלומר פולינומי בגודל הקלט), המאמת בודק ש-∣U∣≤k|U| \le k ועובר על כל קשת e∈Ee \in E ומוודא ש-e∩U≠∅e \cap U \neq \emptyset. זמן: O(∣E∣⋅∣U∣)O(|E|\cdot|U|), פולינומי. לכן VC∈NP\mathrm{VC} \in \mathrm{NP}, ויחד עם ה-NP-קשיות: VC\mathrm{VC} היא NP-שלמה.

שאלת סטודנט ([00:21:22]): "למה לא לקחת פשוט את הזהות כרדוקציה?" התשובה כללה שני חלקים. ראשית, הכיוון: אנחנו לא רוצים רדוקציה מ-VC\mathrm{VC}, אלא אל VC\mathrm{VC} — כי המטרה היא להוכיח ש-VC\mathrm{VC} קשה. שנית, הזהות "כמעט" עובדת: הגרף אכן נשאר אותו גרף, אבל המספר חייב להשתנות, בדיוק בגלל הקשר בין גודל קבוצה לגודל המשלים שלה.

משפט 3: 3NAE\mathrm{3NAE} ו-4NAE\mathrm{4NAE} הן NP-קשות

טענה (עמוד 3 בסיכום, נמסרה כתרגיל בית, [00:43:55]). מתקיימות שתי הרדוקציות 3SAT≤p4NAE,4NAE≤p3NAE.\mathrm{3SAT} \le_p \mathrm{4NAE}, \qquad \mathrm{4NAE} \le_p \mathrm{3NAE}.

מסקנה. מכיוון ש-3SAT\mathrm{3SAT} היא NP-קשה, הרדוקציה הראשונה נותנת ש-4NAE\mathrm{4NAE} היא NP-קשה; והרכבה של השתיים (טרנזיטיביות של ≤p\le_p) נותנת 3SAT≤p3NAE\mathrm{3SAT} \le_p \mathrm{3NAE}, ולכן גם 3NAE\mathrm{3NAE} היא NP-קשה.

הערה: בהרצאה זה נאמר בקיצור — שתי הרדוקציות עצמן נמסרו כתרגיל בית והמרצה דילג עליהן. הפירוט שנדרש כאן הוא רק חשבון הטרנזיטיביות, שאותו נכתוב במלואו: אם ff מחשבת את 3SAT≤p4NAE\mathrm{3SAT}\le_p \mathrm{4NAE} בזמן p(n)p(n) ו-gg מחשבת את 4NAE≤p3NAE\mathrm{4NAE}\le_p\mathrm{3NAE} בזמן q(n)q(n), אז ∣f(x)∣≤p(∣x∣)|f(x)| \le p(|x|) (כי בזמן p(∣x∣)p(|x|) אי אפשר לכתוב יותר מ-p(∣x∣)p(|x|) תווים), ולכן חישוב g(f(x))g(f(x)) עולה p(∣x∣)+q(p(∣x∣))p(|x|) + q(p(|x|)) — הרכבה של פולינומים, כלומר פולינום. וכן x∈3SAT  ⟺  f(x)∈4NAE  ⟺  g(f(x))∈3NAEx\in\mathrm{3SAT} \iff f(x)\in\mathrm{4NAE} \iff g(f(x)) \in \mathrm{3NAE}.

מכאן ואילך נשתמש ב-3NAE\mathrm{3NAE} כ"נקודת המוצא הקשה" לשתי הרדוקציות הבאות.

הנחת נורמליזציה שנשתמש בה ([00:54:03]). נניח שבכל פסוקית של נוסחת 3CNF\mathrm{3CNF} יש בדיוק שלושה ליטרלים (שונים). זו הנחה סטנדרטית שהצדקתה פורסמה לכיתה בשקף נפרד: תמיד אפשר לשכפל ליטרל או להוסיף משתנה עזר כדי להגיע לבדיוק שלושה.

משפט 4: 3NAE≤pMAXCUT\mathrm{3NAE} \le_p \mathrm{MAXCUT}, ולכן MAXCUT\mathrm{MAXCUT} היא NP-קשה

הכיוון במילים: רדוקציה מ-3NAE\mathrm{3NAE} (עולם הנוסחאות הבוליאניות) אל MAXCUT\mathrm{MAXCUT} (עולם הגרפים). קלט הרדוקציה הוא נוסחה; הפלט הוא זוג ⟨\langleמולטיגרף, מספר⟩\rangle.

הרדוקציה (עמוד 4 בסיכום). נתבונן באלגוריתם הבא:

קלט: נוסחה φ\varphi מצורת 3CNF\mathrm{3CNF}.

  1. נסמן את משתני φ\varphi ב-x1,…,xnx_1,\dots,x_n ואת מספר הפסוקיות ב-mm.
  2. נבנה מולטיגרף G=(V,E)G=(V,E) באופן הבא:
    • 2.1 לכל 1≤i≤n1 \le i \le n נגדיר קודקוד עבור xix_i וקודקוד עבור xi‾\overline{x_i}. (סה"כ 2n2n קודקודים — קודקוד לכל ליטרל.)
    • 2.2 לכל 1≤i≤n1 \le i \le n נוסיף קשת בין xix_i ל-xi‾\overline{x_i}. נקרא לקשתות אלה קשתות כחולות.
    • 2.3 לכל פסוקית CC נוסיף קשת בין כל שני ליטרלים שלה (משולש). נקרא לקשתות אלה קשתות אדומות.
  3. החזר את ⟨G, n+2m⟩\langle G,\ n+2m \rangle.

הצבעים אינם חלק מהמתמטיקה — הם מכשיר תיאורי, כדי שיהיה נוח לדבר על "קשתות מסוג ראשון" ו-"קשתות מסוג שני" בתוך ההוכחה ([00:58:27], שאלת סטודנט).

למה מולטיגרף ([00:58:58], [01:02:15]). אם שתי פסוקיות שונות מכילות את אותו זוג ליטרלים, נקבל שתי קשתות אדומות מקבילות; ואם פסוקית מכילה גם xix_i וגם xi‾\overline{x_i}, נקבל קשת אדומה מקבילה לקשת הכחולה. אלה קשתות שונות של המולטיגרף, וזה בדיוק מה שמאפשר לספור כל פסוקית בנפרד.

ניתוח זמן ריצה ([01:05:23]–[01:08:05], עמוד 5 בסיכום). נסמן ב-∣φ∣|\varphi| את אורך הקלט.

  • שלב 1 (סימון משתנים וספירת פסוקיות): מעבר יחיד על הנוסחה, O(∣φ∣)O(|\varphi|).
  • שלב 2.1 (יצירת קודקודים): מספר המשתנים הוא לכל היותר ∣φ∣|\varphi|, ולכן O(∣φ∣)O(|\varphi|).
  • שלב 2.2 (קשתות כחולות): nn קשתות, n≤∣φ∣n \le |\varphi|, כלומר O(∣φ∣)O(|\varphi|).
  • שלב 2.3 (קשתות אדומות): כאן היחיד שדורש נימוק. מכיוון שהנוסחה היא 3CNF\mathrm{3CNF}, כל פסוקית תורמת בדיוק שלוש קשתות (משולש על שלושה ליטרלים). לכן סך הקשתות האדומות הוא 3m≤3∣φ∣3m \le 3|\varphi|, כלומר O(∣φ∣)O(|\varphi|). שימו לב שזה אינו ריבועי — לו הפסוקיות היו באורך שרירותי, מספר הקשתות למשולש היה ריבועי באורך הפסוקית.
  • שלב 3 (חישוב n+2mn+2m וכתיבת הפלט): O(∣φ∣)O(|\varphi|).

סך הכול האלגוריתם רץ בזמן ליניארי באורך הקלט, ובפרט פולינומי. ✓\checkmark

נכונות. תהי φ\varphi נוסחה מצורת 3CNF\mathrm{3CNF}, נסמן את משתניה x1,…,xnx_1,\dots,x_n ואת מספר פסוקיותיה mm, ויהי GG הגרף שהאלגוריתם בונה.

כיוון ⟹\Longrightarrow: נניח φ∈3NAE\varphi \in \mathrm{3NAE}.

אז קיימת הצבה VV המספקת את φ\varphi במובן NAE. נגדיר U  =  { ℓ  ∣  ℓ a literal vertex, V(ℓ)=1 },U \;=\; \{\, \ell \;\mid\; \ell \text{ a literal vertex},\ V(\ell)=1 \,\}, כלומר UU היא קבוצת קודקודי הליטרלים שההצבה נותנת להם 11. נראה שהחתך המושרה על ידי UU מכיל לפחות n+2mn+2m קשתות.

הקשתות הכחולות. לכל 1≤i≤n1\le i\le n, בדיוק אחד מבין xi,xi‾x_i,\overline{x_i} מקבל את הערך 11 (כי V(xi‾)=1−V(xi)V(\overline{x_i}) = 1-V(x_i)). לכן בדיוק אחד מהם ב-UU, ולכן הקשת הכחולה xixi‾x_i\overline{x_i} מקיימת ∣e∩U∣=1|e\cap U| = 1 — היא בחתך. סך הכול כל nn הקשתות הכחולות בחתך.

הקשתות האדומות. תהי CC פסוקית, ויהיו ℓ1,ℓ2,ℓ3\ell_1,\ell_2,\ell_3 ליטרליה. מכיוון ש-VV מספקת את CC במובן NAE, קיים jj עם V(ℓj)=1V(\ell_j)=1 ולכן ℓj∈U\ell_j \in U, וקיים j′j' עם V(ℓj′)=0V(\ell_{j'})=0 ולכן ℓj′∉U\ell_{j'} \notin U. שלושת הליטרלים יוצרים משולש, וכעת נספור: שני הקודקודים ℓj,ℓj′\ell_j,\ell_{j'} נמצאים בצדדים שונים, ולכן הקשת ביניהם חוצה. נותר הקודקוד השלישי — לא משנה באיזה צד הוא נמצא, מבין שתי הקשתות הנותרות בדיוק אחת חוצה (זו המחברת אותו לקודקוד שבצד השני). לכן מבין שלוש הקשתות של המשולש בדיוק שתיים בחתך.

בסך הכול, מכיוון שהקשתות האדומות של פסוקיות שונות הן קשתות שונות במולטיגרף, אפשר לסכום בנפרד: ∣cutG(U)∣  =  n⏟blue  +  2m⏟red  =  n+2m  ≥  n+2m.|\mathrm{cut}_G(U)| \;=\; \underbrace{n}_{\text{blue}} \;+\; \underbrace{2m}_{\text{red}} \;=\; n+2m \;\ge\; n+2m . לכן ⟨G,n+2m⟩∈MAXCUT\langle G,n+2m\rangle \in \mathrm{MAXCUT}.

כיוון ⟸\Longleftarrow: נניח ⟨G,n+2m⟩∈MAXCUT\langle G,n+2m\rangle \in \mathrm{MAXCUT}.

אז קיימת U⊆VU \subseteq V כך שבחתך המושרה על ידיה יש לפחות n+2mn+2m קשתות. אנחנו רוצים לבנות ממנה הצבה שמספקת את φ\varphi במובן NAE.

צעד 1 — חסם עליון על הקשתות האדומות. כאן דרוש טיעון "הפוך" מכל השאר: עד כה עבדנו עם "לפחות", וכעת נזדקק ל-"לכל היותר". תהי CC פסוקית כלשהי, והמשולש המתאים לה. לא משנה מהי UU: או ששלושת קודקודי המשולש באותו צד (אז 00 קשתות חוצות), או שהם מתחלקים 22–11 (אז בדיוק 22 חוצות). בשני המקרים #{red edges of C in the cut}≤2.\#\{\text{red edges of } C \text{ in the cut}\} \le 2 . לכן בכל חתך שהוא, סך הקשתות האדומות בחתך הוא לכל היותר 2m2m.

צעד 2 — כפיית הקשתות הכחולות. בחתך שלנו יש לפחות n+2mn+2m קשתות, ומהן לכל היותר 2m2m אדומות; לכן יש בו לפחות nn קשתות כחולות. אבל בגרף יש בסך הכול בדיוק nn קשתות כחולות. לכן בחתך יש בדיוק nn קשתות כחולות — כולן. מכאן שלכל 1≤i≤n1\le i\le n הקשת xixi‾x_i\overline{x_i} בחתך, כלומר בדיוק אחד מבין xi,xi‾x_i,\overline{x_i} שייך ל-UU.

צעד 3 — הגדרת ההצבה. נגדיר הצבה VV על ידי V(ℓ)=1  ⟺  ℓ∈Ufor every literal vertex ℓ.V(\ell) = 1 \iff \ell \in U \qquad \text{for every literal vertex } \ell . מצעד 2 נובע שההגדרה עקבית ומוגדרת היטב: מכל זוג {xi,xi‾}\{x_i,\overline{x_i}\} בדיוק אחד ב-UU, ולכן בדיוק אחד מקבל 11 והשני 00, כנדרש מהצבה.

צעד 4 — כל פסוקית מסופקת במובן NAE. בחתך יש בדיוק nn קשתות כחולות, ולכן מתוך לפחות n+2mn+2m קשתות, לפחות 2m2m הן אדומות. מצד שני כל פסוקית תורמת לכל היותר 22. אילו פסוקית אחת הייתה תורמת פחות מ-22, סך התרומות האדומות היה קטן מ-2m2m — סתירה. לכן כל פסוקית תורמת בדיוק שתי קשתות לחתך.

תהי CC פסוקית. אילו כל שלושת קודקודי המשולש שלה היו באותו צד, היא הייתה תורמת 00 קשתות. לכן היא מתחלקת: קיים ליטרל ℓ∈C\ell \in C עם ℓ∈U\ell \in U, ולכן V(ℓ)=1V(\ell)=1, וקיים ליטרל ℓ′∈C\ell' \in C עם ℓ′∉U\ell' \notin U, ולכן V(ℓ′)=0V(\ell')=0. זו בדיוק ההגדרה של סיפוק CC במובן NAE.

מכיוון ש-CC הייתה שרירותית, VV מספקת את φ\varphi במובן NAE, ולכן φ∈3NAE\varphi \in \mathrm{3NAE}. ■\blacksquare

מסקנה. 3NAE≤pMAXCUT\mathrm{3NAE} \le_p \mathrm{MAXCUT} ולכן MAXCUT\mathrm{MAXCUT} היא NP-קשה. היא גם ב-NP (העד הוא UU; המאמת עובר על כל הקשתות וסופר כמה מהן מקיימות ∣e∩U∣=1|e\cap U|=1 — זמן פולינומי), ולכן NP-שלמה.

למה דווקא 3 ([01:20:43]–[01:22:19], שאלת סטודנט "האם זה עובד לכל kCNFk\mathrm{CNF}?"): הקסם כאן הוא שמשולש תורם לחתך בדיוק 22 או בדיוק 00 — אין אפשרויות אחרות. בפסוקית בגודל 44 או 55 הקודקודים ה"חופשיים" יכולים להתחלק במספר דרכים ומספר הקשתות החוצות אינו נקבע חד-משמעית; החסם העליון בצעד 1 היה נעשה רופף והכפייה בצעד 2 הייתה נשברת. המרצה אמר שהוא לא בדק אם אפשר להציל את זה, אבל שהמספר 33 "משחק מאוד חזק לטובתי" כי מספר האפשרויות זעיר.

הערה על אסימטריה של רדוקציות ([01:24:24]): בכיוון ⟸\Longleftarrow סטודנטים נטו לחשוב שצריך "ללכת אחורה ברדוקציה" ולבנות נוסחה מגרף. לא. הרדוקציה אינה סימטרית: התחלנו מנוסחה φ\varphi שקיבלנו "מהשמיים", ממנה בנה האלגוריתם את GG, וכעת שניהם בידינו. בפרט אנחנו יודעים בדיוק איך GG נראה, כי אנחנו בנינו אותו. אין שום שלב שבו אמרנו "יהי GG גרף".

משפט 5: 2COL∈P\mathrm{2COL} \in \mathrm{P}

טענה. הבעיה 2COL\mathrm{2COL} — האם גרף נתון ניתן לצביעה חוקית בשני צבעים — היא ב-P\mathrm{P}.

הוכחה. נטען ש-GG הוא 22-צביע אם ורק אם GG הוא דו-צדדי.

(⇒)(\Rightarrow) תהי f:V→{1,2}f:V\to\{1,2\} צביעה חוקית. נגדיר A=f−1(1)A=f^{-1}(1) ו-B=f−1(2)B=f^{-1}(2). אלה שתי קבוצות זרות שאיחודן VV, ולכל קשת uv∈Euv\in E מתקיים f(u)≠f(v)f(u)\neq f(v), כלומר קצה אחד ב-AA והשני ב-BB. לכן אין קשת בתוך AA ואין קשת בתוך BB — זו בדיוק חלוקה דו-צדדית.

(⇐)(\Leftarrow) אם V=A ∪˙ BV = A \,\dot\cup\, B חלוקה דו-צדדית, נגדיר f(v)=1f(v)=1 עבור v∈Av\in A ו-f(v)=2f(v)=2 עבור v∈Bv\in B; כל קשת עוברת בין הצדדים ולכן קצותיה בצבעים שונים.

מקורס האלגוריתמים ידוע שבדיקת דו-צדדיות היא בזמן פולינומי (ואף ליניארי): גרף הוא דו-צדדי אם ורק אם אין בו מעגל באורך אי-זוגי, ואלגוריתם BFS שצובע שכבות לסירוגין מגלה מעגל אי-זוגי או מפיק חלוקה דו-צדדית. לכן 2COL∈P\mathrm{2COL} \in \mathrm{P}. ■\blacksquare

הערה מהשיעור ([01:43:26]–[01:46:33]): הסטודנטית שענתה "דו-צדדי" עשתה זאת מיידית והמרצה התלהב, אבל הוסיף במפורש: "מי שלא ראה את זה — לא להרגיש לא בנוח; אני הייתי מאלה שאף פעם לא קלטו את זה בזמן השיעור". לשלוט בחומר אין פירושו לשלוף אותו בשנייה.

משפט 6: 3NAE≤p3COL\mathrm{3NAE} \le_p \mathrm{3COL}, ולכן 3COL\mathrm{3COL} היא NP-שלמה

הכיוון במילים: רדוקציה מ-3NAE\mathrm{3NAE} אל 3COL\mathrm{3COL}. הקלט הוא נוסחה 3CNF\mathrm{3CNF}; הפלט הוא גרף בלבד — אין מספר, כי k=3k=3 הוא חלק מה-DNA של הבעיה.

הרדוקציה (עמוד 7 בסיכום, [01:47:38]–[01:51:01]).

קלט: נוסחה φ\varphi מצורת 3CNF\mathrm{3CNF}, עם משתנים x1,…,xnx_1,\dots,x_n ו-mm פסוקיות.

  1. נבנה גרף G=(V,E)G=(V,E) כך:
    • 1.1 קודקודים: לכל 1≤i≤n1\le i\le n קודקוד עבור xix_i וקודקוד עבור xi‾\overline{x_i} (קודקודי ליטרלים); קודקוד מיוחד נוסף NN; ולכל פסוקית CjC_j שלושה קודקודים נוספים, אחד לכל ליטרל שלה (קודקודי פסוקית). סה"כ 2n+1+3m2n+1+3m קודקודים.
    • 1.2 קשתות: נחבר את NN לכל קודקודי הליטרלים (קשתות שחורות, 2n2n קשתות); נחבר כל ליטרל לשלילתו (קשתות כחולות, nn קשתות); ולכל פסוקית נחבר את שלושת קודקודי הפסוקית זה לזה (משולש) וכן כל קודקוד פסוקית לקודקוד הליטרל המתאים לו (קשתות אדומות, 3+3=63+3=6 קשתות לפסוקית).
  2. החזר את GG.

שימו לב להבחנה שבלבלה את הכיתה ([01:55:50], [02:07:26]): לכל פסוקית יש שלושה קודקודים משלה, שהם עצמים נפרדים מקודקודי הליטרלים. קודקוד פסוקית "מתאים" לליטרל רק במובן שקיימת ביניהם קשת אדומה.

האינטואיציה מאחורי הבנייה ([01:53:40]–[01:54:41]). נניח שיש צביעה חוקית ב-33 צבעים. בלי הגבלת הכלליות f(N)=1f(N)=1 (אפשר תמיד להחליף שמות צבעים). מכיוון ש-NN מחובר לכל קודקודי הליטרלים, כל קודקוד ליטרל צבוע ב-22 או ב-33; ומכיוון ש-xix_i מחובר ל-xi‾\overline{x_i}, מכל זוג כזה בדיוק אחד צבוע ב-22 ובדיוק אחד ב-33. כלומר הצבעים {2,3}\{2,3\} מתפקדים בדיוק כמו {true,false}\{\text{true},\text{false}\}, והקודקוד NN "שורף" עבורנו את הצבע הראשון. זה בדיוק ההפרדה שהייתה לנו ברדוקציה הקודמת. המשולשים של הפסוקיות הם המנגנון שאוכף את תנאי ה-NAE.

ניתוח זמן ריצה ([01:56:51]–[01:57:54]).

  • קודקודים: 2n2n קודקודי ליטרלים + 1 + 3m+\,1\,+\,3m קודקודי פסוקיות. מכיוון ש-n,m≤∣φ∣n,m \le |\varphi|, זה O(∣φ∣)O(|\varphi|).
  • קשתות שחורות: 2n=O(∣φ∣)2n = O(|\varphi|).
  • קשתות כחולות: n=O(∣φ∣)n = O(|\varphi|).
  • קשתות אדומות: בדיוק שש לכל פסוקית (שלוש במשולש ושלוש לליטרלים), כלומר 6m=O(∣φ∣)6m = O(|\varphi|).

סך הכול ∣V∣+∣E∣=O(∣φ∣)|V|+|E| = O(|\varphi|) והאלגוריתם רץ בזמן ליניארי בגודל הקלט, ובפרט פולינומי. ✓\checkmark

נכונות. תהי φ\varphi נוסחה מצורת 3CNF\mathrm{3CNF} ויהי GG הגרף שהאלגוריתם בונה.

כיוון ⟹\Longrightarrow: נניח φ∈3NAE\varphi \in \mathrm{3NAE}.

אז קיימת הצבה VV המספקת את φ\varphi במובן NAE. נבנה צביעה f:V(G)→{1,2,3}f : V(G) \to \{1,2,3\}:

  1. f(N)=1f(N) = 1.
  2. לכל 1≤i≤n1\le i \le n: אם V(xi)=1V(x_i)=1 אז f(xi)=2f(x_i)=2 ו-f(xi‾)=3f(\overline{x_i})=3; אחרת f(xi)=3f(x_i)=3 ו-f(xi‾)=2f(\overline{x_i})=2.
  3. תהי CC פסוקית עם ליטרלים ℓ1,ℓ2,ℓ3\ell_1,\ell_2,\ell_3 וקודקודי פסוקית c1,c2,c3c_1,c_2,c_3 (כאשר ctc_t מחובר ל-ℓt\ell_t). מכיוון ש-VV מספקת את CC במובן NAE, קיים tt עם V(ℓt)=1V(\ell_t)=1 וקיים t′t' עם V(ℓt′)=0V(\ell_{t'})=0; נבחר אחד מכל סוג. נצבע:
    • f(ct)=3f(c_t) = 3 (הקודקוד המתאים לליטרל שקיבל 11),
    • f(ct′)=2f(c_{t'}) = 2 (הקודקוד המתאים לליטרל שקיבל 00),
    • f(ct′′)=1f(c_{t''}) = 1 עבור הקודקוד השלישי.

הערה חשובה על שלב 2 ([02:02:33], שאלת סטודנט): אי אפשר לצבוע "את כל ה-xix_i ב-22 ואת כל ה-xi‾\overline{x_i} ב-33". הצביעה חייבת להיות תלויה בהצבה, כי אחרת שני ליטרלים שההצבה נתנה להם ערכים שונים היו מקבלים אותו צבע והקשר בין צבע לערך אמת היה נשבר. נשים לב שההגדרה בשלב 2 שקולה לכלל האחיד:

f(\ell) = 2 \iff V(\ell)=1, \qquad f(\ell) = 3 \iff V(\ell)=0 \qquad \text{for every literal } \ell . \tag{$\ast$}

(אכן: אם V(xi)=1V(x_i)=1 אז f(xi)=2f(x_i)=2 ו-V(xi‾)=0V(\overline{x_i})=0 עם f(xi‾)=3f(\overline{x_i})=3; ואם V(xi)=0V(x_i)=0 אז f(xi)=3f(x_i)=3 ו-V(xi‾)=1V(\overline{x_i})=1 עם f(xi‾)=2f(\overline{x_i})=2.)

כעת נוודא שאף קשת אינה מונוכרומטית, קבוצה אחרי קבוצה:

  • קשתות שחורות (NN–ליטרל): f(N)=1f(N)=1 ולכל ליטרל f(ℓ)∈{2,3}f(\ell) \in \{2,3\}, ולכן f(N)≠f(ℓ)f(N) \neq f(\ell). ✓\checkmark
  • קשתות כחולות (xix_i–xi‾\overline{x_i}): לפי הבנייה בשלב 2, אחד מהם צבוע 22 והשני 33. ✓\checkmark
  • קשתות המשולש של פסוקית (ctc_t–ct′c_{t'} וכו'): לפי שלב 3 שלושת הקודקודים קיבלו 3,2,13,2,1 — שלושה צבעים שונים. ✓\checkmark
  • קשתות אדומות בין קודקוד פסוקית לליטרל שלו:
    • ctc_t (הליטרל שקיבל 11): f(ct)=3f(c_t)=3, ולפי (∗)(\ast) f(ℓt)=2f(\ell_t)=2. שונים. ✓\checkmark
    • ct′c_{t'} (הליטרל שקיבל 00): f(ct′)=2f(c_{t'})=2, ולפי (∗)(\ast) f(ℓt′)=3f(\ell_{t'})=3. שונים. ✓\checkmark
    • ct′′c_{t''}: f(ct′′)=1f(c_{t''})=1, ואילו f(ℓt′′)∈{2,3}f(\ell_{t''}) \in \{2,3\}. שונים. ✓\checkmark (הצבע 11 תמיד פנוי לקודקוד פסוקית, כי הצבע 11 ניתן רק ל-NN, ו-NN אינו מחובר לקודקודי פסוקיות.)

לכן ff היא צביעה חוקית של GG בשלושה צבעים, ומכאן G∈3COLG \in \mathrm{3COL}.

שימו לב גם שכל משולש פסוקית נצבע בנפרד לחלוטין, בלי להתחשב בפסוקיות אחרות ([02:07:58]) — בדיוק כמו שברדוקציה ל-MAXCUT\mathrm{MAXCUT} כל פסוקית תרמה קשתות משלה.

כיוון ⟸\Longleftarrow: נניח G∈3COLG \in \mathrm{3COL}.

הערה: את הכיוון הזה המרצה השאיר כתרגיל בית ורק שרטט אותו בדקה האחרונה של ההקלטה ([02:11:40]). להלן ההשלמה המלאה, לפי הסקיצה שלו.

תהי ff צביעה חוקית של GG בשלושה צבעים. מכיוון שהחלפת שמות הצבעים (פרמוטציה על {1,2,3}\{1,2,3\}) שומרת על חוקיות הצביעה, נוכל להניח בלי הגבלת הכלליות ש-f(N)=1f(N)=1.

צעד 1. כל קודקוד ליטרל ℓ\ell מחובר ל-NN בקשת שחורה, ולכן f(ℓ)≠1f(\ell) \neq 1, כלומר f(ℓ)∈{2,3}f(\ell) \in \{2,3\}.

צעד 2. לכל 1≤i≤n1\le i\le n הקשת הכחולה xixi‾x_i\overline{x_i} מחייבת f(xi)≠f(xi‾)f(x_i)\neq f(\overline{x_i}). יחד עם צעד 1: בדיוק אחד מבין xi,xi‾x_i,\overline{x_i} צבוע ב-22 והשני ב-33.

צעד 3 (הגדרת ההצבה). נגדיר הצבה VV על ידי V(xi)=1  ⟺  f(xi)=2.V(x_i) = 1 \iff f(x_i) = 2 . מצעד 2 נובע שאז f(xi‾)=3f(\overline{x_i})=3, ולכן שוב מתקיים הכלל האחיד (∗)(\ast): לכל ליטרל ℓ\ell,   f(ℓ)=2  ⟺  V(ℓ)=1\;f(\ell)=2 \iff V(\ell)=1 ו-f(ℓ)=3  ⟺  V(ℓ)=0f(\ell)=3 \iff V(\ell)=0. ההגדרה עקבית ומוגדרת היטב לכל משתנה.

צעד 4 (כל פסוקית מסופקת במובן NAE). תהי CC פסוקית עם ליטרלים ℓ1,ℓ2,ℓ3\ell_1,\ell_2,\ell_3 וקודקודי פסוקית c1,c2,c3c_1,c_2,c_3. שלושת הקודקודים c1,c2,c3c_1,c_2,c_3 יוצרים משולש, ולכן בצביעה חוקית הם נושאים שלושה צבעים שונים, כלומר {f(c1),f(c2),f(c3)}={1,2,3}\{f(c_1),f(c_2),f(c_3)\} = \{1,2,3\}. בפרט:

  • קיים tt עם f(ct)=2f(c_t)=2. הקשת האדומה ctℓtc_t\ell_t מחייבת f(ℓt)≠2f(\ell_t)\neq 2, ומצעד 1 נובע f(ℓt)=3f(\ell_t)=3, ולכן לפי (∗)(\ast) מתקיים V(ℓt)=0V(\ell_t)=0.
  • קיים ss עם f(cs)=3f(c_s)=3. הקשת האדומה csℓsc_s\ell_s מחייבת f(ℓs)≠3f(\ell_s)\neq 3, ולכן f(ℓs)=2f(\ell_s)=2, ולכן V(ℓs)=1V(\ell_s)=1.

(ו-t≠st \neq s כי הצבעים שונים, ולכן ℓt≠ℓs\ell_t \neq \ell_s הם שני ליטרלים שונים של CC — כאן נכנסת ההנחה שבכל פסוקית שלושה ליטרלים שונים.)

קיבלנו שב-CC יש ליטרל שההצבה נותנת לו 11 וליטרל שההצבה נותנת לו 00 — כלומר VV מספקת את CC במובן NAE. מכיוון ש-CC שרירותית, VV מספקת את φ\varphi במובן NAE, ולכן φ∈3NAE\varphi \in \mathrm{3NAE}. ■\blacksquare

מסקנה. 3NAE≤p3COL\mathrm{3NAE}\le_p \mathrm{3COL}, ולכן 3COL\mathrm{3COL} היא NP-קשה. היא גם ב-NP (העד הוא הצביעה ff, שאורכה O(∣V∣log⁡3)O(|V|\log 3); המאמת עובר על כל הקשתות ובודק אי-מונוכרומטיות), ולכן NP-שלמה.

הרחבה (מוכחת בשיעור 11): 3COL≤p4COL\mathrm{3COL} \le_p \mathrm{4COL}

לשלמות התמונה: גם 4COL\mathrm{4COL}, ובאופן כללי kCOL\mathrm{kCOL} לכל k≥3k\ge 3 קבוע, היא NP-שלמה, ברדוקציה מ-3COL\mathrm{3COL} אל 4COL\mathrm{4COL} — רדוקציה "בתוך אותו עולם", גרף לגרף. רעיון הבנייה בשורה אחת: מוסיפים לגרף קודקוד חדש אחד ומחברים אותו בקשת לכל קודקודי VV, וכך הקודקוד החדש "שורף" את הצבע הרביעי ומשאיר לכל קודקוד מקורי בדיוק שלושה צבעים; ובכלליות מוסיפים k−3k-3 קודקודים חדשים, מחברים אותם זה לזה (קליק) וכן לכל קודקודי VV.

הרדוקציה הזו אינה נמצאת בשמונת עמודי הסיכום של השיעור הזה אלא בעמודים 2–3 של סיכום שיעור 11, ושם היא נכתבת במלואה: הבנייה, שני כיווני הנכונות, ניתוח זמן הריצה, ההוכחה ש-4COL∈NP\mathrm{4COL}\in\mathrm{NP}, מעקב מלא אחרי C5C_5, המופע השלילי K4↦K5K_4\mapsto K_5, ושלושת הניסיונות שנשברו בדרך (הזהות, קודקוד מבודד, ו"נצבע אותו בצבע רביעי"). ראו שיעור 11, משפט 2. כאן נשארת רק המסקנה שנשתמש בה: kCOL\mathrm{kCOL} היא NP-שלמה לכל k≥3k\ge 3 קבוע, בעוד ש-2COL∈P\mathrm{2COL}\in\mathrm{P} (משפט 5).


דוגמאות ותרגילים מהשיעור

דוגמה 1: כיסוי בקודקודים והמעבר לקבוצה בלתי תלויה

יהי GG הגרף מהגדרה 1: V={a,b,u1,u2,c}V=\{a,b,u_1,u_2,c\}, E={au1,bu2,u1u2,u1c,u2c}E=\{au_1,bu_2,u_1u_2,u_1c,u_2c\}, ∣V∣=5|V|=5.

  • U={u1,u2}U=\{u_1,u_2\} היא כיסוי בקודקודים, ולכן ⟨G,2⟩∈VC\langle G,2\rangle\in\mathrm{VC}.
  • לפי משפט 1, V∖U={a,b,c}V\setminus U = \{a,b,c\} חייבת להיות בלתי תלויה. נבדוק: ab∉Eab\notin E, ac∉Eac\notin E, bc∉Ebc\notin E. ✓\checkmark ואכן ⟨G,3⟩∈IS\langle G,3\rangle \in \mathrm{IS}.
  • מסלול הרדוקציה של משפט 2 קדימה: הקלט ⟨G,3⟩\langle G,3\rangle לבעיית IS\mathrm{IS} מתורגם ל-⟨G,5−3⟩=⟨G,2⟩\langle G, 5-3\rangle = \langle G,2\rangle לבעיית VC\mathrm{VC}. שתי הבעיות עונות "כן". ✓\checkmark
  • מסלול הרדוקציה אחורה (אי-דוגמה): האם ⟨G,4⟩∈IS\langle G,4\rangle \in \mathrm{IS}? הרדוקציה מתרגמת אותו ל-⟨G,5−4⟩=⟨G,1⟩\langle G,5-4\rangle=\langle G,1\rangle. אין ב-GG כיסוי בגודל 11, כי au1au_1 ו-bu2bu_2 הן קשתות זרות ואף קודקוד יחיד לא נוגע בשתיהן. לכן ⟨G,1⟩∉VC\langle G,1\rangle\notin\mathrm{VC}, ולכן — לפי הרדוקציה — גם ⟨G,4⟩∉IS\langle G,4\rangle\notin\mathrm{IS}. אכן: קבוצה בלתי תלויה בגודל 44 הייתה משאירה משלים בגודל 11 שהוא כיסוי, וראינו שאין כזה. ✓\checkmark

דוגמה 2: חתך מושרה

בגרף מהגדרה 3, עם U={b,c,f}U=\{b,c,f\}, קיבלנו חתך בגודל 77. שתי דרכי הציור שקולות: אפשר לצייר את הגרף כרגיל ולעגל את UU, ואפשר לצייר שני "עמודים" — {b,c,f}\{b,c,f\} מצד אחד ו-{a,d,e}\{a,d,e\} מהצד השני — ולראות אילו קשתות עוברות ביניהם. שבע הקשתות ab,af,ac,bd,cd,ce,efab,af,ac,bd,cd,ce,ef עוברות; bcbc ו-dede אינן.

דוגמה 3: הרצת הרדוקציה 3NAE≤pMAXCUT\mathrm{3NAE}\le_p\mathrm{MAXCUT} מקצה לקצה (עמודים 4–5 בסיכום)

תהי φ=(x1‾∨x2∨x3‾)∧(x1∨x2∨x3)∧(x1‾∨x2∨x3).\varphi = (\overline{x_1}\vee x_2\vee \overline{x_3}) \wedge (x_1\vee x_2\vee x_3) \wedge (\overline{x_1}\vee x_2\vee x_3). כאן n=3n=3 ו-m=3m=3, ולכן הפלט הוא ⟨G,n+2m⟩=⟨G,3+6⟩=⟨G,9⟩\langle G, n+2m\rangle = \langle G, 3+6\rangle = \langle G,9\rangle.

הגרף GG. שישה קודקודים: x1,x1‾,x2,x2‾,x3,x3‾x_1,\overline{x_1},x_2,\overline{x_2},x_3,\overline{x_3}.

  • קשתות כחולות (33): x1x1‾x_1\overline{x_1}, x2x2‾x_2\overline{x_2}, x3x3‾x_3\overline{x_3}.
  • קשתות אדומות של C1=(x1‾,x2,x3‾)C_1=(\overline{x_1},x_2,\overline{x_3}): x1‾x2\overline{x_1}x_2, x2x3‾x_2\overline{x_3}, x1‾ x3‾\overline{x_1}\,\overline{x_3}.
  • קשתות אדומות של C2=(x1,x2,x3)C_2=(x_1,x_2,x_3): x1x2x_1x_2, x2x3x_2x_3, x1x3x_1x_3.
  • קשתות אדומות של C3=(x1‾,x2,x3)C_3=(\overline{x_1},x_2,x_3): x1‾x2\overline{x_1}x_2, x2x3x_2x_3, x1‾x3\overline{x_1}x_3.

סה"כ 3+9=123+9=12 קשתות. שימו לב לשני זוגות קשתות מקבילות: x1‾x2\overline{x_1}x_2 מופיעה גם מ-C1C_1 וגם מ-C3C_3, וכן x2x3x_2x_3 מופיעה גם מ-C2C_2 וגם מ-C3C_3. זו בדיוק הסיבה שהבעיה הוגדרה על מולטיגרפים.

כיוון ⟹\Longrightarrow בפועל. ניקח את ההצבה V(x1)=0,  V(x2)=0,  V(x3)=1V(x_1)=0,\; V(x_2)=0,\; V(x_3)=1. נבדוק שהיא מספקת במובן NAE:

  • C1C_1: (x1‾,x2,x3‾)↦(1,0,0)(\overline{x_1},x_2,\overline{x_3}) \mapsto (1,0,0) — יש 11 ויש 00. ✓\checkmark
  • C2C_2: (x1,x2,x3)↦(0,0,1)(x_1,x_2,x_3) \mapsto (0,0,1). ✓\checkmark
  • C3C_3: (x1‾,x2,x3)↦(1,0,1)(\overline{x_1},x_2,x_3) \mapsto (1,0,1). ✓\checkmark

לכן U={x1‾,x2‾,x3}U = \{\overline{x_1},\overline{x_2},x_3\}. נספור את החתך:

  • כחולות: כל שלוש חוצות (מכל זוג בדיוק אחד ב-UU). →3\to 3
  • C1C_1: x1‾∈U\overline{x_1}\in U, x2∉Ux_2\notin U, x3‾∉U\overline{x_3}\notin U. הקשת x1‾x2\overline{x_1}x_2 חוצה, x1‾ x3‾\overline{x_1}\,\overline{x_3} חוצה, x2x3‾x_2\overline{x_3} לא (שניהם בחוץ). →2\to 2
  • C2C_2: x1∉Ux_1\notin U, x2∉Ux_2\notin U, x3∈Ux_3\in U. x2x3x_2x_3 חוצה, x1x3x_1x_3 חוצה, x1x2x_1x_2 לא. →2\to 2
  • C3C_3: x1‾∈U\overline{x_1}\in U, x2∉Ux_2\notin U, x3∈Ux_3\in U. x1‾x2\overline{x_1}x_2 חוצה, x2x3x_2x_3 חוצה, x1‾x3\overline{x_1}x_3 לא (שניהם ב-UU). →2\to 2

סך הכול 3+2+2+2=9≥93+2+2+2 = 9 \ge 9. ✓\checkmark ואכן ⟨G,9⟩∈MAXCUT\langle G,9\rangle\in\mathrm{MAXCUT}.

כיוון ⟸\Longleftarrow בפועל, ומה קורה כשההצבה גרועה. ניקח קבוצה אחרת: U′={x1,x2‾,x3}U'=\{x_1,\overline{x_2},x_3\}, שהיא "לגיטימית" במובן שמכל זוג בדיוק אחד בה, ולכן מגדירה את ההצבה V′(x1)=1,V′(x2)=0,V′(x3)=1V'(x_1)=1, V'(x_2)=0, V'(x_3)=1. נספור:

  • כחולות: 33.
  • C1C_1: x1‾∉U′\overline{x_1}\notin U', x2∉U′x_2\notin U', x3‾∉U′\overline{x_3}\notin U' — כל שלושת הקודקודים באותו צד! →0\to 0
  • C2C_2: x1∈U′x_1\in U', x2∉x_2\notin, x3∈x_3\in. →2\to 2
  • C3C_3: x1‾∉\overline{x_1}\notin, x2∉x_2\notin, x3∈x_3\in. →2\to 2

סה"כ 3+0+2+2=7<93+0+2+2 = 7 < 9. ובאמת V′V' אינה מספקת את φ\varphi במובן NAE: C1↦(0,0,0)C_1 \mapsto (0,0,0). זו בדיוק הדינמיקה שהוכחנו — פסוקית שאינה מסופקת במובן NAE "מפסידה" שתי קשתות, והחתך צונח מתחת ל-n+2mn+2m.

דוגמה 4: הרצת הרדוקציה 3NAE≤p3COL\mathrm{3NAE}\le_p\mathrm{3COL} מקצה לקצה (עמוד 8 בסיכום)

תהי φ=(x1‾∨x2∨x3‾)∧(x1∨x2∨x3)∧(x1‾∨x2‾∨x3‾).\varphi = (\overline{x_1}\vee x_2\vee \overline{x_3}) \wedge (x_1\vee x_2\vee x_3) \wedge (\overline{x_1}\vee \overline{x_2}\vee \overline{x_3}).

הגרף. 2⋅3+1+3⋅3=162\cdot 3 + 1 + 3\cdot 3 = 16 קודקודים: x1,x1‾,x2,x2‾,x3,x3‾x_1,\overline{x_1},x_2,\overline{x_2},x_3,\overline{x_3}, הקודקוד NN, ושלושה קודקודים לכל אחת מ-C1,C2,C3C_1,C_2,C_3. הקשתות: 66 שחורות (מ-NN לכל ליטרל), 33 כחולות, ו-66 אדומות לכל פסוקית, כלומר 1818; סה"כ 2727 קשתות.

הצביעה. ניקח שוב V(x1)=0,  V(x2)=0,  V(x3)=1V(x_1)=0,\;V(x_2)=0,\;V(x_3)=1. נבדוק NAE: C1↦(1,0,0)C_1 \mapsto (1,0,0) ✓\checkmark; C2↦(0,0,1)C_2 \mapsto (0,0,1) ✓\checkmark; C3=(x1‾,x2‾,x3‾)↦(1,1,0)C_3=(\overline{x_1},\overline{x_2},\overline{x_3}) \mapsto (1,1,0) ✓\checkmark.

לפי הבנייה:

  • f(N)=1f(N)=1.
  • V(x1)=0⇒f(x1)=3, f(x1‾)=2V(x_1)=0 \Rightarrow f(x_1)=3,\ f(\overline{x_1})=2.
  • V(x2)=0⇒f(x2)=3, f(x2‾)=2V(x_2)=0 \Rightarrow f(x_2)=3,\ f(\overline{x_2})=2.
  • V(x3)=1⇒f(x3)=2, f(x3‾)=3V(x_3)=1 \Rightarrow f(x_3)=2,\ f(\overline{x_3})=3.

קודקודי הפסוקיות (נסמן את קודקוד הפסוקית המתאים לליטרל ℓ\ell ב-c[ℓ]c[\ell]):

  • C1C_1: ליטרל שקיבל 11 הוא x1‾\overline{x_1} ⇒\Rightarrow f(c[x1‾])=3f(c[\overline{x_1}])=3. ליטרל שקיבל 00 — נבחר x2x_2 ⇒\Rightarrow f(c[x2])=2f(c[x_2])=2. השלישי x3‾\overline{x_3} ⇒\Rightarrow f(c[x3‾])=1f(c[\overline{x_3}])=1. בדיקה: 3≠f(x1‾)=23 \neq f(\overline{x_1})=2 ✓\checkmark; 2≠f(x2)=32 \neq f(x_2)=3 ✓\checkmark; 1≠f(x3‾)=31\neq f(\overline{x_3})=3 ✓\checkmark; המשולש {3,2,1}\{3,2,1\} ✓\checkmark.
  • C2C_2: הליטרל שקיבל 11 הוא x3x_3 ⇒\Rightarrow צבע 33; ליטרל שקיבל 00 — נבחר x1x_1 ⇒\Rightarrow צבע 22; השלישי x2x_2 ⇒\Rightarrow צבע 11. בדיקה: 3≠f(x3)=23\neq f(x_3)=2 ✓\checkmark; 2≠f(x1)=32 \neq f(x_1)=3 ✓\checkmark; 1≠f(x2)=31\neq f(x_2)=3 ✓\checkmark.
  • C3C_3: הליטרל שקיבל 11 — נבחר x1‾\overline{x_1} ⇒\Rightarrow צבע 33; הליטרל שקיבל 00 הוא x3‾\overline{x_3} ⇒\Rightarrow צבע 22; השלישי x2‾\overline{x_2} ⇒\Rightarrow צבע 11. בדיקה: 3≠f(x1‾)=23\neq f(\overline{x_1})=2 ✓\checkmark; 2≠f(x3‾)=32\neq f(\overline{x_3})=3 ✓\checkmark; 1≠f(x2‾)=21\neq f(\overline{x_2})=2 ✓\checkmark.

כל הקשתות השחורות בסדר (11 מול {2,3}\{2,3\}), כל הכחולות בסדר (22 מול 33). קיבלנו צביעה חוקית ב-33 צבעים.

הכיוון ההפוך על אותה דוגמה. נניח שקיבלנו צביעה חוקית ff ל-GG ובה, אחרי החלפת שמות צבעים, f(N)=1f(N)=1. נניח למשל שקראנו מהצביעה f(x1)=3,f(x1‾)=2,f(x2)=3,f(x2‾)=2,f(x3)=2,f(x3‾)=3f(x_1)=3,f(\overline{x_1})=2,f(x_2)=3,f(\overline{x_2})=2,f(x_3)=2,f(\overline{x_3})=3. אז ההצבה המשוחזרת היא V(xi)=1  ⟺  f(xi)=2V(x_i)=1 \iff f(x_i)=2, כלומר V(x1)=0,V(x2)=0,V(x3)=1V(x_1)=0,V(x_2)=0,V(x_3)=1 — בדיוק ההצבה שהתחלנו ממנה. עבור C3C_3: משולש הפסוקית נצבע בשלושה צבעים שונים; הקודקוד שצבוע 22 מחובר לליטרל שצבעו חייב להיות 33, כלומר לליטרל שערכו 00 — במקרה שלנו x3‾\overline{x_3}; הקודקוד שצבוע 33 מחובר לליטרל שצבעו 22, כלומר לליטרל שערכו 11 — למשל x1‾\overline{x_1}. קיבלנו ליטרל אמיתי וליטרל שקרי ב-C3C_3, כנדרש.

תרגיל מהשיעור 1: מדוע VC∈NP\mathrm{VC}\in \mathrm{NP}

שאלה ([00:31:46]). הוכיחו ש-VC∈NP\mathrm{VC}\in \mathrm{NP}. פתרון. ניתן עד U⊆VU\subseteq V המקודד ברשימה שאורכה O(∣V∣log⁡∣V∣)O(|V|\log|V|) — פולינומי בגודל הקלט. המאמת בודק (א) ש-U⊆VU\subseteq V ו-∣U∣≤k|U|\le k; (ב) לכל e∈Ee\in E ש-e∩U≠∅e\cap U\neq\emptyset. שני השלבים בזמן פולינומי. אם ⟨G,k⟩∈VC\langle G,k\rangle\in\mathrm{VC} קיים עד כזה שיתקבל, ואם לא — שום עד לא יתקבל, כי בדיקת (ב) עוברת רק על כיסויים אמיתיים.

תרגיל מהשיעור 2: האם MAXCUT\mathrm{MAXCUT} על גרפים פשוטים קשה גם היא?

שאלה ([00:52:52]). הגדרנו את MAXCUT\mathrm{MAXCUT} על מולטיגרפים. הוכיחו שהגרסה על גרפים פשוטים שקולה. פתרון (הכיוון הקל, שנמסר לבית). כל גרף פשוט הוא בפרט מולטיגרף, ולכן הגרסה למולטיגרפים "מכילה" את הגרסה הפשוטה, ומכאן שהיא לא קלה יותר. לכיוון השני יש להחליף כל צרור של tt קשתות מקבילות בין u,vu,v במבנה שקול על גרף פשוט — למשל, לשכפל את הקודקודים; זהו התרגיל שנמסר לבית.

תרגיל מהשיעור 3: מה קורה כש-kk הוא חלק מהבעיה ולא מהקלט

שאלה ([01:39:29], שאלת סטודנטית). נגדיר ISk\mathrm{IS}_k: הקלט הוא גרף בלבד, השאלה היא האם יש בו קבוצה בלתי תלויה בגודל kk, כאשר kk קבוע. מה אפשר לומר על הבעיה? פתרון מלא. ISk∈P\mathrm{IS}_k \in \mathrm{P}. אלגוריתם: עבור על כל תת-הקבוצות של VV בגודל kk ובדוק לכל אחת אם היא בלתי תלויה. מספרן הוא (∣V∣k)=∣V∣(∣V∣−1)⋯(∣V∣−k+1)k!≤∣V∣k\binom{|V|}{k} = \frac{|V|(|V|-1)\cdots(|V|-k+1)}{k!} \le |V|^k, ולכל אחת הבדיקה עולה O(k2)O(k^2) (מעבר על כל זוג בקבוצה). מכיוון ש-kk קבוע ואינו חלק מהקלט, ∣V∣k⋅k2|V|^k \cdot k^2 הוא פולינום בגודל הקלט. שימו לב היטב: אותו חישוב עצמו, כאשר kk מגיע מהקלט, אינו פולינומי — כי אז ∣V∣k|V|^k הוא אקספוננציאלי באורך הייצוג של kk.


הערות מהשיעור

  • [00:04:50]–[00:11:13] — שתי צורות הכתיבה של בעיית הכרעה. אפשר לכתוב בעיה כשפה (קבוצת קידודים) ואפשר לכתוב אותה כזוג "קלט/שאלה". אין הבדל באינפורמציה; לצורה השנייה יש יותר חופש מבני והיא נוחה במיוחד לבעיות קומבינטוריות, בניגוד לבעיות חישוביות שבהן הצורה הראשונה טבעית יותר. המרצה גם חידד לפי שאלת סטודנט שקשת בגרף לא מכוון היא זוג לא סדור, כלומר קבוצה, ולכן הכתיב e∩U≠∅e\cap U \neq \emptyset הוא חוקי.
  • [00:09:34] — מוטיבציה אמיתית. מיקום מצלמות על כל כביש במפת כבישים. "המון בעיות עולם אמיתי מתורגמות לבעיות בגרפים; ראיתם את זה בקורס אלגוריתמים".
  • [00:14:59] — אל תרוצו לשלילה. "אל תרוצו להוכחה בשלילה כשזה לא המבנה הנכון... אני יכול להבריג בורג פיליפס עם מברג שטוח או עם סכין, אבל אני לא רוצה לעשות את זה".
  • [00:15:29] — "לדעת לנסח מה אנחנו רוצים להוכיח זה לפעמים 90% מהפתרון". אם יודעים לנסח, ההוכחה "כותבת את עצמה".
  • [00:18:12] — מתי מצטטים טענה. טענת "קיים" — פותחים ונותנים שם למשתנה, כי נשתמש בו. טענת "לכל" — לא מצטטים, פשוט מפעילים על העצם הקונקרטי.
  • [00:30:14]–[00:31:46] — "לכל היותר" מול "לפחות" מול "בדיוק". ב-VC\mathrm{VC} אפשר להוסיף קודקודים ולכן "לכל היותר kk" ≡\equiv "בדיוק kk"; ב-IS\mathrm{IS} אפשר להוריד קודקודים ולכן "לפחות kk" ≡\equiv "בדיוק kk". הכיווניות הפוכה בין הבעיות, וזו טעות נפוצה.
  • [00:36:21] — שאלת סטודנט: פסוקית באורך 11 לעולם אינה מסופקת במובן NAE.
  • [00:51:48], [00:55:09] — למה ב-MAXCUT\mathrm{MAXCUT} ה-"לפחות" קריטי. בוחרים קודקודים אבל סופרים קשתות; אין שליטה עדינה על מספר הקשתות. הזזת קודקוד מדרגה גבוהה משנה את החתך דרמטית, וייתכן גרף שבו כל החתכים בגודל זוגי.
  • [01:04:19] — "אתם בתנאי חממה". בתרגילי הבית או שנותנים לכם את הרדוקציה ומבקשים להוכיח (או להפריך!) שהיא רדוקציה, או שמבקשים רדוקציה דומה מאוד למשהו שכבר ראיתם. בניית רדוקציה אמיתית מאפס עשויה לקחת שבוע-שבועיים, ולא תידרשו לכך.
  • [01:15:39] — השם MAXCUT\mathrm{MAXCUT} מטעה. בעיית ההכרעה אינה שואלת אם החתך מקסימלי, אלא אם קיים חתך בגודל לפחות kk.
  • [01:20:43]–[01:22:19] — שאלת סטודנט: האם הרדוקציה ל-MAXCUT\mathrm{MAXCUT} עובדת גם ל-kCNFk\mathrm{CNF} כללי? התשובה הכנה של המרצה: "צריך לחשוב על זה, לא חשבתי על זה" — אבל מבנה המשולש נוח במיוחד כי מספר האפשרויות זעיר, ובפסוקיות ארוכות יותר החסמים נעשים רופפים.
  • [01:24:24] — הרדוקציה אינה סימטרית. בכיוון ההפוך של ההוכחה אין "ללכת אחורה"; הנוסחה בידינו מלכתחילה והגרף נבנה ממנה, ולכן אנחנו יודעים בדיוק את מבנהו.
  • [01:32:15] — "המשחקים האלה של לכל היותר / לכל הפחות, קדימה ואחורה, הם חשובים מאוד". בכל רדוקציה יהיה כיוון אחד פחות ישיר מהשני.
  • [01:38:26]–[01:42:12] — שאלת סטודנטית (נועה): איפה ה-kk ב-kCOL\mathrm{kCOL}? התשובה: הוא חלק מה-DNA של הבעיה, לא תלוי בקלט. המרצה קרא לזה "שאלה פנטסטית", ומכאן הגיע הדיון על ISk∈P\mathrm{IS}_k \in \mathrm{P}.
  • [01:56:51] — ניתוח זמן הריצה הוא החלק הקל. "כל הרדוקציות האלה — זמן הריצה זה הדבר הכי פשוט". יש להתעכב עליו רק כשיש נקודה לא ברורה, למשל מספר הקשתות למשולש.
  • [02:02:33] — שאלת סטודנט על הצביעה: למה לא לצבוע את כל ה-xix_i ב-22 ואת כל השלילות ב-33? כי אז הקשר בין צבע לערך אמת נשבר, וליטרלים עם ערכים שונים היו מקבלים אותו צבע.
  • [00:19:33]–[00:23:45] (הקלטה 17) — "החטא הכבד". סטודנט הציע רדוקציה מ-3COL\mathrm{3COL} ל-4COL\mathrm{4COL} בניסוח "נוסיף קודקוד ונצבע אותו בצבע חדש". המרצה עצר את השיעור לחמש דקות: רדוקציה אינה באה לפתור את הבעיה, ואין לה גישה לצביעה. האלגוריתם מקבל גרף בלבד; הוא לא מחפש צביעה, לא מקבל אותה, לא יודע עליה דבר. הערבוב בין תיאור האלגוריתם לבין הוכחת הנכונות (שבה כן יש לנו צביעה ביד) הוא הטעות. ההשוואה שנתן: זה כמו לומר ברדוקציה מ-HALT\mathrm{HALT} ש-"אם המכונה עוצרת נחזיר כך" — אי אפשר לבדוק את זה. הוא הוסיף מפורשות שאין בכך נזיפה: "אי אפשר ללמוד ללכת בלי ליפול; זה safe space". הרדוקציה שעליה נסוב הדיון, 3COL≤p4COL\mathrm{3COL}\le_p\mathrm{4COL}, מוכחת במלואה ב-שיעור 11 (משפט 2 שם); כאן נשמר האסייד המתודי בלבד, מפני שהוא נכון לכל רדוקציה בקורס.
  • [00:16:53] (הקלטה 17) — כלל אצבע: אם כיוון אחד של רדוקציה יוצא קל בצורה חשודה, בדקו את הכיוון השני בידיים על דוגמה. שם K4K_4 הפילה מיד את רדוקציית הזהות מ-3COL\mathrm{3COL} ל-4COL\mathrm{4COL} (ראו שיעור 11).
  • [00:00:00]–[00:12:25] (הקלטה 17) — אסייד שנפתח בו המפגש השני. אם A∈PA\in \mathrm{P} ו-BB אינה טריוויאלית (כלומר B≠∅B\neq\emptyset ו-B≠Σ∗B\neq\Sigma^*), אז A≤pBA\le_p B. הבנייה: בוחרים b1∈Bb_1\in B ו-b0∉Bb_0\notin B, ומגדירים מכונה שמריצה על xx את המכריע הפולינומי MAM_A ומדפיסה b1b_1 אם קיבל ו-b0b_0 אחרת. הנקודה העדינה: b0,b1b_0,b_1 עשויים להיות ארוכים מאוד, אבל אורכם אינו תלוי בקלט (הם נקבעו לפני שראינו את xx, והמכונה "מחזיקה אותם בבטן"), ולכן כתיבתם היא זמן קבוע כפונקציה של ∣x∣|x|. המשמעות: רדוקציות זמן פולינומי הן כלי גס מדי מכדי להבדיל בין בעיות בתוך P\mathrm{P} — מבחינתן כל הבעיות ב-P\mathrm{P} שקולות. זה מעיד על הכלי, לא על P\mathrm{P} (בתוך P\mathrm{P} בהחלט יש היררכיית קושי, לפי משפטי ההיררכיה). הטענה עצמה נכתבת במלואה ב-שיעור 11 (משפט 1 שם, עמוד 1 בסיכום ההוא); כאן היא מובאת כהערה בלבד.

פערים בין הסיכום להקלטה

  • מקור: עמוד 1 בסיכום. הפער: שרשרת התזכורת נקראת "SAT≤pIS\mathrm{SAT}\le_p\mathrm{IS} — נראה בבית", בעוד שבהקלטה ([00:01:06]) המרצה מתאר את הרדוקציה שנמסרה לבית כרדוקציה מ-3SAT\mathrm{3SAT} ל-IS\mathrm{IS}. ההכרעה: שתי הטענות נכונות (לפי טרנזיטיביות של ≤p\le_p ובגלל SAT≤p3SAT\mathrm{SAT}\le_p\mathrm{3SAT}); בגוף הקובץ נרשמה השרשרת עם 3SAT≤pIS\mathrm{3SAT}\le_p\mathrm{IS} וצוין שהסיכום כותב SAT\mathrm{SAT}.
  • מקור: עמוד 4 בסיכום, רשימת קשתות החתך בדוגמה. הפער: הכתב מאפשר לקרוא גם bcbc וגם bdbd. ההכרעה: ההקלטה ([00:48:37]–[00:49:09]) מכריעה חד-משמעית — bcbc אינה בחתך (שני קצותיה ב-UU) ו-bdbd כן. נרשם bdbd.
  • מקור: עמוד 8 בסיכום. הפער: הסיכום מסתיים בסוף כיוון ⟹\Longrightarrow של 3NAE≤p3COL\mathrm{3NAE}\le_p\mathrm{3COL}; כיוון ⟸\Longleftarrow אינו מופיע כלל. בהקלטה ([02:09:01], [02:11:40]) המרצה אמר שהכיוון השני נשאר לבית והספיק רק לשרטט אותו בשתי משפטים לפני סוף ההקלטה. ההכרעה: הכיוון הושלם כאן במלואו לפי הסקיצה (WLOG על f(N)=1f(N)=1; משולש הפסוקית מקבל שלושה צבעים שונים; הקודקוד שצבעו 22 כופה ליטרל בערך 00 והקודקוד שצבעו 33 כופה ליטרל בערך 11), וסומן כהשלמה.
  • מקור: סיכום השיעור מול הקלטה 17. הפער: הרדוקציה 3COL≤p4COL\mathrm{3COL}\le_p\mathrm{4COL} (הקלטה 17, [00:13:09]–[00:38:29]) אינה מופיעה באף אחד משמונת עמודי הסיכום של השיעור הזה. ההכרעה: הפער נסגר — הרדוקציה נמצאת בעמודים 2–3 של סיכום שיעור 11 (תחת הכותרת הירוקה "4COL הוא NP שלם", עם הבנייה הממוסגרת של G^\hat G ו-v^\hat v ושני הכיוונים). היא שייכת אפוא לשיעור 11 ונכתבת שם במלואה; בקובץ הזה נשארת רק הפניה קצרה בסוף סעיף המשפטים, בלי בנייה ובלי הוכחה, וכן דוגמת ההרצה שלה הוסרה מכאן.
  • מקור: מקורות הקובץ. הפער: הקלטה 17 סומנה בעבר coverage: partial בטענה שחלק ממנה שייך לשיעור הזה. זה שגוי: כל תוכנה — הטענה על רדוקציות משפות ב-P\mathrm{P} ([00:00:00]–[00:12:25]), 3COL≤p4COL\mathrm{3COL}\le_p\mathrm{4COL} ([00:13:09]–[00:38:29]) ו-SUBSET SUM ([00:38:29] ואילך) — הוא חומר של שיעור 11. ההכרעה: סומנה coverage: none, והשיעור הזה נשען כעת על הקלטה 16 בלבד. ממנה נלקחו רק אסידים פדגוגיים: "החטא הכבד" ([00:19:33]–[00:23:45]), כלל האצבע על בדיקת הכיוון השני ([00:16:53]), האסייד על גסות ≤p\le_p ([00:00:00]–[00:12:25]) והאי-דוגמה בהגדרה 4 בדבר צביעה שאינה על ([00:15:50]) — כולם מסומנים במפורש כ"הקלטה 17".
  • מקור: רמת הביטחון. הפער: לאחר הוצאת הקלטה 17 נותרו שני מקומות שאינם נשענים על שני מקורות מסכימים: כיוון ⟸\Longleftarrow של משפט 6, שאינו בסיכום כלל והושלם כאן מסקיצה בת שתי שורות בהקלטה 16 ([02:11:40]); וארבע ההערות שנלקחו מהקלטה 17, שאינה מקור של השיעור הזה. ההכרעה: גוף השיעור (הגדרות 1–4, משפטים 1–6, דוגמאות 1–4) מכוסה במלואו גם בסיכום וגם בהקלטה 16 ולכן הוא איתן; אך משום שני החריגים הללו הורד confidence מ-high ל-medium.
  • מקור: ההקלטה מול הסיכום. הפער: הדיון על ISk∈P\mathrm{IS}_k\in \mathrm{P} ועל kk כחלק מה-DNA של הבעיה ([01:38:26]–[01:42:12]) אינו בסיכום. ההכרעה: נכלל, כי הוא מבהיר את ההגדרה של kCOL\mathrm{kCOL} שכן מופיעה בסיכום (עמוד 7).
  • מקור: ההקלטה, [01:03:18]. הפער: בהקלטה נשמע המספר "28" כתשובה ליעד של הדוגמה. ההכרעה: זו טעות של סטודנט שהמרצה תיקן מיד; היעד הנכון הוא n+2m=3+6=9n+2m = 3+6 = 9, כפי שרשום בסיכום (עמוד 4: "(G,9)(G,9)").
  • מקור: ההקלטה, [00:07:24]. הפער: תמלול משובש בהגדרת VC\mathrm{VC} ("אפשר בגודל KK ואפשר בגודל KK"). ההכרעה: לפי ההקשר והסיכום, הכוונה היא "אפשר לכתוב 'בגודל לכל היותר kk' ואפשר 'בגודל בדיוק kk' — זה לא משנה", וההצדקה ניתנה מאוחר יותר ב-[00:30:45]. נרשמה הגרסה "לכל היותר kk" כפי שבסיכום.
  • מקור: סימון. הפער: הסיכום כותב את בעיות הצביעה כ-"kkColoring", "33Col", "22Col". ההכרעה: בגוף הקובץ נעשה שימוש בכתיב הזקוף האחיד kCOL,3COL,2COL\mathrm{kCOL},\mathrm{3COL},\mathrm{2COL} לשם עקביות עם שאר הקורפוס; המשמעות זהה.

סיכום ונקודות למבחן

מה חייבים לזכור בעל פה

  1. ההבחנה: UU כיסוי בקודקודים   ⟺  \iff V∖UV\setminus U בלתי תלויה. מכאן IS≤pVC\mathrm{IS}\le_p\mathrm{VC} על ידי ⟨G,k⟩↦⟨G,∣V∣−k⟩\langle G,k\rangle\mapsto\langle G,|V|-k\rangle (ובאותו אופן גם הכיוון ההפוך VC≤pIS\mathrm{VC}\le_p\mathrm{IS}).
  2. סיפוק במובן NAE: בכל פסוקית יש ליטרל בערך 11 וגם ליטרל בערך 00. 3NAE\mathrm{3NAE} ו-4NAE\mathrm{4NAE} הן NP-קשות (דרך 3SAT≤p4NAE≤p3NAE\mathrm{3SAT}\le_p\mathrm{4NAE}\le_p\mathrm{3NAE}).
  3. 3NAE≤pMAXCUT\mathrm{3NAE}\le_p\mathrm{MAXCUT}: קודקוד לכל ליטרל; קשת כחולה xixi‾x_i\overline{x_i}; משולש אדום לכל פסוקית; יעד n+2mn+2m.
  4. 3NAE≤p3COL\mathrm{3NAE}\le_p\mathrm{3COL}: קודקוד לכל ליטרל; קודקוד מיוחד NN המחובר לכולם; משולש לכל פסוקית שקודקודיו מחוברים לליטרלים המתאימים. f(N)=1f(N)=1, וצבעים 2,32,3 מייצגים אמת/שקר.
  5. 2COL∈P\mathrm{2COL}\in \mathrm{P} (שקילות לדו-צדדיות).
  6. שלוש הבעיות VC,MAXCUT,3COL\mathrm{VC},\mathrm{MAXCUT},\mathrm{3COL} הן NP-שלמות (קשיות + שייכות ל-NP עם עד קצר) — אלה תוצאות השיעור הזה.
  7. לא מהשיעור הזה, אבל שייך לאותה משפחה: 3COL≤p4COL\mathrm{3COL}\le_p\mathrm{4COL} (קודקוד חדש אחד המחובר לכל הגרף; בכלליות k−3k-3 קודקודים חדשים המחוברים זה לזה ולכל VV), ומכאן ש-kCOL\mathrm{kCOL} היא NP-שלמה לכל k≥3k\ge3 קבוע. הרדוקציה והוכחתה בשיעור 11, משפט 2 — למדו אותה משם.

מלכודות סטנדרטיות

  • כיוון הרדוקציה. A≤pBA\le_p B פירושו BB קשה לפחות כמו AA. כדי להוכיח שבעיה חדשה קשה, מבצעים רדוקציה אליה, לא ממנה.
  • "לפחות" מול "לכל היותר". ב-MAXCUT\mathrm{MAXCUT} אי אפשר להחליף "לפחות" ב-"בדיוק"; ב-VC\mathrm{VC}/IS\mathrm{IS} כן, אבל בכיוונים הפוכים. אל תעתיקו את ההצדקה מבעיה לבעיה בלי לבדוק.
  • רדוקציה אינה פותרת. האלגוריתם אינו רשאי להתייחס לפתרון (הצבה, צביעה, קבוצה) — רק הוכחת הנכונות רשאית. ערבוב בין השניים הוא הטעות שהמרצה הדגיש הכי חזק בשיעור.
  • kk בקלט מול kk בבעיה. kCOL\mathrm{kCOL} אינה מקבלת kk בקלט; IS\mathrm{IS} כן. שינוי הסטטוס הזה יכול להעביר בעיה מ-NP-שלמה ל-P\mathrm{P}.
  • החסם הדו-כיווני. בכיוון ההפוך של 3NAE≤pMAXCUT\mathrm{3NAE}\le_p\mathrm{MAXCUT} חייבים חסם עליון (≤2\le 2 אדומות לפסוקית) כדי לכפות חסם תחתון על הכחולות. ניסיון להוכיח את הכיוון הזה בעזרת "לפחות" בלבד ייתקע.
  • מולטיגרף. בלי קשתות מקבילות הספירה "כל פסוקית תורמת בדיוק 22" קורסת כשאותו זוג ליטרלים מופיע בשתי פסוקיות.
  • הצביעה תלויה בהצבה. אין לצבוע את כל המשתנים החיוביים באותו צבע.

צ'ק-ליסט: אחרי השיעור הזה אני יודע ל...

  • לכתוב בעיית הכרעה בשתי הצורות (שפה / קלט-שאלה) ולהסביר למה הן שקולות.
  • להוכיח את ההבחנה כיסוי ↔\leftrightarrow בלתי תלויה בשני הכיוונים, במבנה נכון ובלי שלילה מיותרת.
  • לבנות רדוקציה מלאה: אלגוריתם, ניתוח זמן ריצה מנומק, והוכחת x∈A  ⟺  f(x)∈Bx\in A\iff f(x)\in B בשני הכיוונים.
  • לתאר את גרף ה-MAXCUT\mathrm{MAXCUT} ואת גרף ה-3COL\mathrm{3COL} בעל פה מתוך נוסחת 3CNF\mathrm{3CNF}, כולל היעד n+2mn+2m.
  • להריץ מופע קונקרטי דרך כל רדוקציה בשני הכיוונים ולספור קשתות/צבעים בפועל.
  • להסביר למה 2COL∈P\mathrm{2COL}\in \mathrm{P} (ולדעת שהקשיות של kCOL\mathrm{kCOL} לכל k≥3k\ge3 מוכחת בשיעור 11).
  • לזהות "רדוקציה" פסולה שמסתכלת על הפתרון, ולהפריך רדוקציה מוצעת בעזרת דוגמה נגדית קטנה (כמו K4K_4).

הסיכום הכתוב שעליו מבוסס קובץ זה הוא של גיא סופר.

Questions left open

  • עמוד 1 בסיכום: שורת התזכורת נקראת SAT ≤p IS, בעוד שבהקלטה הרדוקציה שניתנה בבית תוארה כרדוקציה מ-3SAT; שתי הטענות נכונות ובגוף הקובץ נרשמו שתיהן.
  • עמוד 8 בסיכום: הפסוקית השלישית בדוגמת הצביעה נקראה כ-(¬x₁ ∨ ¬x₂ ∨ ¬x₃), בעוד שבדוגמת MAXCUT בעמוד 4 הפסוקית השלישית היא (¬x₁ ∨ x₂ ∨ x₃); ייתכן שמדובר בשתי דוגמאות שונות בכוונה.
  • עמוד 8 בסיכום מסתיים אחרי כיוון ⇐ בלבד של 3NAE ≤p 3COL; הכיוון השני הושלם כאן לפי הסקיצה שבהקלטה ב-[02:11:40].
  • עמוד 4 בסיכום: ברשימת קשתות החתך בדוגמה קשה להכריע בין bd ל-bc; ההקלטה [00:48:37] מכריעה שהקשת היא bd ושהקשת bc אינה בחתך.