בקצרה
- השיעור מוכיח את משפט קוק–לוין: היא NP-complete. זו הבעיה ה-NP-שלמה הראשונה, וממנה נגזרות כל האחרות ברדוקציות.
- מה שצריך להראות הוא: לכל שפה קיימת רדוקציית זמן פולינומי . שימו לב לסדר הכמתים — לא "יש רדוקציה אחת שטובה לכל השפות", אלא לכל שפה רדוקציה משלה.
- הקושי: על לא ידוע דבר מלבד היותה ב-NP. כל מה שיש ביד הוא מכונה מוודאת , פולינומים , והקלט עצמו. את העד אין ביד — ובדיוק את אי-הידיעה הזאת אנחנו הופכים לחופש של ההשמה.
- הרעיון: לקודד את טבלת החישוב (tableau) של על — כל שורה היא קונפיגורציה שלמה, שורה לכל צעד זמן — במשתנים בוליאניים , ולבנות נוסחת CNF שנוסחה שספיקה אם ורק אם קיים שעליו מקבלת.
- ליבת ההוכחה: קידוד נאיבי של "שורה נובעת משורה " דורש מספר מעריכי של גרירות ( מילויים אפשריים לשורה). המוצא הוא לוקליות החישוב במכונת טיורינג: בין שתי שורות עוקבות משתנים לכל היותר שלושה תאים סמוכים, ולכן די לבדוק שכל חלון 2×3 בטבלה חוקי — בדיקה מקומית שכופה נכונות גלובלית.
- חשבון הגודל: משתנים ו- פסוקיות עד לקבועים התלויים רק ב-, כאשר — כלומר פולינומי ב-, ולכן הרדוקציה רצה בזמן פולינומי.
- שני הרעיונות שכדאי לקחת מהשיעור, גם מעבר למבחן [01:14:55]: מידול בעיה כנוסחת CNF, והחלפת גרירה גלובלית בבדיקה מקומית בגודל קבוע.
רקע ותלויות
הקובץ הזה נשען על ארבעה דברים שכבר נלמדו; כדי לא לשלוח אתכם אחורה, כולם מנוסחים כאן במלואם.
1. מודל המכונה (ראו שיעור 4). מכונת טיורינג דטרמיניסטית היא כאשר קבוצת המצבים, מצב ההתחלה, המצבים המקבלים (נסמן ב- את המצב המקבל, וניתן להניח שהוא יחיד), אלפבית הקלט, אלפבית הסרט הכולל את הסימן הריק , ו- פונקציית המעברים. נסמן ב- את מספר הצעדים של על הקלט , וב- את מספר התאים בהם ביקרה.
הערה: גם הסיכום וגם ההרצה אינם רושמים את החמישייה/השישייה במפורש בשיעור הזה. רשמנו אותה כאן עם בפנים, כי מופיע בנוסחה ואי אפשר בלעדיו.
2. ההגדרה של NP דרך מוודא (ראו שיעור 6). אם ורק אם קיימת מכונת טיורינג דטרמיניסטית וקיימים פולינומים כך ש:
- לכל קלט מתקיים ;
- לכל : כך ש- מקבלת את .
זו בדיוק נקודת הפתיחה של ההוכחה. המרצה מדגיש [00:04:15] שאפשר היה לעבוד גם עם ההגדרה דרך מכונה אי-דטרמיניסטית, וההוכחה דומה מאוד; בחרנו בדטרמיניסטית כי "אני יודע בכל צעד מה קורה בצעד הבא", וזה בדיוק מה שמאפשר את טיעון הדומינו בכיוון השני של ההוכחה.
3. רדוקציית זמן פולינומי, NP-קושי ו-NP-שלמות (ראו שיעור 7). פירושו: קיימת פונקציה הניתנת לחישוב בזמן פולינומי כך שלכל מתקיים . כיוון החץ: אומר ש- קשה לפחות כמו — כלומר הוא הבעיה הקשה. בהקלטה, כמו בכל דיבור חופשי, הכיוון מתהפך לפעמים; החץ הוא הקובע.
היא NP-hard אם לכל מתקיים . היא NP-complete אם בנוסף .
4. ונוסחאות CNF (ראו שיעור 7). היא שפת נוסחאות הפסוקים הספיקות; אנחנו נבנה כאן נוסחת CNF, כלומר קוניונקציה של פסוקיות (דיסיונקציות של ליטרלים). הראנו כבר ש-: העד הוא ההשמה עצמה, אורכה לינארי בגודל הנוסחה, ובדיקת ההשמה היא לינארית.
5. בעיית שמונה המלכות (ראו שיעור 7). המרצה חוזר אליה שוב ושוב [00:09:27], [00:20:03] וקורא לה "משפט קוק–לוין בקטן": לקחנו לוח שחמט, הגדרנו משתנה בוליאני לכל משבצת ("יש מלכה / אין מלכה"), וכתבנו שלוש תת-נוסחאות — לשורות, לעמודות ולאלכסונים — וחיברנו ב-. כאן נעשה בדיוק את אותו הדבר, רק עם עוד אינדקסים ועם ארבע תת-נוסחאות במקום שלוש. שווה לרענן אותה לפני שקוראים הלאה.
נקודת מפתח מתודית מההרצה [00:05:19]–[00:06:52]. לפני שבונים משהו, כדאי לשאול שאלה תחבירית: מי המשתנים שיש לי ביד? הכלל ש"קיים מביא לי משתנים, ולכל מוחק אותם בסוף הסקופ" (כמו פתיחת בלוק בקוד) נותן: יש לי את , את , את — ובזמן ריצת הרדוקציה גם את , כי הרדוקציה מקבלת את כקלט. אין לי את , כי הוא נמצא בתוך "לכל " שנסגר. כל הבנייה שלהלן מקפידה על הכלל הזה, ואפשר לבדוק אותה בכל שלב בשאלה "האם השתמשתי כרגע רק במה שיש לי ביד?".
הגדרות
הגדרה 1: קידוד קונפיגורציה כשורה אחת
ניסוח. תהי מכונת טיורינג בקונפיגורציה שבה תוכן הסרט הוא , המצב הוא והראש מצביע על התא . נקודד את הקונפיגורציה כמחרוזת אחת מעל האלפבית : כלומר: סימן המצב נדחף לתוך המחרוזת מיד לפני התא שהראש קורא.
אינטואיציה. בשיעורים על חישוביות ציירנו את הסרט, סימנו את מיקום הראש במשולש קטן, ורשמנו את המצב מחוץ לסרט [00:10:29]. עכשיו אנחנו רוצים הכול על מחרוזת אחת, כי מחרוזת אחת אפשר לשים בשורה של טבלה. אז במקום המשולש והמצב שבחוץ, אנחנו "מסכמים" ששם המצב שנכתב בתוך המחרוזת מסמן גם את המצב וגם את מיקום הראש: הראש עומד על התו שמימין לו. שימו לב שהקידוד מאריך את המחרוזת בתא אחד ביחס לסרט — זהו ה- שיופיע ברוחב הטבלה.
דוגמה (מהלוח, עמוד 1 בסיכום). סרט , הראש על ה-, המצב . הקידוד: נניח : המכונה כותבת במקום ה- וזזה ימינה. הקונפיגורציה הבאה מקודדת כ- כלומר שני התאים ששינו את תוכנם הם התא של המצב והתא שמימינו — הם התחלפו: .
דוגמה נגדית (מה זה לא). המחרוזת אינה קידוד של קונפיגורציה: מופיעים בה שני סימני מצב, ולקונפיגורציה יש מצב אחד ומיקום ראש אחד. גם המחרוזת (בלי אף סימן מצב) אינה קידוד חוקי. שתי הפסילות האלה הן בדיוק מה ש- ו- יצטרכו לדאוג לו.
הגדרה 2: טבלת החישוב (tableau)
ניסוח. בהינתן וקלט , טבלת החישוב היא מטריצה שבה השורה ה- היא הקידוד (לפי הגדרה 1) של הקונפיגורציה של על אחרי צעדים. שורה 1 היא הקונפיגורציה ההתחלתית.
אינטואיציה. זה בדיוק מה שכתבתם במחברת כשלמדתם מכונות טיורינג: ציירתם את הסרט, הזזתם את הראש, מחקתם, כתבתם — ושרטטתם את הסרט מחדש [00:09:57]. הטבלה היא פשוט כל השרטוטים האלה זה מתחת לזה. היא מכילה את כל האינפורמציה על הריצה: תוכן הסרט, מיקום הראש והמצב בכל רגע [00:08:56] — ולכן אפשר לבחון בעזרתה אם הריצה היא ריצה חוקית ומקבלת. חשוב: אלה לא כל הקונפיגורציות האפשריות, אלא רק אלה שהריצה באמת עברה דרכן [00:10:29].
המידות. נניח עם כלעיל, ויהי קלט באורך . הקלט של הוא שאורכו , ולכן מספר הצעדים חסום ב-. נסמן ואז:
- מספר השורות בטבלה הוא — שורה לכל צעד זמן [00:13:43].
- מספר העמודות הוא . למה פעמיים? [00:15:18]–[00:15:49] הזמן חוסם את המקום, ולכן הראש לא מתרחק יותר מ- תאים מנקודת ההתחלה — אבל אינני יודע מראש לאיזה כיוון הוא ילך, ולכן אני שומר תאים שמאלה ו- ימינה. ה- הוא התא שבו נכתב סימן המצב [00:17:59].
מסקנה: הראש מתחיל בעמודה , מבצע לכל היותר צעדים, ולכן סימן המצב תמיד נמצא בעמודה עם — לעולם לא בעמודות הקצה. זו עובדה שנשתמש בה בהוכחת הלמה המרכזית.
הערה חשובה — הטבלה דמיונית. המרצה חוזר על כך חמש פעמים לפחות [00:16:25], [00:18:31], [00:32:31]: הרדוקציה לא בונה את הטבלה ולא ממלאת אותה, כי כדי למלא אותה היה צריך את ואת אין לנו. הטבלה היא אובייקט שאנחנו חושבים עליו כדי לכתוב את הנוסחה; הרדוקציה כותבת רק נוסחה.
הגדרה 3: האלפבית והמשתנים
ניסוח. נסמן — קבוצת כל הסימנים שיכולים להופיע בתא של הטבלה [00:21:07]. (הסימנים מופיעים במפורש כי הם התווים של העד ; אם האיחוד מיותר, ואינו מזיק.) שימו לב ש- תלוי רק ב- ולא ב-.
יהי . לכל — אינדקס השורה, כלומר צעד הזמן — ולכל — אינדקס העמודה, כלומר התא — ולכל , נגדיר משתנה בוליאני יחיד .
אינטואיציה — וזו הנקודה שבה נופלים. תחבירית, הוא פשוט משתנה. אין לו "משמעות"; שלושת האינדקסים הם רק שם, בדיוק כמו שאפשר לכתוב סכום עם שלושה אינדקסים [00:23:17]. סמנטית, כשתגיע השמה , נחשוב על כאילו היא אומרת: "בתא של הטבלה כתוב הסימן " [00:24:19]. שאלת סטודנט בהרצה [00:23:47] — "מה זה ?" — קיבלה תשובה בשני שלבים, ושווה לזכור את שניהם: פורמלית אין מה להסביר, זה אינדקס רץ על ; אינטואיטיבית זה הסימן שנטען שכתוב בתא.
מה עוד לא נאמר. כרגע ההשמה יכולה לתת גם ל- וגם ל- עם — כלומר "בתא כתובים שני סימנים" [00:24:52]. שום דבר עדיין לא אוסר את זה. בדיוק בשביל זה קיימת .
דוגמה. בטבלה של הדוגמה מסעיף "דוגמאות ותרגילים" למטה, בתא כתוב ; כלומר בהשמה המתאימה ו- לכל .
הגדרה 4: חלון וחלון חוקי
ניסוח. חלון בטבלה הוא תת-מטריצה של שתי שורות סמוכות ושלוש עמודות סמוכות. מאנדקסים חלון לפי התא השמאלי-עליון שלו [01:05:18]: החלון מורכב מהתאים ותכולתו היא שישייה לפי הסדר
שישייה נקראת חוקית אם קיימת ריצה כלשהי של שבתיאור הטבלאי שלה מופיע חלון כזה [00:57:01]. שקול ומעשי יותר: השישייה חוקית אם ורק אם היא נובעת מ- — כלומר קיימות קונפיגורציה ועוקבתה ומיקום עמודה שבו החלון של שתי השורות המקודדות הוא בדיוק השישייה — או שהיא העתקה של שורה שמכילה מצב סופי [01:03:44]. נסמן את קבוצת השישיות החוקיות .
אינטואיציה. "חלון חוקי" הוא בדיקת שפיות מקומית: האם מה שרואים דרך חור המנעול הזה יכול היה לקרות במכונה ? התשובה תלויה רק ב-, כלומר רק ב-, ולא ב-, ולא ב- [01:06:22]. לכן אפשר לחשב את פעם אחת, עוד לפני שראינו את הקלט, על ידי מעבר על כל השישיות.
כמה שישיות יש? — לא . הסטודנט בהרצה ניחש " מעל " ותוקן [00:58:38]: השישיות אינן חייבות להיות מורכבות מסימנים שונים, ולכן זהו שש פעמים. חשוב לא להתבלבל בבסיס ובמעריך.
כלל הריפוד (התוספת "העתקה של מצב סופי"). חסם הזמן הוא חסם מלמעלה; אף אחד לא הבטיח שהמכונה תרוץ בדיוק צעדים [01:03:12]. אם המכונה עצרה במצב מקבל אחרי צעדים, אין לנו שורות להמשיך איתן. הפתרון: מכריזים שהעתקה מדויקת של שורה שמכילה היא מעבר חוקי, וממלאים את שאר הטבלה באותה שורה שוב ושוב. המרצה מלווה את זה בבדיחה על ההוכחה של איש מדעי המחשב ש"כל האי-זוגיים ראשוניים": 3 ראשוני, 5 ראשוני, 7 ראשוני, 7 ראשוני, 7 ראשוני… [01:04:15]. זה בדיוק מה שקורה כאן, וכאן זה חוקי.
הערה: בהרצה נאמר כלל הריפוד רק עבור . אם המכונה עוצרת במצב דוחה לפני הזמן, אין שישייה חוקית שממשיכה את השורה ולכן לא תסופק — וזה בסדר גמור, כי במקרה כזה אנחנו ממילא רוצים ש- תהיה לא-ספיקה. אפשר גם להרחיב את כלל הריפוד לכל מצב עוצר; אז תסופק אבל לא, והמסקנה זהה.
דוגמה נגדית לחוקיות. אם אף פעם לא זזה שמאלה, אז החלון אינו חוקי: סימן המצב בשורה התחתונה נמצא שמאלה מהמקום שבו היה, כלומר הראש זז שמאלה [01:02:11].
משפטים והוכחות
משפט 1: משפט קוק–לוין
היא NP-complete. כלומר: (א) , ו-(ב) לכל מתקיים .
סדר הכמתים — אזהרה מפורשת מההרצה [00:01:08]. הטענה היא "לכל שפה ב-NP קיימת רדוקציה ל-", ולא "קיימת רדוקציה שמתאימה לכל השפות". לכל שפה תהיה רדוקציה משלה, שנבנית מהמוודא הספציפי שלה. זה מקור נפוץ מאוד לשגיאה בניסוח.
חלק (א):
בהינתן נוסחה מעל משתנים, העד הוא ההשמה המספקת . אורכה , כלומר פולינומי (אפילו לינארי) בגודל הקלט; ובדיקה שההשמה מספקת נעשית במעבר אחד על הנוסחה, בזמן . לכן . זה הוכח כבר בשיעור 7 והובא כאן כדי לסגור את הטענה; הסיכום עוצר בסוף עמוד 3 על " היא NP-קשה" ואינו חוזר על החלק הזה.
חלק (ב): הבנייה
תהי . לפי ההגדרה יש בידינו , ו- המקיימים את שני התנאים מסעיף "רקע ותלויות". נסמן , , , ונשתמש במשתנים של הגדרה 3. נבנה
הרעיון המנחה, שכדאי להחזיק בראש לכל אורך הבנייה [00:07:56]: "**" פירושו "קיים ", ו" ספיקה" פירושו "קיימת השמה". אנחנו רוצים לגרור את הכמת הקיומי הזה מצד אחד לצד השני. כל ארבע התת-נוסחאות נועדו לוודא שהחופש היחיד שנשאר להשמה הוא בדיוק החופש בבחירת .
— בכל תא בדיוק סימן אחד
מה זה אוכף ולמה. הקוניונקציה החיצונית רצה על כל תא בטבלה. עבור תא נתון: הפסוקית הראשונה, , אומרת שלפחות אחד מהסימנים מקבל אמת בתא הזה. היא לבדה לא מספיקה — היא לא אוסרת שניים [00:29:23]. לכן באה הקבוצה השנייה של פסוקיות: לכל זוג סימנים שונים , הפסוקית אומרת שלא ייתכן ששניהם אמת — כלומר לכל היותר אחד. יחד: בדיוק אחד. זו בדיוק אותה תבנית "בחר בדיוק אחד מבין " שראינו בבעיית המלכות [00:29:55].
למה בכלל צריך את זה? שאלת סטודנטית בהרצה [00:34:09]: למה אסור שיהיו שניים? כי אני רוצה טבלה שמתארת סרט של מכונה, ובכל תא בסרט של מכונת טיורינג רשום בדיוק תו אחד, ובכל קונפיגורציה יש בדיוק מצב אחד. בלי האילוץ הזה, "הטבלה" שההשמה מתארת אינה טבלה בכלל.
טענה 1.1. לכל השמה המספקת את , ולכל , קיים יחיד כך ש-. ולהפך: לכל מילוי של הטבלה בסימנים מ- קיימת השמה המספקת את ומתאימה לו.
הוכחה. כיוון ראשון: היא קוניונקציה, ולכן השמה מספקת מספקת כל אחד מהאיברים; נקבע . האיבר המתאים הוא עצמו קוניונקציה של שני חלקים. מהחלק הראשון, , נובע שקיים עם . מהחלק השני, לכל מתקיים , כלומר לא ייתכן ש-. ביחד: קיים ואין שניים, כלומר קיים יחיד [00:33:04]–[00:33:35].
כיוון שני: בהינתן מילוי , נגדיר אם ורק אם . כל פסוקית מהצורה מסופקת (על ידי ), וכל פסוקית מסופקת כי לכל היותר אחד מבין שווה ל-.
הערה: בהרצה הכיוון השני נאמר במשפט אחד — "ודרך אגב גם הפוך" [00:34:09] — ומיד אחריו הובהר למה הוא חשוב: "להפך חשוב בגלל הכיוון השני של הרדוקציה" [00:35:46]. בלי הכיוון השני אי אפשר להסיק מ"" ש- ספיקה, כי צריך להמיר טבלה אמיתית להשמה. הפירוט לעיל הוא מה שההערה הזאת מייצגת.
חשוב מה לא אומרת [00:32:01]: היא מבטיחה טבלה — אבל טבלה של ג'יבריש. שום דבר בה לא קושר את הטבלה למכונה או לקלט . את זה עושות שלוש הנוסחאות הבאות.
— השורה הראשונה היא הקונפיגורציה ההתחלתית
יהי . אז
מה זה אוכף ולמה. בשורה 1 אני יודע כל תו — חוץ מ- [00:36:22]:
- העמודות : תאים ריקים. אלה ה- תאים שמשמאל לראש, השמורים למקרה שהראש ילך שמאלה [00:37:56].
- עמודה : — כאן מתחיל הראש.
- עמודות עד : הקלט , תו אחר תו.
- עמודות עד : העד . כאן איני יודע מה כתוב, אבל אני כן יודע שני דברים: את האורך ואת זה שכל תא הוא או [00:39:31]. לכן במקום ליטרל יחיד יש פה פסוקית .
- שאר העמודות עד : תאים ריקים.
זו הנקודה שבה נכנס החופש. כל שאר הקוניונקציות הן ליטרלים יחידים ולכן כופות ערך; רק בתאי יש בחירה. לכן להשמה המספקת את יש בדיוק ביטי חופש, והם מתאימים אחד לאחד לתווי [00:43:23]. המרצה מדגיש: "זה החופש שאני רוצה, כי אני רוצה לקשר בין 'קיים ' ל'קיימת השמה'".
מה נדרש כדי לבנות אותה? [00:42:18] את עצמו (בשביל ), את , ואת הפולינומים ו-. הכול ביד. שימו לב לניואנס שהמרצה מדגיש כבדיקת שפיות: ב- השתמשנו רק ב- ולא ב- עצמו; כאן אנחנו באמת צריכים את עצמו.
שאלה מהכיתה [01:03:12] סביב אילוץ המצב: למה לא צריכה לומר גם "אין מצב אחר בשורה הראשונה"? כי כבר אומרת שבכל תא כתוב בדיוק סימן אחד, וכל עמודה בשורה 1 קיבלה כאן ערך מפורש. עקרון העבודה הוא: כל תת-נוסחה עומדת בפני עצמה ודורשת רק את מה שהיא צריכה; העיקר שהן לא סותרות זו את זו [00:45:01].
— איפשהו בטבלה יש מצב מקבל
מה זה אוכף ולמה. זו פסוקית אחת ארוכה: קיים תא בטבלה שכתוב בו . זה הכול [00:44:30].
שתי הערות דקות.
- אין צורך לדרוש יחידות — "בתא שכתוב בו לא כתוב שום דבר אחר" מובטח כבר על ידי [00:45:31].
- מותר שיופיעו כמה תאים עם , ואף שכיח שכן: בגלל כלל הריפוד, ברגע שהגענו למצב מקבל אנחנו מעתיקים את השורה עד סוף הטבלה, ולכן יופיע בכל שורה משם והלאה. יחידות נדרשת ברמת התא, לא ברמת הטבלה.
— הלב של ההוכחה
קודם: למה הקידוד הנאיבי נכשל. [00:48:06]–[00:50:11] אינטואיטיבית אני רוצה לומר: "אם השורה הראשונה מולאה כך — אז השורה השנייה מולאה כך". גרירות אינן מפחידות אותנו, כי שקול ל- ולכן ניתן להמרה ל-CNF. הבעיה היא הכמות: כמה מילויים אפשריים יש לשורה אחת? לכל תא יש אפשרויות ויש תאים, כלומר מילויים. (הסטודנט שניחש "גודל שורה עצרת" תוקן: זו חזקה, לא עצרת [00:49:08].) אני לא יודע מראש איזו שורה תתקבל — כי אני לא יודע מה — ולכן אצטרך גרירה לכל מילוי אפשרי: מספר מעריכי של תת-נוסחאות. הנוסחה שלי חייבת להיות פולינומית ב-. אז זה נופל.
המוצא: לוקליות. [00:50:11]–[00:51:15] "היופי של ההוכחה, והיופי של המודל הזה" — החישוב במכונת טיורינג הוא מקומי מאוד. במעבר משורה לשורה הבאה, רוב מוחלט של התאים לא משתנים; המקומות היחידים שיכולים להשתנות הם התא של סימן המצב ותא אחד ימינה או שמאלה ממנו. לכן אין צורך לגרור שורה שלמה על שורה שלמה — מספיק לעבור על חלונות ולוודא שכולם חוקיים. זו בדיוק הסיבה שבגללה צריך מודל חישוב "פרימיטיבי אבל מדויק" כמו מכונת טיורינג [00:46:33].
הנוסחה.
התחומים. [01:05:18]–[01:05:51] — זו הייתה שאלת סטודנטית והתשובה שווה זכירה. החלון מאונדקס לפי התא השמאלי-עליון שלו. התא השמאלי-עליון יכול להגיע לכל היותר עד השורה שלפני האחרונה, כי לחלון יש שתי שורות — ומכאן . הוא יכול להגיע לכל היותר עד שתיים לפני העמודה האחרונה, כי לחלון יש שלוש עמודות ומספר העמודות הוא — ומכאן .
הצורה: מ-DNF ל-CNF. כפי שנכתבה, כל תת-נוסחה של חלון היא דיסיונקציה של קוניונקציות, כלומר DNF ולא CNF. יש לזה תיקון סטנדרטי ופשוט שכדאי להכיר, והוא גם מקצר את הנוסחה: במקום למנות את השישיות החוקיות, אוסרים את הלא-חוקיות. בהינתן (שמבטיחה סימן יחיד בכל תא), החלון חוקי אם ורק אף שישייה לא-חוקית אינה מופיעה בו, ולכן אפשר לכתוב במקום זאת זו כבר CNF ישירה: לכל חלון לכל היותר פסוקיות, כל אחת בת 6 ליטרלים.
הערה: בהרצה נאמר רק שהמרת גרירות ל-CNF "לא מפחידה" [00:48:37], והסיכום משאיר את בצורת DNF-לכל-חלון. הפירוט כאן הוא מה שההערה הזאת מייצגת. שתי הצורות שקולות מעל השמות המספקות את , ושתיהן פולינומיות; הצורה השנייה נוחה יותר כי היא CNF כפי שנדרש להגדרת ולרדוקציה ל- בהמשך.
טענה 1.2 (למת הלוקליות) — למה בדיקה מקומית מספיקה
זו הטענה שבלעדיה ההוכחה חסרה, והמקום שבו סיכומים נוטים לדחוס הכי חזק.
ניסוח. תהי טבלה (מילוי של בכל תא), ונניח:
- השורה הראשונה של היא קידוד חוקי של הקונפיגורציה ההתחלתית של על עבור כלשהו, כלומר סימן מצב יחיד בעמודה ;
- כל חלון ב- חוקי.
אז לכל : השורה היא קידוד חוקי של קונפיגורציה, והשורה היא הקידוד של הקונפיגורציה העוקבת לה (או העתקה שלה, אם היא מכילה מצב סופי).
הוכחה, באינדוקציה על . בסיס: תנאי 1 נותן שהשורה הראשונה היא קידוד קונפיגורציה, עם סימן מצב יחיד בעמודה .
צעד: נניח שהשורה היא קידוד של קונפיגורציה , שבה סימן המצב יושב בעמודה . כפי שהראינו בהגדרה 2, — הראש לעולם אינו על עמודת קצה. נראה שהשורה נקבעת במלואה, והיא הקידוד של .
(א) תאים רחוקים מהראש נשמרים. יהי עם . נתבונן בחלון , שעמודותיו . אף אחת מהן אינה (כי היה מחייב , ו- היה מחייב ; שניהם נשללו). לכן שורתו העליונה של החלון אינה מכילה סימן מצב. כל שישייה חוקית שהשורה העליונה שלה נטולת מצב מקיימת , כלומר התא האמצעי אינו משתנה: הרי בשישייה חוקית נלקחת מעבר אמיתי של ; המעבר משנה רק את התא שתחת הראש ואת סימן המצב, שנשאר במרחק מ-, ולכן תא בעמודה עם אינו יכול לא לשנות את תוכנו ולא לקבל סימן מצב חדש (הראש בזמן נמצא בעמודה , שמרחקה מ- הוא לפחות 1). מסקנה: — בדיוק כמו בקונפיגורציה העוקבת.
(ב) תאים ליד הראש נקבעים על ידי . נתבונן בחלון — הוא קיים בזכות . שורתו העליונה היא , כלומר סימן המצב יושב במרכז. כיוון ש- דטרמיניסטית, קובע באופן יחיד מה תהיה שורת החלון התחתונה:
- אם : ;
- אם : .
בשני המקרים כל שלושת התאים בשורה נקבעים במלואם, ובדיוק כמו בקונפיגורציה העוקבת. (המקרה של מצב סופי מטופל בכלל הריפוד: השורה מועתקת.)
(א) ו-(ב) יחד מכסים את כל העמודות, ולכן השורה שווה בדיוק לקידוד של — ובפרט היא בעצמה קידוד חוקי של קונפיגורציה, מה שמאפשר את המשך האינדוקציה.
הערה: הטיעון הזה נאמר בהרצה כאינטואיציה — "רוב התאים לא השתנו, המקום היחיד שהשתנה הוא ליד הראש" [00:50:42] — ובאמצעות דוגמאות על הלוח. הפירוט הפורמלי, כולל ההבחנה שהראש לעולם אינו על עמודת קצה (ולכן החלון תמיד קיים), הוא מה שההערה מייצגת.
למה דווקא 6 תאים? [00:58:07], [01:01:21] — תיאורטית אפשר היה חלון גדול יותר; אנחנו רוצים כמה שפחות, כי מספר הפסוקיות לחלון הוא בחזקת גודל החלון. פחות מ- לא יספיק: בצעד יחיד יכולים להשתנות עד שלושה תאים סמוכים (במעבר שמאלה: ), ולכן חלון עלול לפספס שינוי. שש הוא בדיוק המינימום שמכסה את כל השינויים האפשריים.
חשבון הגודל — למה הרדוקציה פולינומית
זהו החלק שהופך את הבנייה לרדוקציה. נסמן — פולינום ב-, כי הרכבה של פולינומים היא פולינום.
| רכיב | ספירה | סדר גודל |
|---|---|---|
| משתנים | ||
| לכל תא: פסוקית אחת באורך , ועוד פסוקיות באורך 2 | ||
| קוניונקטים, כל אחד באורך | ||
| פסוקית אחת באורך | ||
| חלונות, לכל חלון פסוקיות באורך 6 |
המפתח: תלוי רק ב- ולא ב- ולא ב-. לכן הוא גורם קבוע מבחינת גודל הקלט — הגם שהמרצה מסתייג מהמילה "קבוע" ומעדיף "לא תלוי ב-" [01:07:23]. סך הכול פולינומי ב-, בדיוק כפי שנרשם בסיכום: .
וגם זמן הבנייה פולינומי, לא רק הגודל. [00:26:30] המכונה המבצעת את הרדוקציה מקבלת ו:
- מחשבת ואת — חישוב אריתמטי על פולינומים ידועים;
- מחשבת פעם אחת את הטבלה של על ידי מעבר על כל השישיות ובדיקת כל אחת מול — עבודה שלא תלויה כלל ב- [01:06:52];
- פולטת את הפסוקיות של בלולאות על ;
- מחזירה .
כל פסוקית נכתבת בזמן קבוע, ומספר הפסוקיות פולינומי, ולכן רצה בזמן פולינומי ב-.
חזרה על מה שהמכונה כן ולא עושה [00:46:02]: לא מחפשת השמה, לא מנחשת את , לא מריצה את . היא רק כותבת נוסחה. כל הסמנטיקה — הטבלה, ההשמה, ה"מלכה נמצאת/לא נמצאת" — היא בראש שלנו בזמן שאנחנו מוכיחים נכונות.
כיוון 1: ספיקה
נניח . לפי הגדרת NP קיים כך ש- מקבלת את , ומספר הצעדים חסום ב-.
נבנה טבלה : השורה ה- היא הקידוד של הקונפיגורציה של על אחרי צעדים, ואם הריצה עצרה במצב מקבל אחרי צעדים — כל השורות שמעבר לכך הן העתק של השורה שבה הופיע (כלל הריפוד).
לפי טענה 1.1 (הכיוון השני) יש השמה המתאימה למילוי הזה: . נבדוק שהיא מספקת את כל ארבעת החלקים:
- : מיידי מהבנייה של — בכל תא בדיוק סימן אחד.
- : השורה הראשונה של היא הקונפיגורציה ההתחלתית: תאים ריקים, , אחריו תו-תו, אחריו תו-תו, אחריו תאים ריקים. הליטרלים היחידים מסופקים; ובכל אחת מהפסוקיות עבור , בדיוק אחד משני הליטרלים מקבל אמת — זה שמתאים ל- [01:10:46]–[01:11:48].
- : הריצה מקבלת, ולכן קיימת שורה שבה מופיע ; התא הזה נותן ליטרל אמיתי בדיסיונקציה.
- : כל חלון בטבלה נלקח משתי שורות עוקבות של ריצה אמיתית של (או מזוג שורות זהות אחרי הקבלה), ולכן השישייה שבו חוקית לפי ההגדרה. לכן בכל חלון קיים איבר אחד בדיסיונקציה שמסופק.
לכן , כלומר .
כיוון 2: ספיקה
נניח שקיימת השמה מספקת עבור . נשחזר ממנה את ואת הריצה.
שלב 1 — הטבלה מוגדרת היטב. מספקת את , ולכן לפי טענה 1.1 לכל יש סימן יחיד עם . נגדיר . קיבלנו טבלה.
שלב 2 — קריאת . מספקת את , ולכן השורה הראשונה של היא: תאים ריקים, , הקלט , אחר כך תאים שכל אחד מהם או , ואז תאים ריקים. נגדיר זהו , מוגדר היטב [01:17:02]–[01:18:09]. זה בדיוק מה שמסתתר מאחורי המשפט "נתבונן ב- לפי ערכי האמת למשתנים המתאימים" בעמוד 3 בסיכום.
שלב 3 — הטבלה מתארת את הריצה על . מספקת את , ולכן כל חלון ב- חוקי. יחד עם העובדה ששורה 1 היא הקונפיגורציה ההתחלתית על , למת הלוקליות (טענה 1.2) נותנת באינדוקציה: לכל , השורה היא הקונפיגורציה העוקבת לשורה . כלומר היא בדיוק טבלת החישוב של על .
זהו טיעון הדומינו של ההרצה [01:16:30]: ברגע שקבעתי את , הדטרמיניזם של קובע את כל שאר הטבלה. "זה כמו אבן ראשונה של דומינו שמפילה את כל השאר." שימו לב שכאן נכנס לשימוש הדטרמיניזם — זו הסיבה שנוח לעבוד עם ההגדרה דרך מוודא דטרמיניסטי.
שלב 4 — הריצה מקבלת. מספקת את , ולכן קיים תא ב- שבו כתוב . לפי שלב 3, מתארת את הריצה האמיתית של על , ולכן הריצה הזאת מגיעה למצב — כלומר מקבלת את .
לכן קיים שעליו מקבלת את , ומהגדרת NP נובע .
סיכום ההוכחה
רצה בזמן פולינומי ומקיימת , כלומר . זה נכון לכל , ולכן היא NP-hard; יחד עם חלק (א), היא NP-complete.
הערה על off-by-one: מספר השורות שנקבע בסיכום הוא , אבל שורות מתארות רק צעדים, בעוד חסם הזמן מתיר צעדים. התיקון הקל: לקחת שורות (או להבחין ש- תמיד ניתן להגדלה בקבוע). שום דבר בהוכחה לא משתנה — כל התחומים והחסמים נשארים באותו סדר גודל.
משפט 2 (מסקנה): היא NP-complete, ובעקבותיה
הנוסחה שבנינו (בצורת ) היא כבר CNF, ולכן ההוכחה מראה יותר: היא NP-hard. מכאן, בעזרת הרדוקציה שראינו בשיעור 7 (פיצול פסוקיות ארוכות באמצעות משתנים חדשים), מקבלים ש- היא NP-complete.
זו נקודת המוצא לכל התחום: המרצה מציין [01:20:20] שאחרי המאמר של קוק ולוין בא ריצ'רד קארפ עם 21 בעיות אלגוריתמיות שהראה שכולן NP-שלמות — למשל — והיום ידועות אלפים.
דוגמאות ותרגילים מהשיעור
דוגמה 1: הקידוד של צעד יחיד (מהלוח, עמוד 1 בסיכום)
מכונה בקונפיגורציה: סרט , ראש על ה-, מצב , ו-.
| שורה | |||||||
| שורה |
שאלת סטודנט בהרצה [00:12:07]: "אפשר להסביר את המעבר הזה?" התשובה: בשרטוט הרגיל הראש עמד על ה-, כתב וזז ימינה. בקידוד, המצב נרשם תמיד תא אחד לפני מה שהראש קורא — ולכן שישב לפני ה- מתחלף: התא שלו מקבל את הסימן שנכתב (), והתא שמימינו מקבל את , כי עכשיו הראש קורא את התא שאחריו.
דוגמה 2: הרדוקציה מקצה לקצה על אינסטנס קונקרטי
נקבע שפה, מוודא, וקלט — ונעקוב אחרי הרדוקציה בשני הכיוונים.
השפה. contains at least one . זו כמובן שפה ב-P, אבל היא מוגדרת כאן דרך מוודא כדי שהבנייה תהיה מוחשית.
המוודא. ; העד אמור להצביע על מיקום של בקלט. מקבלת קלט הכתוב על הסרט כ- ואחריו . עבור מספיק: כלומר: קרא את ; אם הוא — דחה; אם הוא — עבור ל- ובדוק ש- (כלומר שהעד באמת מצביע על המיקום הזה).
הפרמטרים. , , אורך הקלט של הוא . ניקח , ואז מספר שורות , מספר עמודות , כך ש-.
הנוסחה שהרדוקציה פולטת עבור . מספר המשתנים: . ו- (שלושה תאים ריקים בעמודות ; בעמודה ; הקלט בעמודה ; העד בעמודה ; תא ריק בעמודה .) שימו לב: רק בעמודה 6 יש חופש — בדיוק ביט אחד, בדיוק אורך .
כלומר פסוקית אחת בת 21 ליטרלים.
רצה על ו-, כלומר 10 חלונות.
כיוון : מ- להשמה. שייך ל-, והעד הוא . הטבלה:
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | |
|---|---|---|---|---|---|---|---|
| 1 | |||||||
| 2 | |||||||
| 3 |
שורה 2 מתקבלת מ-: העמודות עוברות מ- ל-. שורה 3 מתקבלת מ-: העמודות עוברות מ- ל-. ההשמה מוגדרת לפי הטבלה, והיא מספקת את כל ארבעת החלקים: (סימן יחיד בכל תא), (השורה הראשונה, ובעמודה 6 הליטרל אמיתי), ( אמיתי), (כל חלון נלקח משתי שורות עוקבות של ריצה אמיתית).
כיוון : מהשמה ל- ולשייכות. נניח שקיבלנו השמה מספקת . מ- נגזרת טבלה; מ- אנו יודעים שהשורה הראשונה היא , ובעמודה 6 בדיוק אחד מבין אמיתי. נקרא משם את . אילו היה : לפי ולמת הלוקליות הטבלה חייבת להיות שורה 2: , ושורה 3: . ואז אין בטבלה אף תא עם — סתירה ל-. לכן בהכרח , ואז הטבלה היא זו שלמעלה ו- אכן מקבלת את , כלומר .
האינסטנס השלילי. עבור : כופה ; לפי שורה 2 היא ; מ- אין מעבר, ואין כלל ריפוד עבורו, ולכן אין השמה שמספקת את — אינה ספיקה. (ואם מרחיבים את כלל הריפוד לכל מצב עוצר, אז שורה 3 מעתיקה את שורה 2 ו- היא זו שנכשלת. בשני המקרים , בהתאם ל-.)
דוגמה 3: אילו חלונות חוקיים ואילו לא (בעקבות הלוח)
עם המכונה של דוגמה 2 — שאף פעם אינה זזה שמאלה:
(א) חוקי — מעבר אמיתי: זהו בדיוק החלון בטבלה של דוגמה 2: .
(ב) חוקי — שורה עליונה נטולת מצב: הראש רחוק, שום דבר לא משתנה. זה מה שהופך את רוב הטבלה ל"שקטה", וזו הלוקליות בפעולה.
(ג) לא חוקי — הראש צץ יש מאין [01:03:12]: שאלה מנחה מההרצה: מאיפה הראש הזה היה יכול להגיע? רק מהתא משמאל או מהתא מימין — אבל בשורה העליונה של החלון אין סימן מצב באף אחד מהם, ומחוץ לחלון הוא רחוק מדי מכדי להגיע בצעד אחד. לכן אין ריצה שמייצרת חלון כזה.
(ד) לא חוקי — תזוזה שמאלה במכונה שאינה זזה שמאלה [01:02:11]: כאן סימן המצב עבר שמאלה, כלומר הראש זז שמאלה. ב- שלנו כל המעברים הם , ולכן השישייה אינה ב-. שימו לב לניסוח המדויק שהמרצה תיקן בהרצה: הנימוק אינו "לא הגיע מימין" אלא "הראש הזה לעולם אינו זז שמאלה במכונה הזאת".
(ה) לא חוקי — שינוי בלי ראש: בשורה העליונה אין סימן מצב, ולמרות זאת התא האמצעי שינה את תוכנו. מכונת טיורינג כותבת רק תחת הראש.
תרגיל 1 (מההרצה [00:13:43], [00:15:18]): כמה שורות וכמה עמודות?
שאלה. למה מספר השורות הוא ומספר העמודות הוא ?
פתרון. מספר השורות = מספר הקונפיגורציות בריצה = מספר צעדי הזמן, החסום ב- של אורך הקלט, כלומר . מספר העמודות: זמן חוסם מקום — בכל צעד הראש זז תא אחד לכל היותר, ולכן מנקודת ההתחלה הוא לא יתרחק ביותר מ-. אבל איננו יודעים מראש לאיזה כיוון ילך, ולכן שומרים תאים לכל צד: . ה- הוא התא שבו נרשם סימן המצב לפי הקידוד של הגדרה 1. סה"כ .
תרגיל 2 (מההרצה [00:49:08]): כמה מילויים אפשריים לשורה?
שאלה. אם רציתי לכתוב "אם השורה הראשונה מולאה כך אז השורה השנייה כך", כמה גרירות אצטרך?
פתרון. לכל אחד מ- התאים יש אפשרויות, ולכן מספר המילויים הוא — מעריכי ב-. (לא עצרת! זו חזקה: בחירה בלתי-תלויה בכל תא.) נוסחה בגודל כזה לא ניתנת לכתיבה בזמן פולינומי, ולכן הגישה הזאת נכשלת, ולכן צריך את החלונות.
תרגיל 3 (מההרצה [00:58:38]): כמה שישיות לחלון?
שאלה. על כמה איברים רצה הדיסיונקציה בתוך חלון בודד?
פתרון. , לא : התאים בחלון אינם חייבים להכיל סימנים שונים (וכפי שראינו, לרוב חמישה מתוך שישה זהים בזוגות). זהו . הגודל הזה תלוי רק ב-.
תרגיל 4 (מההרצה [01:04:47]): מאיפה ה- וה- בתחומי ?
שאלה. למה ו-, ולא עד הסוף?
פתרון. חלון מאונדקס לפי התא השמאלי-עליון. לחלון שתי שורות, ולכן התא השמאלי-עליון יכול להיות לכל היותר בשורה — משורה אין שורה שמתחתיה. לחלון שלוש עמודות, ולכן התא השמאלי-עליון יכול להיות לכל היותר בעמודה .
הערות מהשיעור
- [00:01:08] סדר הכמתים. "להיזהר, כי הרבה פעמים אנשים אומרים 'יש רדוקציה מכל שפה ב-NP ל-' — זה לא אותו דבר. 'יש רדוקציה לכל שפה' משמעו רדוקציה אחת שטובה לכולן, וזה לא המצב." הכיוון הנכון: לכל קיימת רדוקציה, התלויה ב-.
- [00:02:41] דטרמיניסטי או אי-דטרמיניסטי. אפשר להוכיח את קוק–לוין משתי ההגדרות של NP. נבחרה הדטרמיניסטית כי היא מאפשרת לומר "אני יודע בכל צעד מה קורה בצעד הבא" — וזה בדיוק מה שנחוץ בכיוון .
- [00:05:19]–[00:06:52] "מי יש לי ביד?" — טכניקה, לא רק אנקדוטה. קיים מביא משתנים, לכל סוגר סקופ ומוחק אותם. יש: ובזמן ריצה גם . אין: . המרצה חוזר לזה בכל תת-נוסחה כבדיקת שפיות — למשל [00:42:18]: " צריכה רק את ; צריכה את עצמו".
- [00:09:27], [00:20:03] בעיית שמונה המלכות היא "קוק–לוין בקטן". אותה טכניקה בדיוק: משתנה בוליאני לכל משבצת, תת-נוסחה לכל אילוץ, ו- ביניהן. אם הקידוד כאן נראה לכם מסובך — חזרו לשם.
- [00:23:47]–[00:24:52] קפיצה מכוונת בין תחביר לסמנטיקה. "כשאני מסביר את ההוכחה אני כל הזמן קופץ בין התחביר של הנוסחה למה שאני רוצה שהוא יגיד" [00:43:23]. זה מקור בלבול נפוץ: הרדוקציה בונה תחביר בלבד; המשמעות ("בתא כתוב ") קיימת רק בהוכחת הנכונות.
- [00:32:31] מה לא מבטיחה. "היא תבנה לך טבלה — יכולה להיות טבלה של ג'יבריש, שלא קשורה למכונה בכלל." הקשר למכונה נוצר רק ב- וב-.
- [00:35:46] למה צריך את הכיוון ההפוך בטענה 1.1. "להפך חשוב בגלל הכיוון השני של הרדוקציה." בלי המרה של טבלה להשמה, אי אפשר להוכיח .
- [00:45:01]–[00:45:31] כל תת-נוסחה עומדת בפני עצמה. אין צורך ש- תדרוש יחידות — כבר עשתה זאת. עיקרון העבודה: כל נוסחה דורשת רק את שלה, ובלבד שאין סתירה ביניהן.
- [00:46:33] "השפיץ של המשפט". "עד לפה זה כמעט אותו דבר כמו בעיית המלכות, רק יותר אינדקסים. הגדולה של קוק–לוין — ואולי הסיבה שאנחנו צריכים את המודל הפרימיטיבי-אבל-מדויק הזה של מכונות טיורינג — היא הנוסחה האחרונה."
- [01:03:44]–[01:04:47] בדיחת "כל האי-זוגיים ראשוניים". 3, 5, 7, 7, 7, 7… — כך נראה כלל הריפוד. חסם הזמן הוא מלמעלה, ולכן צריך משהו למלא בו את שאר הטבלה.
- [01:06:22]–[01:07:23] מה תלוי במה. קבוצת השישיות החוקיות תלויה רק ב-, כלומר רק ב-; גודל הטבלה תלוי מאוד ב-. המרצה מסרב לקרוא ל- "קבוע": "אין קבוע, יש תלוי בזה או לא תלוי בזה".
- [01:16:30] מטאפורת הדומינו. "ברגע שכתבתי את — זו כמו אבן ראשונה של דומינו שמפילה את כל השאר." זו התמצית של כיוון .
- [01:19:42] "קחו שבועיים". "זו לא הוכחה שאפשר לראות פעם אחת אונליין; היא דורשת עיכול." אם משהו כאן לא התיישב מהקריאה הראשונה — זה צפוי.
- [01:14:25], [01:21:25] על המבחן. המרצה מסרב לענות על "מה מהחומר יהיה במבחן" ומבקש להסתכל על היופי של הרעיון. מה שכן נאמר על התרגיל: יהיו בו הרבה רדוקציות זמן פולינומי, ותהיה שאלה של "משחק עם ההגדרות" — שינוי קטן בהגדרה ובחינת מה משתנה — שהמרצה מדגיש כחשובה במיוחד, בלי קשר למבחן.
- [01:20:20] הקשר היסטורי. המאמר של קוק ולוין היה "יריית הפתיחה"; אחריו בא ריצ'רד קארפ עם 21 בעיות NP-שלמות, וביניהן הרדוקציות שראינו/נראה בקורס.
- [01:22:29] מה הלאה. אחרי שיודעים שבעיה היא NP-קשה — מה בכל זאת אפשר לעשות? זה מוביל לקירובים ולאלגוריתמים הסתברותיים בשיעורים הבאים: "אני מוכן לוותר על דברים בשביל שהאלגוריתם ירוץ בזמן סביר".
פערים בין הסיכום להקלטה
- מקור: עמוד 1 בסיכום. הפער: תנאי המוודא נכתב . ההכרעה: זו טעות — האורך של העד נקבע לפי אורך הקלט, כלומר . ההקלטה [00:03:45] וכל שאר הסיכום (עמודים 2–3) משתמשים ב-. תוקן בגוף הקובץ.
- מקור: עמוד 2 בסיכום, . הפער: טווח תאי ה- נכתב כמסתיים ב-, והריפוד בבלנקים מתחיל ב-. זה מתעלם מ- התאים של ושל שלפניהם. ההכרעה: הטווח הנכון הוא , ובלנקים מ- עד . זה עקבי עם התחלת ה- שנכתבה נכון באותה שורה (), עם הטווח הנכון שמופיע בהמשך עמוד 2, ועם ההקלטה [00:40:02]. תוקן.
- מקור: עמוד 2 בסיכום, . הפער: הנוסחה נכתבת כדיסיונקציה של קוניונקציות לכל חלון (DNF), בעוד שההרצה [00:27:13] מדגישה שכל אחת מארבע התת-נוסחאות היא CNF. ההכרעה: שתי הצורות נכונות ושקולות (מעל השמות שמספקות את ); הוצגה גם הצורה השקולה שאוסרת את השישיות הלא-חוקיות ושהיא CNF ישירה עם פסוקיות בנות 6 ליטרלים לכל חלון. אין סתירה — רק דחיסה בסיכום.
- מקור: שני המקורות. הפער: מספר השורות נקבע , אך שורות מתארות צעדים בלבד, בעוד חסם הזמן מתיר צעדים. ההכרעה: off-by-one שפיר. תוקן בהערה בגוף הקובץ (לוקחים שורות, או מגדילים את בקבוע); אף חסם או תחום אחר אינו משתנה בסדר גודלו.
- מקור: שני המקורות. הפער: אף אחד מהם אינו רושם את שישיית המכונה במפורש, אף שהבנייה משתמשת ב-, , , ו-. ההכרעה: נרשמה במפורש בסעיף הרקע כ-, לפי מוסכמת הסימון של הקורס.
- מקור: ההקלטה [00:55:48]–[01:03:12]. הפער: המרצה שרטט על הלוח מכונה קונקרטית ("היא סופרת / בודקת…") וארבעה-חמישה חלונות, ודן בחוקיותם — אך תוכן השרטוטים אינו ניתן לשחזור מהאודיו. ההכרעה: נבנתה מכונה מפורשת (דוגמה 2) ואיתה חמישה חלונות (דוגמה 3) שמשמרים בדיוק את נימוקי החוקיות שנשמעו: "מאיפה הראש הגיע", "המכונה הזאת לעולם לא זזה שמאלה", ו"שינוי בלי ראש".
- מקור: ההקלטה. הפער: ההסבר על למה הקידוד הנאיבי (גרירה שורה-על-שורה) נכשל, וחישוב המילויים — נמצאים רק בהקלטה [00:48:06]–[00:50:11] ואינם מופיעים כלל בסיכום. ההכרעה: נכללו במלואם; זה החומר שמסביר למה הבנייה נראית כפי שהיא נראית.
- מקור: ההקלטה. הפער: ההערות המתודיות ("קיים מביא משתנים, לכל מוחק אותם"), ההשוואה החוזרת לבעיית שמונה המלכות, ומטאפורת הדומינו — כולן בהקלטה בלבד. ההכרעה: נכללו בסעיף "הערות מהשיעור".
- מקור: עמוד 3 בסיכום. הפער: הסיכום מסיים ב"לכן היא NP-קשה" ואינו חוזר על , בעוד שכותרת המשפט בעמוד 1 היא " היא NP-שלמה". ההכרעה: הובא חלק (א) המלא של המשפט (העד הוא ההשמה), בהסתמך על שיעור 7.
- מקור: ההקלטה, [00:00:00]–[00:05:00]. הפער: הדקות הראשונות הן חזרה על רדוקציות זמן פולינומי, NP-קושי ו-NP-שלמות משיעור 7, ולא חומר של שיעור זה. ההכרעה: שולבו בסעיף "רקע ותלויות" בלבד.
- מקור: שני המקורות. הפער: המשתנים מסומנים בעוד ש- מסמן גם את הקלט. ההכרעה: נשמר הסימון של הסיכום כפי שהוא (הוא גם הסימון שנאמר בהרצה), עם הבהרה מפורשת בהגדרה 3 שהאינדקסים הם רק שם ואין קשר בין השניים.
- מקור: ההקלטה [01:03:44]. הפער: כלל הריפוד נאמר רק עבור ; מקרה של עצירה במצב דוחה לפני תום הצעדים אינו נדון. ההכרעה: נוסחה הערה מפורשת — במקרה כזה אינה ספיקה, וזה תקין כי ממילא רצינו ; לחלופין אפשר להרחיב את הריפוד לכל מצב עוצר ואז היא שנכשלת. שתי הדרכים נכונות.
סיכום ונקודות למבחן
מה לזכור בעל פה
- המשפט: היא NP-complete. הניסוח המדויק: לכל מתקיים , ובנוסף .
- הפרמטרים: ; טבלה עם שורות ו- עמודות; אלפבית ; משתנים שמשמעותם "בתא כתוב ".
- ארבעת החלקים ומה כל אחד עושה: — בכל תא בדיוק סימן אחד. — השורה הראשונה היא הקונפיגורציה ההתחלתית על , כשהחופש היחיד הוא תאי . — איפשהו בטבלה . — כל חלון חוקי.
- הגודל: עד לגורמים התלויים רק ב- (בפרט ) — ומכאן שהרדוקציה פולינומית.
המלכודות הסטנדרטיות
- הפיכת כיוון הרדוקציה. אומר ש- קשה לפחות כמו . כאן: , כלומר היא הקשה.
- הפיכת סדר הכמתים. "לכל שפה יש רדוקציה" "יש רדוקציה לכל שפה".
- בלבול בין שורות לעמודות. שורות (זמן), עמודות (מקום). ה- נובע מאי-ידיעת כיוון התנועה; ה- מהתא של סימן המצב.
- במקום . תאי החלון אינם חייבים להיות שונים.
- לשכוח את הכיוון ההפוך בטענה על . צריך גם "מכל טבלה להשמה", אחרת כיוון של הרדוקציה נשבר.
- לחשוב שהרדוקציה מריצה את או מנחשת את . היא רק כותבת נוסחה. אין לה ואין לה השמה.
- לשכוח את הריפוד. חסם הזמן הוא מלמעלה; בלי כלל ההעתקה של שורה מקבלת, טבלה של ריצה קצרה אינה מוגדרת עד הסוף.
- לטעון שחלון מספיק. מעבר שמאלה משנה שלושה תאים סמוכים.
צ'ק-ליסט: מה צריך לדעת לעשות אחרי השיעור
- לנסח את משפט קוק–לוין עם סדר הכמתים הנכון, ולהסביר למה הוא נותן את הבעיה ה-NP-שלמה הראשונה.
- לקודד קונפיגורציה נתונה של מכונת טיורינג כשורה, ולחשב את השורה הבאה בהינתן .
- לכתוב את ארבע התת-נוסחאות מהזיכרון, עם התחומים הנכונים של ו- בכל אחת מהן — כולל להסביר את ה- וה- ב-.
- להכריע אם שישייה נתונה היא חלון חוקי עבור מכונה נתונה, ולנמק ("מאיפה הראש הגיע", "האם מאפשרת", "האם השתנה תא בלי ראש").
- להסביר למה הקידוד הנאיבי של גרירה בין שורות נכשל, ולחשב .
- לבצע חשבון גודל מלא של ולהסביר למה הוא פולינומי ב- ולא ב-.
- להוכיח את שני כיווני הנכונות, כולל שחזור מהשמה מספקת וטיעון הדומינו הדטרמיניסטי.
- להסביר איפה בדיוק נכנס בהוכחה כל אחד מהתנאים: זמן פולינומי, אורך העד, ודטרמיניזם.
הסיכום הכתוב שעליו מבוסס קובץ זה נכתב על ידי גיא סופר.
