2Efficient Computation: The Time and Space Classes DTime and DSpace

בשיעור הזה מוגדרות מחלקות הסיבוכיות הבסיסיות $\mathrm{DTime}(f)$ ו-$\mathrm{DSpace}(f)$, נגזרים מהן ההכלות הבסיסיות בין זמן למקום, ומוגדרות המחלקות הגסות P, EXP, PSPACE ו-EXPSPACE.

confidence: high2 recording(s)4 summary pagesdtimedspacecomplexity-classesppspaceexp

Builds on: lesson 1

The handwritten summary pages

Open page 1 full size

סיבוכיות שיעור 2.pdf

Page 1 of 4 of the handwritten summary

בקצרה

  • מגדירים כאן, לראשונה בקורס, מחלקות סיבוכיות: DTime(f)\mathrm{DTime}(f) ו-DSpace(f)\mathrm{DSpace}(f) — קבוצות של שפות (לא של מכונות) שניתן להכריע בזמן O(f)O(f) או במקום O(f)O(f) בהתאמה.
  • מוכיחים שני הקשרים הבסיסיים בין זמן למקום ברמת המחלקות: DTime(f)⊆DSpace(f)\mathrm{DTime}(f)\subseteq \mathrm{DSpace}(f) (מקום זול מזמן), ו-DSpace(f)⊆⋃d≥1DTime(2d⋅f)\mathrm{DSpace}(f)\subseteq\bigcup_{d\ge 1}\mathrm{DTime}(2^{d\cdot f}) (זמן חסום אקספוננציאלית במקום — אבל רק כשהמכונה עוצרת).
  • מוכיחים שהמחלקות מונוטוניות ביחס לסדר גודל: אם f=O(g)f=O(g) אז DTime(f)⊆DTime(g)\mathrm{DTime}(f)\subseteq\mathrm{DTime}(g) וכן ל-DSpace\mathrm{DSpace}. זה מה שהופך את הכתיב DTime(n2)\mathrm{DTime}(n^2) למשמעותי.
  • מגדירים את ארבע המחלקות הגסות של הקורס: PP, EXP\mathrm{EXP}, PSPACE\mathrm{PSPACE}, EXPSPACE\mathrm{EXPSPACE}, כאיחודים אינסופיים של מחלקות עדינות.
  • מוכיחים P⊆PSPACEP\subseteq \mathrm{PSPACE} (פעמיים: הוכחה "ארוכה" שמפרקת את כל הפרמטרים, והוכחה בת שתי שורות מהטענות הקודמות), ובהקלטה השנייה גם PSPACE⊆EXP\mathrm{PSPACE}\subseteq \mathrm{EXP}.
  • המסר המתודי של השיעור, וכנראה החשוב שבו: בסיבוכיות ההוכחות אינן קשות אלא עתירות פרמטרים. כל ההוכחות כאן נבנות באותו מבנה קשיח — פורסים הגדרה כדי לקבל ליד מכונה וקבועים, ואז מרכיבים מהם קבועים חדשים. מי ששולט במבנה הזה לא ייתקע בהוכחות הכבדות של שיעור 3 ואילך.

רקע ותלויות

כל החומר של השיעור הזה נשען על שיעור 1 בלבד (ראו שיעור 1). מה שצריך להיות ביד:

1. גדלי הסיבוכיות של ריצה בודדת. עבור מכונת טיורינג MM ומילה x∈ΣM∗x\in\Sigma_M^*:

  • timeM(x)\mathrm{time}_M(x) — מספר הצעדים ש-MM מבצעת בריצה על xx (ואינסוף אם אינה עוצרת).
  • spaceM(x)\mathrm{space}_M(x) — מספר התאים השונים ש-MM כותבת עליהם במהלך הריצה על xx.

שימו לב שאלה גדלים של ריצה בודדת — הם פונקציה של xx, לא של nn. בשיעור 1 לא הגדרנו שום מחלקה של שפות; זה בדיוק מה שנעשה היום. (שאלה שנשאלה בשיעור, [00:06:33]: "מה ההבדל בין DSpace\mathrm{DSpace} למה שעשינו בשיעור הקודם?" — בשיעור הקודם הגדרנו את המקום של מכונה, לא מחלקה של שפות המקיימות משהו.)

2. ההסכמה על מודל המכונה. אלא אם נאמר אחרת, "מכונה" בקורס הזה פירושה מכונת טיורינג דטרמיניסטית חד-סרטית סטנדרטית — כזו שהראש שלה אינו עוצר במקום ואין בה שום וריאנט מיוחד ([00:43:50]). זה חשוב מאוד: חסמי זמן קונקרטיים (למשל n2n^2 עבור פלינדרומים) תלויים במודל.

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

4. סימון OO גדול. ההגדרה המקורית: f=O(g)f=O(g) אם קיימים c>0c>0 ו-n0∈Nn_0\in\mathbb{N} כך שלכל n>n0n>n_0 מתקיים f(n)≤c⋅g(n)f(n)\le c\cdot g(n). ראינו במבנה נתונים שאפשר לוותר על n0n_0 ולדרוש את החסם לכל n∈Nn\in\mathbb{N}, במחיר קבוע אחר ([00:53:05], וגם [00:05:11] בהקלטה השנייה). הגרסה בלי n0n_0 היא זו שנשתמש בה, והיא זו שמתאימה להגדרת DTime\mathrm{DTime} — שדורשת חסם לכל xx, לא רק מאורך מסוים והלאה.

5. מכריעה ⇒\Rightarrow עוצרת. אם MM מכריעה שפה AA אז MM עוצרת על כל קלט. זו הנקודה שתאפשר לנו להפעיל את משפט 1 בתוך ההוכחות.


הגדרות

הגדרה 1: DTime(f)\mathrm{DTime}(f)

תהא f:N→Nf:\mathbb{N}\to\mathbb{N} פונקציה כלשהי. נגדיר:

DTime(f)={ A  ∣  ∃M ∃c>0  s.t.  M decides A ∧ ∀x: timeM(x)≤c⋅f(∣x∣) }\mathrm{DTime}(f)=\Big\{\,A \;\Big|\; \exists M\ \exists c>0 \ \text{ s.t. }\ M \text{ decides } A \ \wedge\ \forall x:\ \mathrm{time}_M(x)\le c\cdot f(|x|)\,\Big\}

כלומר: A∈DTime(f)A\in\mathrm{DTime}(f) אם ורק אם קיימת מכונה MM וקיים קבוע c>0c>0 כך ש-MM מכריעה את AA וגם לכל xx מתקיים timeM(x)≤c⋅f(∣x∣)\mathrm{time}_M(x)\le c\cdot f(|x|).

ה-DD הוא קיצור ל-Deterministic — בהמשך הקורס יופיעו גם מכונות אי-דטרמיניסטיות, אך כרגע כל המכונות שלנו דטרמיניסטיות.

אינטואיציה. DTime(f)\mathrm{DTime}(f) היא אוסף כל השפות שניתן להכריע בזמן O(f)O(f). זו הדרך הנכונה לחשוב על המחלקה, אבל לא הדרך לעבוד איתה: כשבאים להוכיח משהו חייבים לרדת להגדרה הפורמלית, כי רק היא נותנת ליד את המכונה ואת הקבוע ([00:04:28]).

שלוש נקודות דיוק שחזרו שוב ושוב בשיעור:

  1. סדר הכמתים. ∃M ∃c ∀x\exists M\,\exists c\,\forall x — המכונה והקבוע נבחרים ראשונים, ורק אחר כך רצים על כל הקלטים. קבוע אחד משרת את כל הקלטים.
  2. ff מקבלת ∣x∣|x| ולא xx. ff היא פונקציה מ-N\mathbb{N} ל-N\mathbb{N}, ו-xx הוא מחרוזת; f(x)f(x) חסר משמעות. סיבוכיות תמיד נמדדת ביחס לאורך הקלט ([00:14:41]).
  3. האיברים של המחלקה הם שפות. AA אינה מכונת טיורינג — מחלקות סיבוכיות הן קבוצות שאיבריהן שפות ([00:17:26]).

דוגמה. PALPAL, שפת הפלינדרומים מעל {0,1}\{0,1\}, מקיימת PAL∈DTime(n2)PAL\in\mathrm{DTime}(n^2) — ראו את הפירוט בסעיף הדוגמאות.

אי-דוגמה שממחישה את הגבול. שפה שאינה כריעה כלל, למשל HALT\mathrm{HALT}, אינה שייכת ל-DTime(f)\mathrm{DTime}(f) עבור שום ff — ההגדרה דורשת ש-MM תכריע את AA, לא רק תקבל אותה. חסם זמן בלי דרישת הכרעה הוא חסר תוכן כאן.

הגדרה 2: DSpace(f)\mathrm{DSpace}(f)

תהא f:N→Nf:\mathbb{N}\to\mathbb{N}. נגדיר:

DSpace(f)={ A  ∣  ∃M ∃c>0  s.t.  M decides A ∧ ∀x: spaceM(x)≤c⋅f(∣x∣) }\mathrm{DSpace}(f)=\Big\{\,A \;\Big|\; \exists M\ \exists c>0 \ \text{ s.t. }\ M \text{ decides } A \ \wedge\ \forall x:\ \mathrm{space}_M(x)\le c\cdot f(|x|)\,\Big\}

ההגדרה זהה מילה במילה להגדרה 1, למעט החלפת time\mathrm{time} ב-space\mathrm{space}.

אינטואיציה. כל השפות שניתן להכריע במקום O(f)O(f).

דוגמה. PAL∈DSpace(n)PAL\in\mathrm{DSpace}(n) — האלגוריתם הנאיבי כותב רק על תאי הקלט עצמו, כלומר spaceM(x)≤∣x∣\mathrm{space}_M(x)\le|x|, ולכן מתאים c=1c=1 ו-f(n)=nf(n)=n.

הגדרה 3: f=O(g)f=O(g) (בגרסה שנשתמש בה)

f=O(g)f=O(g) אם קיים c>0c>0 כך שלכל n∈Nn\in\mathbb{N} מתקיים f(n)≤c⋅g(n)f(n)\le c\cdot g(n).

זו גרסה שקולה לגרסה הסטנדרטית (שבה החסם נדרש רק החל מ-n0n_0 כלשהו), והשקילות נראתה בקורס מבנה נתונים. השקילות אינה מובנת מאליה והיא הכרחית כאן: הגדרות 1–2 דורשות את החסם לכל xx, גם לקלטים קצרים מאוד, בעוד הגדרת ה-OO המקורית "מוותרת" על קלטים קצרים. הרעיון שמאחורי השקילות: יש רק מספר סופי של קלטים באורך ≤n0\le n_0, ולכן אפשר להגדיל את הקבוע cc כך שיבלע גם אותם.

הגדרה 4: המחלקות הגסות P, EXP, PSPACE, EXPSPACEP,\ \mathrm{EXP},\ \mathrm{PSPACE},\ \mathrm{EXPSPACE}

P=⋃c≥1DTime(nc)EXP=⋃c≥1DTime(2nc)P=\bigcup_{c\ge 1}\mathrm{DTime}(n^c)\qquad \mathrm{EXP}=\bigcup_{c\ge 1}\mathrm{DTime}(2^{n^c}) PSPACE=⋃c≥1DSpace(nc)EXPSPACE=⋃c≥1DSpace(2nc)\mathrm{PSPACE}=\bigcup_{c\ge 1}\mathrm{DSpace}(n^c)\qquad \mathrm{EXPSPACE}=\bigcup_{c\ge 1}\mathrm{DSpace}(2^{n^c})

מינוח. המחלקות DTime(f)\mathrm{DTime}(f) ו-DSpace(f)\mathrm{DSpace}(f) נקראות מחלקות עדינות (fine), כיוון שכל מחלקה כזו מוגדרת על פי פונקציית חסם אחת ספציפית. המחלקות שבהגדרה זו נקראות מחלקות גסות (coarse), והן איחודים אינסופיים של מחלקות עדינות.

אינטואיציה. PP היא אוסף כל השפות שניתן להכריע בזמן פולינומי בגודל הקלט. חשוב לומר "בגודל הקלט" — ל"פולינומי" סתם אין משמעות ([01:06:29]). הנקודה העדינה: החזקה cc היא קבועה ואינה תלויה בקלט; יש פולינום אחד שחוסם את זמן הריצה על כל הקלטים.

מה הולך לאיבוד באיחוד. שייכות לאיחוד היא טענת קיום: A∈PA\in P פירושו "קיים c≥1c\ge 1 כך ש-A∈DTime(nc)A\in\mathrm{DTime}(n^c)". כשמוכיחים שייכות ל-PP חייבים "לקלף" קודם את הקיים הזה, ורק אז מגיעים למכונה ([01:09:40]).

דוגמה. PAL∈DTime(n2)⊆PPAL\in\mathrm{DTime}(n^2)\subseteq P.

אי-דוגמה שמחדדת את הגבול. DTime(n100)⊆P\mathrm{DTime}(n^{100})\subseteq P — למרות שאלגוריתם בזמן n100n^{100} אינו ישים בפועל בשום צורה. PP היא מחלקה רחבה מאוד, והזיהוי שלה עם "יעיל" הוא הסכמה, לא משפט (ראו הערות).


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

משפט 1: הקשר בין זמן למקום (תזכורת משיעור 1, עם ההוכחה במלואה)

חלק א'. לכל מכונה MM ולכל x∈ΣM∗x\in\Sigma_M^*:  spaceM(x)≤timeM(x)\ \mathrm{space}_M(x)\le \mathrm{time}_M(x).

חלק ב'. לכל מכונה MM קיים c>0c>0 כך שלכל x∈ΣM∗x\in\Sigma_M^*: אם MM עוצרת על xx אז timeM(x) ≤ 2 c⋅spaceM(x),c=lg⁡∣Q∣+lg⁡∣Γ∣+1.\mathrm{time}_M(x)\ \le\ 2^{\,c\cdot \mathrm{space}_M(x)},\qquad c=\lg|Q|+\lg|\Gamma|+1 .

כאן QQ היא קבוצת המצבים של MM ו-Γ\Gamma אלפבית הסרט שלה.

הוכחת חלק א'. בכל צעד יחיד המכונה כותבת על תא אחד לכל היותר. לכן מספר התאים השונים שנכתבו לאורך הריצה אינו עולה על מספר הצעדים. □\square

הוכחת חלק ב'. נסמן s=spaceM(x)≥1s=\mathrm{space}_M(x)\ge 1. נספור את מספר הקונפיגורציות השונות האפשריות בריצה של MM על xx. קונפיגורציה נקבעת על ידי שלושה רכיבים:

  1. המצב הנוכחי — ∣Q∣|Q| אפשרויות;
  2. תוכן התאים שנכתבו — כל אחד מ-ss התאים מכיל אות מ-Γ\Gamma, כלומר ∣Γ∣s|\Gamma|^{s} אפשרויות;
  3. מיקום הראש — ss אפשרויות.

לכן מספר הקונפיגורציות השונות חסום על ידי ∣Q∣⋅∣Γ∣s⋅s  =  2 lg⁡∣Q∣  +  s⋅lg⁡∣Γ∣  +  lg⁡s.|Q|\cdot|\Gamma|^{s}\cdot s \;=\; 2^{\,\lg|Q|\;+\;s\cdot\lg|\Gamma|\;+\;\lg s}.

כעת נחסום כל אחד משלושת המחוברים במעריך בביטוי שהוא ליניארי ב-ss, ובכך "נשטח" את המעריך:

  • lg⁡∣Q∣≤s⋅lg⁡∣Q∣\lg|Q|\le s\cdot\lg|Q|, כי s≥1s\ge 1;
  • s⋅lg⁡∣Γ∣s\cdot\lg|\Gamma| — כבר ליניארי ב-ss;
  • lg⁡s≤s\lg s\le s, כי lg⁡s≤s\lg s\le s לכל s≥1s\ge 1.

מכאן שמספר הקונפיגורציות חסום על ידי 2(lg⁡∣Q∣+lg⁡∣Γ∣+1)⋅s=2c⋅s2^{(\lg|Q|+\lg|\Gamma|+1)\cdot s}=2^{c\cdot s}.

לבסוף: MM דטרמיניסטית, ולכן אם היא מגיעה פעמיים לאותה קונפיגורציה היא נכנסת ללולאה אינסופית ואינה עוצרת. בהנחה ש-MM עוצרת על xx, כל הקונפיגורציות בריצה שונות זו מזו, ולכן מספר הצעדים אינו עולה על מספר הקונפיגורציות האפשריות: timeM(x)≤2c⋅spaceM(x).□\mathrm{time}_M(x)\le 2^{c\cdot \mathrm{space}_M(x)}. \qquad\square

הערה: בהרצאה זה נאמר בקיצור ("בעזרת טיעון על מספר קונפיגורציות"); הפירוט כאן. במיוחד, המעבר lg⁡s≤s\lg s\le s ו-lg⁡∣Q∣≤slg⁡∣Q∣\lg|Q|\le s\lg|Q| הוא בדיוק המקום שבו הקבוע cc מקבל את הצורה lg⁡∣Q∣+lg⁡∣Γ∣+1\lg|Q|+\lg|\Gamma|+1.

שני ההסברים שנוספו בסיכום לצד המשפט (עמוד 1):

① למה צריך את ההנחה "MM עוצרת". בלעדיה הטענה שקרית לחלוטין, ולא רק כי הקבוע לא מספיק: הזמן אינו חסום על ידי שום פונקציה של המקום. הדוגמה שניתנה בשיעור ([00:00:35]): מכונה שרצה לנצח על שני תאים בלבד. המקום הוא 22, אבל אין שום פונקציה gg שתקיים time≤g(2)\mathrm{time}\le g(2), כי הזמן אינסופי. שימו לב שהכיוון ההפוך (חלק א') נכון תמיד, ללא שום הנחה.

② סדר הכמתים ב-cc. הקבוע cc תלוי אך ורק במכונה (∣Q∣|Q| ו-∣Γ∣|\Gamma| שלה) ואינו תלוי בקלט xx — ולכן ניתן "להוציא אותו החוצה" לפני ה-∀x\forall x. זו נקודה שתחזור לרדוף אותנו בשיעור 3: כשהמכונה עצמה היא הקלט לבעיה, "קבוע התלוי במכונה" הופך פתאום לקבוע התלוי בקלט, והמשפט הזה כבר לא מספיק ([01:03:25] בהקלטה השנייה).

הערת דיוק חשובה ([00:01:08]): החסם 2c⋅s2^{c\cdot s} אינו הדוק. השטחנו כאן שלושה מחוברים שונים לאותה צורה. בהמשך הקורס נצטרך לחזור לחישוב מספר הקונפיגורציות ולחסום אותו אחרת — למשל כשה-space\mathrm{space} גדול מאוד, או כשרוצים חסם שאינו תלוי במכונה כלל.

משפט 2: DTime(f)⊆DSpace(f)\mathrm{DTime}(f)\subseteq \mathrm{DSpace}(f)

לכל f:N→Nf:\mathbb{N}\to\mathbb{N} מתקיים DTime(f)⊆DSpace(f)\mathrm{DTime}(f)\subseteq\mathrm{DSpace}(f).

הוכחה. תהא f:N→Nf:\mathbb{N}\to\mathbb{N}. תהא A∈DTime(f)A\in\mathrm{DTime}(f).

מהגדרת DTime(f)\mathrm{DTime}(f): קיימת מכונה MM וקיים c>0c>0 כך ש-MM מכריעה את AA, וגם לכל xx מתקיים timeM(x)≤c⋅f(∣x∣)\mathrm{time}_M(x)\le c\cdot f(|x|).

נוכיח ש-A∈DSpace(f)A\in\mathrm{DSpace}(f), כלומר: נראה שקיימת מכונה M′M' וקיים c′>0c'>0 כך ש-M′M' מכריעה את AA וגם לכל xx מתקיים spaceM′(x)≤c′⋅f(∣x∣)\mathrm{space}_{M'}(x)\le c'\cdot f(|x|).

  • נתבונן ב-MM (אותה מכונה — אין צורך בבנייה חדשה).
  • נתבונן ב-cc; אכן c>0c>0.
  • אכן MM מכריעה את AA (זה בדיוק מה שנתון).
  • יהי xx. לפי משפט 1 חלק א', spaceM(x) ≤ timeM(x) ≤ c⋅f(∣x∣).\mathrm{space}_M(x)\ \le\ \mathrm{time}_M(x)\ \le\ c\cdot f(|x|).

לכן A∈DSpace(f)A\in\mathrm{DSpace}(f), ומכיוון ש-AA נבחרה שרירותית, DTime(f)⊆DSpace(f)\mathrm{DTime}(f)\subseteq\mathrm{DSpace}(f). □\square

למה ההוכחה נראית "חזרתית" ובכל זאת כתובה כך. המרצה עמד על כך שגם כשההוכחה טריוויאלית, כותבים את כל חלקי ההגדרה — כולל "אכן c>0c>0" ו"אכן MM מכריעה את AA" ([00:11:32], [01:01:32]). הסיבה אינה פדנטיות: המקום שבו כתבנו "MM מכריעה את AA" כנתון והמקום שבו אנחנו נדרשים לזה כמסקנה הם שני מקומות שונים בהוכחה. בהוכחות הכבדות של הקורס (משפטי ההיררכיה, קוק–לוין) המבנה הזה הוא מה שמונע אובדן פרמטרים.

משפט 3: DSpace(f)⊆⋃d≥1DTime ⁣(2d⋅f)\mathrm{DSpace}(f)\subseteq\bigcup_{d\ge 1}\mathrm{DTime}\!\left(2^{d\cdot f}\right)

לכל f:N→Nf:\mathbb{N}\to\mathbb{N} מתקיים DSpace(f) ⊆ ⋃d≥1DTime ⁣(2 d⋅f).\mathrm{DSpace}(f)\ \subseteq\ \bigcup_{d\ge 1}\mathrm{DTime}\!\left(2^{\,d\cdot f}\right).

הכוונה ב-2d⋅f2^{d\cdot f} היא לפונקציה n↦2 d⋅f(n)n\mapsto 2^{\,d\cdot f(n)}.

מה בדיוק צריך להוכיח. צריך להראות ש-AA שייכת לאיחוד, כלומר: מספיק להראות שקיים d≥1d\ge 1 שעבורו A∈DTime(2d⋅f)A\in\mathrm{DTime}(2^{d\cdot f}). זהו הפרמטר הנוסף שנכנס להוכחה, ולכן צריך להיות כאן זהירים יותר מבמשפט 2.

הוכחה. תהא f:N→Nf:\mathbb{N}\to\mathbb{N}. תהא A∈DSpace(f)A\in\mathrm{DSpace}(f).

מהגדרת DSpace(f)\mathrm{DSpace}(f): קיימת מכונה MM וקיים c>0c>0 כך ש-MM מכריעה את AA, וגם לכל xx: spaceM(x)≤c⋅f(∣x∣).\mathrm{space}_M(x)\le c\cdot f(|x|).

מדוע פרסנו כאן את ההגדרה? כי היא מבטיחה קיום — היא נותנת לנו ליד את MM ואת cc, ומהם (ורק מהם) נבנה את הפרמטרים החדשים ([00:23:49]).

נסמן ב-Q,ΓQ,\Gamma את קבוצת המצבים ואלפבית הסרט של MM, ונגדיר: d=max⁡{ 1, (lg⁡∣Q∣+lg⁡∣Γ∣+1)⋅c },c^=1.d=\max\Big\{\,1,\ \big(\lg|Q|+\lg|\Gamma|+1\big)\cdot c\,\Big\},\qquad \hat c=1 .

אכן d≥1d\ge 1 כנדרש. נתבונן ב-MM (אותה מכונה) וב-c^=1>0\hat c=1>0. אכן MM מכריעה את AA.

יהי xx. מכיוון ש-MM מכריעה את AA, בפרט MM עוצרת על xx — וזה בדיוק התנאי הדרוש כדי להפעיל את משפט 1 חלק ב'. לכן: timeM(x) ≤ 2(lg⁡∣Q∣+lg⁡∣Γ∣+1)⋅spaceM(x) ≤ 2(lg⁡∣Q∣+lg⁡∣Γ∣+1)⋅c⋅f(∣x∣) ≤ 2 d⋅f(∣x∣) = c^⋅2 d⋅f(∣x∣).\mathrm{time}_M(x)\ \le\ 2^{(\lg|Q|+\lg|\Gamma|+1)\cdot \mathrm{space}_M(x)} \ \le\ 2^{(\lg|Q|+\lg|\Gamma|+1)\cdot c\cdot f(|x|)}\ \le\ 2^{\,d\cdot f(|x|)}\ =\ \hat c\cdot 2^{\,d\cdot f(|x|)} .

האי-שוויון האמצעי מותר כי הפונקציה t↦2αtt\mapsto 2^{\alpha t} עולה ב-tt עבור α>0\alpha>0, והצבנו את החסם spaceM(x)≤c⋅f(∣x∣)\mathrm{space}_M(x)\le c\cdot f(|x|). האי-שוויון האחרון נובע מכך ש-d≥(lg⁡∣Q∣+lg⁡∣Γ∣+1)⋅cd\ge(\lg|Q|+\lg|\Gamma|+1)\cdot c.

לכן A∈DTime(2d⋅f)A\in\mathrm{DTime}(2^{d\cdot f}), ומכאן A∈⋃d≥1DTime(2d⋅f)A\in\bigcup_{d\ge 1}\mathrm{DTime}(2^{d\cdot f}). □\square

חשבון הפרמטרים — למה c^=1\hat c=1 ולמה dd הוא זה. אחרי הצבת החסם על space\mathrm{space}, האגף הימני הוא בדיוק מהצורה 2 e⋅f(∣x∣)2^{\,e\cdot f(|x|)} עבור מעריך ee כלשהו, בלי שום מקדם כפלי לפניו. הקבוע c^\hat c הוא, לפי ההגדרה, המקדם שכופל את 2d⋅f(∣x∣)2^{d\cdot f(|x|)} — ומכיוון שאין שם מקדם, c^=1\hat c=1 ([00:32:05]). ו-dd הוא כל מה שמוכפל ב-ff בתוך המעריך ([00:33:09]).

בדיקת שפיות (sanity check) שהמרצה הדגיש ([00:33:39]): ברגע שקובעים dd, כל מה שנכנס לביטוי — ∣Q∣|Q|, ∣Γ∣|\Gamma|, cc — כבר "ביד" מהשלב הקודם. אילו היינו נדרשים ל-xx או לגודל שתלוי בקלט, ההוכחה הייתה נופלת, כי dd נבחר לפני ה-∀x\forall x.

הערה: הסיכום כותב d=(lg⁡∣Q∣+lg⁡∣Γ∣+1)⋅cd=(\lg|Q|+\lg|\Gamma|+1)\cdot c ללא ה-max⁡\max. זה כמעט תמיד תקין, אבל אינו מובטח: הדרישה באיחוד היא d≥1d\ge 1, בעוד ההגדרה של DSpace\mathrm{DSpace} מבטיחה רק c>0c>0 — ואם למשל c=0.1c=0.1 ו-∣Q∣=∣Γ∣=2|Q|=|\Gamma|=2 נקבל d=0.3<1d=0.3<1. בשיעור עצמו סטודנט העלה בדיוק את הקושי הזה, והמרצה אישר שמותר "לתפור" את הקבוע כרצוננו ([00:24:21]–[00:24:53]). לקיחת max⁡{1,⋅}\max\{1,\cdot\} פותרת זאת ואינה פוגעת בחסם, כי הגדלת dd רק מגדילה את 2d⋅f2^{d\cdot f}.

משפט 4: מונוטוניות ביחס לסדר גודל

תהיינה f,g:N→Nf,g:\mathbb{N}\to\mathbb{N} ונניח f=O(g)f=O(g). אז DTime(f)⊆DTime(g)\mathrm{DTime}(f)\subseteq\mathrm{DTime}(g)

וגם

DSpace(f)⊆DSpace(g).\mathrm{DSpace}(f)\subseteq\mathrm{DSpace}(g).

הוכחה (עבור DTime\mathrm{DTime}; המקרה של DSpace\mathrm{DSpace} זהה מילה במילה עם החלפת time\mathrm{time} ב-space\mathrm{space}).

תהיינה f,gf,g ונניח f=O(g)f=O(g). לפי הגדרה 3, קיים c>0c>0 כך שלכל n∈Nn\in\mathbb{N}: f(n)≤c⋅g(n).f(n)\le c\cdot g(n).

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

תהא A∈DTime(f)A\in\mathrm{DTime}(f). אז קיימת מכונה MM וקיים c^>0\hat c>0 כך ש-MM מכריעה את AA וגם לכל xx: timeM(x)≤c^⋅f(∣x∣).\mathrm{time}_M(x)\le \hat c\cdot f(|x|).

נתבונן ב-MM (אין מאיפה להביא מכונה אחרת) ונגדיר c˘=c^⋅c.\breve c=\hat c\cdot c .

אכן c˘>0\breve c>0 כמכפלת שני מספרים חיוביים, ואכן MM מכריעה את AA. יהי xx; אז timeM(x) ≤ c^⋅f(∣x∣) ≤ c^⋅c⋅g(∣x∣) = c˘⋅g(∣x∣).\mathrm{time}_M(x)\ \le\ \hat c\cdot f(|x|)\ \le\ \hat c\cdot c\cdot g(|x|)\ =\ \breve c\cdot g(|x|).

לכן A∈DTime(g)A\in\mathrm{DTime}(g), ומכאן DTime(f)⊆DTime(g)\mathrm{DTime}(f)\subseteq\mathrm{DTime}(g). □\square

שאלה טובה שנשאלה ([00:10:01] בהקלטה השנייה): "האם c˘=c^⋅c\breve c=\hat c\cdot c באמת חיובי? אם שניהם קטנים מ-1, המכפלה קטנה משניהם." התשובה: המכפלה אכן עשויה להיות קטנה משני הגורמים, אבל זה לא משנה — ההגדרה דורשת רק c˘>0\breve c>0, לא c˘≥1\breve c\ge 1 ולא c˘≥max⁡\breve c\ge\max. ומעבר לכך, שרשרת האי-שוויונות למעלה מוכיחה את החסם ישירות, ללא כל הנחה על גודל הקבועים.

למה המשפט הזה חשוב. בלעדיו הכתיב DTime(n2)\mathrm{DTime}(n^2) היה שרירותי: הוא מבטיח שהמחלקות "מכבדות" סדרי גודל, ולכן הבחירה בין f(n)=n2f(n)=n^2 ל-f(n)=3n2+5f(n)=3n^2+5 אינה משנה את המחלקה. הוא גם הכלי המרכזי בהוכחת PSPACE⊆EXP\mathrm{PSPACE}\subseteq \mathrm{EXP} (משפט 6).

משפט 5: P⊆PSPACEP\subseteq \mathrm{PSPACE}

הוכחה א' (הוכחה "ארוכה", כפי שנעשתה בשיעור). תהא A∈PA\in P.

מהגדרת PP כאיחוד: קיים c≥1c\ge 1 כך ש-A∈DTime(nc)A\in\mathrm{DTime}(n^c). (אי אפשר לקפוץ ישר למכונה — PP אינה מוגדרת על ידי מכונות אלא כאיחוד, ולכן קודם מקלפים את ה-"קיים cc", [01:09:40].)

מהגדרת DTime(nc)\mathrm{DTime}(n^c): קיימת מכונה MM וקיים d>0d>0 כך ש-MM מכריעה את AA וגם לכל xx: timeM(x) ≤ d⋅∣x∣c.\mathrm{time}_M(x)\ \le\ d\cdot |x|^{c}.

שימו לב להצבה: הפונקציה כאן היא n↦ncn\mapsto n^c, והמשתנה שאנחנו עובדים איתו הוא ∣x∣|x| — ולכן d⋅∣x∣cd\cdot|x|^c ולא "d⋅ncd\cdot n^c" ([01:11:26]).

כדי להוכיח A∈PSPACEA\in \mathrm{PSPACE} צריך להראות שקיים α≥1\alpha\ge 1 עם A∈DSpace(nα)A\in\mathrm{DSpace}(n^\alpha). נתבונן ב-α=c\alpha=c (הפרמטר היחיד שיש לנו ביד), ואז צריך להראות A∈DSpace(nc)A\in\mathrm{DSpace}(n^c):

  • נתבונן ב-MM וב-dd; אכן d>0d>0 ואכן MM מכריעה את AA.
  • יהי xx. לפי משפט 1 חלק א': spaceM(x) ≤ timeM(x) ≤ d⋅∣x∣c.\mathrm{space}_M(x)\ \le\ \mathrm{time}_M(x)\ \le\ d\cdot|x|^{c}.

לכן A∈DSpace(nc)A\in\mathrm{DSpace}(n^c), ולכן A∈PSPACEA\in \mathrm{PSPACE}. □\square

הוכחה ב' (הפתרון האלטרנטיבי, עמוד 4 בסיכום). תהא A∈PA\in P. אז קיים c≥1c\ge 1 כך ש-A∈DTime(nc)A\in\mathrm{DTime}(n^c). לפי משפט 2 (עם f(n)=ncf(n)=n^c), DTime(nc)⊆DSpace(nc)\mathrm{DTime}(n^c)\subseteq\mathrm{DSpace}(n^c), ולכן A∈DSpace(nc)A\in\mathrm{DSpace}(n^c) ומכאן A∈PSPACEA\in \mathrm{PSPACE}. □\square

הערה: שתי ההוכחות תקפות לחלוטין, והשנייה קצרה בהרבה. המרצה הסביר במפורש ([01:16:21], [01:17:26]) שהוא פתח דווקא בארוכה מטעם דידקטי: היכולת לפרק הגדרה, להוציא את כל הפרמטרים, להשתמש בהם ולהרכיב אותם בחזרה היא המיומנות שכל ההוכחות הכבדות בקורס עומדות עליה. בבחינה — שתיהן מתקבלות.

משפט 6: PSPACE⊆EXP\mathrm{PSPACE}\subseteq \mathrm{EXP}

(מופיע בהקלטה השנייה בלבד, [00:17:29]–[00:33:08]; אינו בסיכום.)

אינטואיציה. אם היחס בין מקום לזמן הוא אקספוננציאלי (משפט 1 חלק ב'), אז מי שנפתר במקום פולינומי חייב להיפתר בזמן אקספוננציאלי. אבל בין האינטואיציה הזו לבין ההגדרה הפורמלית של EXP\mathrm{EXP} יש פער טכני אמיתי, וכל עניינה של ההוכחה הוא לגשר עליו.

הוכחה. תהא A∈PSPACEA\in \mathrm{PSPACE}. אז קיים c≥1c\ge 1 כך ש-A∈DSpace(nc)A\in\mathrm{DSpace}(n^c), ולכן קיימת מכונה MM וקיים c′>0c'>0 כך ש-MM מכריעה את AA וגם לכל xx: spaceM(x)≤c′⋅∣x∣c.\mathrm{space}_M(x)\le c'\cdot|x|^{c}.

MM מכריעה את AA, ולכן עוצרת על כל קלט. לפי משפט 1 חלק ב' קיים c′′>0c''>0 (התלוי רק ב-MM) כך שלכל xx: timeM(x) ≤ 2 c′′⋅spaceM(x) ≤ 2 c′′⋅c′⋅∣x∣c.\mathrm{time}_M(x)\ \le\ 2^{\,c''\cdot \mathrm{space}_M(x)}\ \le\ 2^{\,c''\cdot c'\cdot |x|^{c}} .

עד כאן קיבלנו A∈DTime ⁣(2 c′′c′⋅nc)A\in\mathrm{DTime}\!\left(2^{\,c''c'\cdot n^{c}}\right) — וזו עדיין לא הגדרת EXP\mathrm{EXP}, שדורשת מחלקה מהצורה DTime(2nk)\mathrm{DTime}(2^{n^{k}}) בדיוק, בלי קבועים בתוך המעריך.

נסמן g(n)=2 c′′c′⋅nc,h(n)=2 nc+1.g(n)=2^{\,c''c'\cdot n^{c}},\qquad h(n)=2^{\,n^{c+1}} .

נטען ש-g=O(h)g=O(h). אכן, לכל n≥n0:=c′′c′n\ge n_0:=c''c' מתקיים c′′c′⋅nc≤n⋅nc=nc+1c''c'\cdot n^{c}\le n\cdot n^{c}=n^{c+1}, ומכיוון ש-2t2^{t} עולה ב-tt נקבל g(n)≤h(n)g(n)\le h(n) לכל n≥n0n\ge n_0. לפי הגדרת OO (ובעזרת השקילות מהגדרה 3, שמאפשרת לוותר על n0n_0 במחיר קבוע), g=O(h)g=O(h).

לפי משפט 4, DTime(g)⊆DTime(h)\mathrm{DTime}(g)\subseteq\mathrm{DTime}(h), ולכן A∈DTime ⁣(2 nc+1)⊆EXP.□A\in\mathrm{DTime}\!\left(2^{\,n^{c+1}}\right)\subseteq \mathrm{EXP}. \qquad\square

למה זו הדרך הנכונה. אפשר, לחלוטין, לרדוף אחרי הקבוע ולמצוא במפורש DD ו-D′D' כך ש-timeM(x)≤D⋅2∣x∣D′\mathrm{time}_M(x)\le D\cdot 2^{|x|^{D'}} לכל xx — וזה אפילו לא קשה (ראו התרגיל בסעיף הבא). אבל זו עבודה טכנית מיותרת: מכיוון שבסופו של דבר אנחנו מסתכלים על סדרי גודל, נכון יותר לשאול מה קורה כשהקלט הולך וגדל, לזהות שמאורך מסוים כל הקבועים "נבלעים" בתוך nn, ואז לקבל את המעבר מ-n0n_0 ל"לכל nn" בחינם משקילות הגדרות ה-OO ([00:28:19]–[00:34:41]).


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

דוגמה 1: PAL∈DTime(n2)PAL\in\mathrm{DTime}(n^2), מפורק עד הסוף

PAL={x∈{0,1}∗∣x=xR}PAL=\{x\in\{0,1\}^*\mid x=x^R\} — שפת הפלינדרומים מעל {0,1}\{0,1\}.

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

חשבון הזמן. בסבב מספר ii (כאשר i=1,2,…i=1,2,\dots) נותרו n−2(i−1)n-2(i-1) תווים, והמכונה עוברת את המרווח הזה הלוך ושוב — כלומר כ-2(n−2(i−1))2\big(n-2(i-1)\big) צעדים. סכימה על כל הסבבים, i=1,…,⌈n/2⌉i=1,\dots,\lceil n/2\rceil: timeM(x) ≈ ∑i=1⌈n/2⌉2(n−2(i−1)) ≤ 2⋅n2⋅n = n2.\mathrm{time}_M(x)\ \approx\ \sum_{i=1}^{\lceil n/2\rceil} 2\big(n-2(i-1)\big)\ \le\ 2\cdot \frac{n}{2}\cdot n\ =\ n^2 .

אם ניקח f(n)=n2f(n)=n^2 ו-c=2c=2 (כדי לבלוע בנדיבות את צעדי הבקרה), נקבל timeM(x)≤c⋅f(∣x∣)\mathrm{time}_M(x)\le c\cdot f(|x|) לכל xx, ולכן PAL∈DTime(f)PAL\in\mathrm{DTime}(f).

מופע קונקרטי — x=0110x=0110 (n=4n=4): סבב 1 משווה את התו הראשון 00 לתו האחרון 00 — התאמה, שניהם נמחקים; נותר 1111. סבב 2 משווה 11 ל-11 — התאמה. לא נותרו תווים ⟸ קבל. סה"כ כ-8+4=12≤2⋅428+4=12\le 2\cdot 4^2 צעדים.

אי-מופע — x=0100x=0100: סבב 1 משווה 00 ל-00 — התאמה; נותר 1010. סבב 2 משווה 11 ל-00 — אי-התאמה ⟸ דחה.

על הסימון. פורמלית היינו צריכים לכתוב: "תהא f:N→Nf:\mathbb{N}\to\mathbb{N} המוגדרת על ידי f(n)=n2f(n)=n^2 לכל n∈Nn\in\mathbb{N}; אז PAL∈DTime(f)PAL\in\mathrm{DTime}(f)." מקובל לקצר ולכתוב פשוט PAL∈DTime(n2)PAL\in\mathrm{DTime}(n^2). שימו לב ש-n2n^2 הוא מספר, לא פונקציה — הכתיב הזה הוא קיצור שממנו מובן לאיזו פונקציה התכוונו ([00:45:24]).

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

תרגיל 1 (נשאל בכיתה, [00:15:49])

אם מספר הצעדים שהמכונה מבצעת נשאר בדיוק אותו דבר, אבל הקלט נעשה ארוך יותר — האם הסיבוכיות גדלה או קטנה?

פתרון. קטנה. סיבוכיות נמדדת ביחס לאורך הקלט: אם timeM(x)\mathrm{time}_M(x) קבוע ו-∣x∣|x| גדל, אז היחס timeM(x)/f(∣x∣)\mathrm{time}_M(x)/f(|x|) קטן, והחסם c⋅f(∣x∣)c\cdot f(|x|) הופך נדיב יותר. האינטואיציה שהוצעה בשיעור: חִשבו על זמן ומקום כעל מחיר ועל הקלט כעל מה שקיבלתם תמורתו — שילמתם אותו מחיר וקיבלתם קלט גדול יותר, כלומר עשיתם עסקה טובה יותר.

תרגיל 2 (עלה כשאלה, [00:14:08])

למה כתוב f(∣x∣)f(|x|) ולא f(x)f(x)?

פתרון. ff מוגדרת מ-N\mathbb{N} ל-N\mathbb{N}, ו-xx הוא מחרוזת מעל אלפבית כלשהו. f(x)f(x) הוא ביטוי חסר משמעות — אין ל-ff הגדרה על מחרוזות. ∣x∣|x| הוא אורך המחרוזת, שהוא מספר טבעי, ולכן f(∣x∣)f(|x|) מוגדר היטב. הערכים המוחלטים כאן אינם קידוד ואינם ייצוג — הם פשוט אורך.

תרגיל 3: מציאת הקבוע במפורש ב-PSPACE⊆EXP\mathrm{PSPACE}\subseteq \mathrm{EXP}

במשפט 6 עקפנו את חיפוש הקבוע. מצאו אותו במפורש.

פתרון. נסמן n0=c′′c′n_0=c''c'. הראינו שלכל xx עם ∣x∣≥n0|x|\ge n_0 מתקיים timeM(x)≤2∣x∣c+1\mathrm{time}_M(x)\le 2^{|x|^{c+1}}. נותרו קלטים באורך <n0<n_0 — ויש מספר סופי של קלטים כאלה (האלפבית סופי). MM מכריעה את AA, ולכן עוצרת על כל אחד מהם; נסמן ב-TT את המקסימום של timeM(x)\mathrm{time}_M(x) על פני קבוצה סופית זו. ניקח D=max⁡{1, T}.D=\max\{1,\ T\}. אז לכל xx: אם ∣x∣≥n0|x|\ge n_0 אז timeM(x)≤2∣x∣c+1≤D⋅2∣x∣c+1\mathrm{time}_M(x)\le 2^{|x|^{c+1}}\le D\cdot 2^{|x|^{c+1}}, ואם ∣x∣<n0|x|<n_0 אז timeM(x)≤T≤D≤D⋅2∣x∣c+1\mathrm{time}_M(x)\le T\le D\le D\cdot 2^{|x|^{c+1}}. לכן A∈DTime(2nc+1)A\in\mathrm{DTime}(2^{n^{c+1}}). זהו בדיוק המנגנון שמאחורי השקילות בהגדרה 3 — "בליעת" מספר סופי של קלטים חריגים בתוך הקבוע.

תרגיל 4: קריאת הקיצור DTime(2O(f))\mathrm{DTime}(2^{O(f)})

מה הולך לאיבוד בכתיב המקוצר?

פתרון. לפעמים מקצרים ⋃d≥1DTime(2d⋅f)\bigcup_{d\ge1}\mathrm{DTime}(2^{d\cdot f}) ל-DTime(2O(f))\mathrm{DTime}(2^{O(f)}). מה שנעלם הוא הפרמטר dd והכמת שמעליו. שייכות לאיחוד היא טענת קיום, ובלי הפרמטר אין במה "לתפוס" את ההוכחה. הקיצור לגיטימי ואתם חייבים לדעת לקרוא אותו, אבל כשאתם באים להוכיח שייכות — פתחו אותו חזרה ל-"קיים d≥1d\ge1 כך ש..." ([00:47:29]–[00:49:02]).

תרגיל 5: DTime(n)⊆DTime(n2)\mathrm{DTime}(n)\subseteq\mathrm{DTime}(n^2)

פתרון. f(n)=nf(n)=n, g(n)=n2g(n)=n^2. מתקיים f(n)=n≤1⋅n2=g(n)f(n)=n\le 1\cdot n^2=g(n) לכל n∈Nn\in\mathbb{N}, ולכן f=O(g)f=O(g) עם c=1c=1 (בגרסה ללא n0n_0). לפי משפט 4, DTime(n)⊆DTime(n2)\mathrm{DTime}(n)\subseteq\mathrm{DTime}(n^2). שימו לב שהמשפט אינו אומר דבר על הכלה ממש — השאלה אם ההכלה חזקה היא בדיוק נושא שיעור 3 (משפטי ההיררכיה).


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

  • [00:01:08] החסם על מספר הקונפיגורציות אינו הדוק, וזה יחזור. "לפעמים אנחנו נרצה לחזור לכאן — עם ה-space מאוד גדול, יכול להיות שזה משמעותי." ואכן, בשיעור 3 חוזרים בדיוק לחישוב הזה וחוסמים אותו אחרת כדי לקבל קבוע שאינו תלוי במכונה.
  • [00:01:40] סדר הכמתים. "תשימו לב לסדר הכמתים, זה מאוד מאוד חשוב." זו האזהרה החוזרת ביותר בשיעור, והיא הנקודה שקורסת בשיעור 3 כשהמכונה עצמה היא הקלט.
  • [00:04:28] אינטואיציה מול פורמליזם. "בהגדרה האינטואיטיבית הייתי משתמש כשאני רוצה לחשוב על המחלקות, אבל לא כשאני צריך לשבת ולהוכיח משהו עליהן." כשמוכיחים — יורדים לפורמליזם, כי רק הוא נותן ליד את המכונה ואת הקבועים.
  • [00:06:01] שאלת סטודנט: אוטומטים או מכונות טיורינג? מכונות טיורינג. לאוטומט הזמן ידוע מראש והוא ליניארי, ולכן אין בו עניין סיבוכיותי.
  • [00:08:17] "אני לא מניח שיש איבר — אני לוקח איבר." תיקון ניסוח שהמרצה עמד עליו: בהוכחת הכלה ∀A∈X: A∈Y\forall A\in X:\ A\in Y אין הנחת קיום; לוקחים איבר שרירותי. הבלבול הזה הוא מקור נפוץ לשגיאות.
  • [00:09:58] אל תתחילו מהסוף של ההגדרה. טעות נפוצה: מרגישים שכבר "כתבנו את ההתחלה" של ההגדרה בצד הנתון, ולכן קופצים ישר לאי-שוויון בצד שצריך להוכיח. בצד הנתון פרסנו את מה שנובע; בצד שצריך להוכיח צריך להוכיח את הכול מחדש.
  • [00:17:26] מחלקה היא קבוצה שאיבריה שפות. AA אינה מכונת טיורינג.
  • [00:23:49] מתי מצטטים הגדרה? "כשהיא מבטיחה לי קיום של משהו." אם ההגדרה מספקת מכונה או קבוע שאזדקק להם — פורסים אותה. אחרת, בדרך כלל לא.
  • [00:33:39] בדיקת שפיות. כשקובעים קבוע חדש, ודאו שהוא מורכב רק מדברים שכבר יש ביד באותו שלב בהוכחה. שימוש במשתנה שעדיין לא הוצג הוא כמעט תמיד סימן לשגיאה מהותית.
  • [00:41:06] מדוע "מחלקות עדינות". כי כל פונקציה ff מייצרת מחלקה משלה — התאמה חד-חד-ערכית בין פונקציות למחלקות.
  • [00:49:33] על קיצורים. "כל זמן שזה תלוי בי אני לא אקצר — אבל אתם כן צריכים לדעת לקרוא את זה. מישהו אחר יקצר לכם."
  • [01:00:30] עבדו בטיוטה. הקבועים (dd, c^\hat c, c˘\breve c) נמצאים בטיוטה, ולהוכחה מגיעים כשכבר יודעים מה הם. אל תנסו לכתוב הוכחה כזו ב-one pass.
  • [01:19:36] מה הלאה. "שיעור הבא נגיע למשפט ההיררכיה, ואז תראו מה זו הוכחה מורכבת. קחו אוויר."
  • [01:20:38] על שינון. ההמלצה: לא לשנן הגדרות. לכתוב את ההגדרה על פתק, לתלות אותה מול העיניים, ולפתור מספיק תרגילים עד שהיא נכנסת דרך שימוש. עד כשלושה ימים לפני המבחן — לעבוד עם החומר פתוח.
  • [00:14:47] בהקלטה השנייה: PP כ"קל" ומחוץ ל-PP כ"קשה". מקובל לזהות את PP עם הבעיות הפתירות ביעילות. כל מה שנפגשתם בו בקורסי אלגוריתמים היה בתוך PP.
  • [00:15:53] בהקלטה השנייה: הפער בתוך PP עצמה. יש תהום בין DTime(n)\mathrm{DTime}(n) ל-DTime(n100)\mathrm{DTime}(n^{100}) — האחרון אינו ישים בפועל, ועדיין הוא ב-PP. ההצדקה האמפירית לזיהוי PP="יעיל": כשמצליחים לפתור בעיה בזמן פולינומי כלשהו, בדרך כלל מוצאים אחר כך גם פולינום קטן.
  • [00:16:57] בהקלטה השנייה: גם קושי הוא מוצר. שיטת ההצפנה RSA נשענת על ההשערה שפירוק לגורמים ראשוניים אינו ניתן לפתרון בזמן פולינומי. לא יודעים להוכיח זאת, אך מסתמכים על כך.

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

  • מקור: עמוד 1 בסיכום. הפער: הסיכום נפתח באמצע ניסוח המשפט על הקשר בין זמן למקום ואינו כולל את הוכחתו (היא נעשתה בשיעור 1); ההקלטה מזכירה אותה בשלוש שורות בלבד. ההכרעה: שחזרתי את הספירה המלאה של הקונפיגורציות כמשפט 1, כולל הצדקת כל אחד משלושת המעברים שמייצרים את c=lg⁡∣Q∣+lg⁡∣Γ∣+1c=\lg|Q|+\lg|\Gamma|+1, בהסתמך על החישוב שנעשה במפורש בהקלטה השנייה ב-[01:13:37]–[01:15:14].
  • מקור: עמוד 2 בסיכום, הוכחת משפט 3. הפער: הסיכום קובע d=(lg⁡∣Q∣+lg⁡∣Γ∣+1)⋅cd=(\lg|Q|+\lg|\Gamma|+1)\cdot c, אך האיחוד הוא על d≥1d\ge 1 בעוד ההגדרה מבטיחה רק c>0c>0 — ולכן ייתכן d<1d<1 (למשל c=0.1c=0.1, ∣Q∣=∣Γ∣=2|Q|=|\Gamma|=2). ההכרעה: תיקנתי בגוף ל-d=max⁡{1,(lg⁡∣Q∣+lg⁡∣Γ∣+1)⋅c}d=\max\{1,(\lg|Q|+\lg|\Gamma|+1)\cdot c\}. התיקון אינו פוגע בחסם כי 2d⋅f2^{d\cdot f} מונוטונית עולה ב-dd. הקושי הזה הועלה בפועל על ידי סטודנט בהקלטה ב-[00:24:21] והמרצה אישר את עקרון "התפירה" של הקבוע.
  • מקור: ההקלטה השנייה, [00:17:29]–[00:33:08]. הפער: המשפט PSPACE⊆EXP\mathrm{PSPACE}\subseteq \mathrm{EXP} נלמד ולא מופיע בסיכום כלל. ההכרעה: הוספתי אותו כמשפט 6, כולל שתי הדרכים (חיפוש הקבוע מול הטיעון האסימפטוטי), כי הוא ההשלמה הטבעית ל-P⊆PSPACEP\subseteq \mathrm{PSPACE} ומדגים את השימוש במשפט 4.
  • מקור: עמוד 3 בסיכום, ההערה האדומה על הגדרת OO. הפער: כיוון אי-השוויון בכתב היד ניתן לקריאה כ-≥\ge. ההכרעה: ההגדרה הנכונה של f=O(g)f=O(g) היא f(n)≤c⋅g(n)f(n)\le c\cdot g(n), וכך גם נאמר במפורש בשתי ההקלטות ([00:52:32] ו-[00:04:10] בהקלטה השנייה). כתבתי ≤\le.
  • מקור: עמוד 2 בסיכום, שורת ה-PAL. הפער: נראה שכתוב "PAL=DTime(f)PAL=\mathrm{DTime}(f)" במקום "PAL∈DTime(f)PAL\in\mathrm{DTime}(f)". ההכרעה: מדובר בשפה בודדת מול מחלקה של שפות, ולכן היחס הוא שייכות; כתבתי ∈\in. ההקלטה ([00:44:23]) אומרת "פל ב-DTime f", כלומר שייכות.
  • מקור: עמוד 3 בסיכום. הפער: המחלקה נכתבת "EXEX". ההכרעה: הכוונה ל-EXP\mathrm{EXP} (בהקלטה: "אקספ"); כתבתי EXP\mathrm{EXP}. באותו אופן, הסיכום כותב EXSPACEEXSPACE ואני כתבתי EXPSPACE\mathrm{EXPSPACE} — אותו אובייקט.
  • מקור: שני המקורות. הפער: נושא חוסן המודל (מדוע בחירת מודל המכונה אינה משנה את PP) אינו נדון בשיעור הזה כלל. ההתייחסות היחידה למודל היא ההסכמה שב-[00:43:50] ש"מכונה" פירושה חד-סרטית סטנדרטית, ואזהרה שחסמים קונקרטיים כמו n2n^2 עבור PALPAL כן תלויים במודל. ההכרעה: לא הוספתי דיון בחוסן המודל כדי לא להמציא חומר; ציינתי את הסכמת המודל ואת תלות החסם בו.
  • מקור: ההקלטה השנייה (video_id ilc7hKBsa1Q). הפער: מדקה 36 ואילך ההקלטה עוברת למשפט היררכיית המקום — הגדרת "ישימה במקום", השפה SfS_f, טענת העזר על 23f(⟨M⟩)2^{3f(\langle M\rangle)} צעדים — שהוא כולו חומר של שיעור 3. ההכרעה: סימנתי coverage: partial והשארתי את החומר הזה מחוץ לקובץ.
  • מקור: עמוד 1 בסיכום. הפער: הקיצור שליד "לכל מכונה MM" אינו קריא בבירור. ההכרעה: מההקשר ומההקלטה ([00:01:40] "לכל מכונה") ברור שהכוונה למכונת טיורינג דטרמיניסטית; כתבתי כך.

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

מה חייבים לדעת בעל פה (או, לפי המלצת המרצה, מתוך שימוש חוזר):

  1. A∈DTime(f)A\in\mathrm{DTime}(f)   ⟺  \iff ∃M ∃c>0\exists M\ \exists c>0: MM מכריעה את AA וגם ∀x: timeM(x)≤c⋅f(∣x∣)\forall x:\ \mathrm{time}_M(x)\le c\cdot f(|x|). אותו הדבר ל-DSpace\mathrm{DSpace}.
  2. spaceM(x)≤timeM(x)\mathrm{space}_M(x)\le \mathrm{time}_M(x) — תמיד, ללא הנחות.
  3. אם MM עוצרת על xx: timeM(x)≤2c⋅spaceM(x)\mathrm{time}_M(x)\le 2^{c\cdot\mathrm{space}_M(x)} עם c=lg⁡∣Q∣+lg⁡∣Γ∣+1c=\lg|Q|+\lg|\Gamma|+1 התלוי רק במכונה.
  4. DTime(f)⊆DSpace(f)\mathrm{DTime}(f)\subseteq\mathrm{DSpace}(f);  DSpace(f)⊆⋃d≥1DTime(2d⋅f)\ \mathrm{DSpace}(f)\subseteq\bigcup_{d\ge1}\mathrm{DTime}(2^{d\cdot f}).
  5. f=O(g) ⇒ DTime(f)⊆DTime(g)f=O(g)\ \Rightarrow\ \mathrm{DTime}(f)\subseteq\mathrm{DTime}(g) ו-DSpace(f)⊆DSpace(g)\mathrm{DSpace}(f)\subseteq\mathrm{DSpace}(g).
  6. P⊆PSPACE⊆EXPP\subseteq \mathrm{PSPACE}\subseteq \mathrm{EXP}.

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

  • שכחת הנחת העצירה. כל שימוש בחסם 2c⋅space2^{c\cdot\mathrm{space}} מחייב הצדקה מפורשת ש-MM עוצרת על הקלט הנדון. בהוכחות שלנו זה תמיד מגיע מ"MM מכריעה את AA, ולכן עוצרת על כל קלט". בלי ההנחה הזו הטענה שקרית — הזמן אינו חסום על ידי שום פונקציה של המקום.
  • קפיצה מעל האיחוד. כשמוכיחים שייכות ל-PP/PSPACE\mathrm{PSPACE}/EXP\mathrm{EXP} — קודם "קיים c≥1c\ge1", ורק אחר כך "קיימת מכונה". אי אפשר לגשת ישר למכונה, כי המחלקה הגסה אינה מוגדרת דרך מכונות.
  • בלבול f(x)f(x) עם f(∣x∣)f(|x|).
  • קבוע שנבנה ממשתנה שעדיין לא קיים. כל קבוע חדש חייב להיות מורכב מפרמטרים שכבר "הוצאו" מהגדרות קודמות, ולהיקבע לפני ה-∀x\forall x.
  • התעלמות מ-d≥1d\ge 1 / c≥1c\ge 1 בהגדרות האיחודים. כשהקבוע שהתקבל קטן מ-1 — קחו max⁡\max.
  • הנחה ש"פלינדרומים זה ליניארי". לא במודל החד-סרטי.

צ'קליסט — אחרי השיעור הזה אתם אמורים לדעת:

  • לכתוב מזיכרון את הגדרות DTime(f)\mathrm{DTime}(f) ו-DSpace(f)\mathrm{DSpace}(f) עם סדר הכמתים הנכון.
  • להוכיח שייכות של שפה נתונה למחלקה עדינה על ידי הצגת מכונה, קבוע, וחסם — בכל חמשת חלקי ההגדרה.
  • להוכיח הכלה בין שתי מחלקות עדינות/גסות במבנה המלא: לקחת איבר, לפרוס את ההגדרה הנתונה, להגדיר את הפרמטרים החדשים מתוך הישנים, ולהרכיב את ההגדרה שצריך להוכיח.
  • לחשב את מספר הקונפיגורציות של מכונה בריצה שהמקום שלה חסום, ולהסיק ממנו חסם זמן.
  • לזהות מתי כדאי לרדוף אחרי קבוע מפורש ומתי עדיף לעבור לטיעון אסימפטוטי דרך משפט 4.
  • לקרוא נכון קיצורים כמו DTime(2O(f))\mathrm{DTime}(2^{O(f)}) ו-DTime(n2)\mathrm{DTime}(n^2), ולפתוח אותם חזרה לניסוח הפורמלי בעת הצורך.

הסיכום הכתוב הוא של גיא סופר.

Questions left open

  • עמוד 3 בסיכום: כיוון אי-השוויון בהגדרת O נקרא בכתב היד כ-≥; שתי ההקלטות אומרות ≤, וכך נכתב.
  • עמוד 1 בסיכום: הקיצור שאחרי 'לכל מכונה M' אינו קריא במלואו; פוענח לפי ההקשר כמכונת טיורינג דטרמיניסטית.
  • עמידות המודל (model robustness) אינה מכוסה באף אחד מהמקורות ולכן אינה נכתבת כאן; ההערה היחידה בנושא היא מוסכמת הסרט היחיד ב-[00:43:50].