15אלגוריתמים אקראיים: מבוא, בעיית המזכיר ואלגוריתם Freivalds

השיעור מציג את הרעיון של אלגוריתם שמטיל מטבעות — כאשר ההסתברות נלקחת אך ורק על המטבעות הפנימיים של האלגוריתם והקלט נשאר שרירותי ובמקרה הגרוע — ומדגים אותו בשני אלגוריתמים המנותחים עד הסוף: אלגוריתם לבעיית המזכיר שמצליח בהסתברות $\ge \tfrac14$ שם ששום אלגוריתם דטרמיניסטי אינו מבטיח דבר, ואלגוריתם Freivalds לווידוא כפל מטריצות ב-$O(n^2)$ עם טעות חד-צדדית $\le \tfrac12$ שניתן להגבירה ל-$\le 2^{-t}$ ב-$t$ חזרות בלתי תלויות.

ביטחון: high2 הקלטות3 עמודי סיכוםrandomized-algorithmssecretary-problemfreivalds-algorithmprobability-amplificationone-sided-erroradversary-argument

נשען על: שיעור 12, שיעור 13, שיעור 14

עמודי הסיכום בכתב יד

פתיחת עמוד 1 בגודל מלא

סיבוכיות שיעור 15 אלגוריתמים אקראיים.pdf

עמוד 1 מתוך 3 בסיכום הכתב יד

בקצרה

  • אלגוריתם אקראי הוא אלגוריתם שרשאי, בנוסף לקלט, להטיל מטבעות הוגנים ובלתי תלויים ולהשתמש בתוצאתם. כל טענה הסתברותית בשיעור הזה נלקחת אך ורק על המטבעות של האלגוריתם — הקלט נשאר שרירותי, נבחר על ידי "אויב אכזר" שמכיר את קוד האלגוריתם אך לא את תוצאות ההטלות, והערובה נדרשת לכל קלט, לא לקלט אקראי. זו הנקודה שהכי קל להתבלבל בה, וזה הדבר היחיד שחייבים לקחת מהשיעור אם לוקחים ממנו דבר אחד.
  • בעיית המזכיר מדגימה מדוע אקראיות עוזרת בכלל: לכל אלגוריתם דטרמיניסטי קיים קלט שעליו הוא נכשל באופן קטסטרופלי, בעוד אלגוריתם אקראי פשוט מוצא את המועמד הטוב ביותר בהסתברות ≥14\ge \tfrac14 על כל קלט.
  • אלגוריתם Freivalds לווידוא A⋅B=CA\cdot B = C רץ בזמן O(n2)O(n^2) במקום O(n3)O(n^3) ומחזיר תשובה נכונה בהסתברות ≥12\ge \tfrac12; הטעות שלו היא חד-צדדית — הוא לעולם לא דוחה קלט נכון.
  • הגברה (amplification): tt הרצות בלתי תלויות עם קבלה רק אם כל ההרצות קיבלו מורידות את הסתברות הטעות ל-≤2−t\le 2^{-t} במחיר זמן ריצה O(t⋅n2)O(t\cdot n^2). גורם ליניארי בזמן קונה ירידה אקספוננציאלית בשגיאה. עם t=log⁡nt=\log n מקבלים זמן O(n2log⁡n)O(n^2\log n) ושגיאה ≤1/n\le 1/n.
  • כל ההסתברויות בשיעור מוכחות בספירה קומבינטורית מפורשת על מרחב המדגם, ולא נטענות. מרחב המדגם הוא אוסף תוצאות הניסוי האקראי (כל התמורות; כל הווקטורים ב-{0,1}n\{0,1\}^n) — לא אוסף הפלטים האפשריים של האלגוריתם.
  • השיעור אינו מגדיר את המודל הפורמלי ואינו מגדיר מחלקות סיבוכיות אקראיות. מכונת טיורינג אקראית והמחלקות RP\mathrm{RP}, coRP\mathrm{coRP} ו-BPP\mathrm{BPP} מוגדרות בשיעור הבא; שם גם ייאמר שבעיית וידוא כפל המטריצות שייכת ל-coRP\mathrm{coRP}.
  • הערה על היקף: המרצה אמר במפורש ([00:00:00]) שבעיית המזכיר אינה חלק מחומר המבחן והיא מוצגת בשביל העקרונות; אלגוריתם Freivalds וההגברה כן חלק מהחומר ([00:29:45]).

רקע ותלויות

מהיכן הגענו לכאן. שיעורים 12–14 עסקו בהתמודדות עם קושי חישובי דרך אלגוריתמי קירוב: כאשר בעיה היא NP-hard, במקום לוותר על יעילות מוותרים על אופטימליות ומסתפקים בערובה על יחס הקירוב. השיעור הזה פותח כלי שני מאותה משפחה — ויתור על ודאות במקום ויתור על איכות. המרצה הדגיש ([00:00:00], [00:34:34]) ששני האלגוריתמים שיוצגו כאן אינם קשורים כלל לבעיות NP-קשות; שילוב האקראיות עם אלגוריתמי קירוב יגיע בהמשך.

הסתברות בדידה — כל מה שנשתמש בו. אלה הכלים היחידים הנדרשים, וכולם מהקורס המקדים:

  • מרחב מדגם Ω\Omega הוא אוסף התוצאות האפשריות של ניסוי אקראי. מאורע הוא תת-קבוצה E⊆ΩE \subseteq \Omega.
  • אם הדגימה אחידה מ-Ω\Omega סופי, אז Pr⁡[E]=∣E∣∣Ω∣\Pr[E]=\dfrac{|E|}{|\Omega|}. כלומר חישוב הסתברות מתחת להתפלגות אחידה הוא בדיוק תרגיל בקומבינטוריקה ([00:27:02]).
  • מונוטוניות: אם E⊆FE \subseteq F אז Pr⁡[E]≤Pr⁡[F]\Pr[E] \le \Pr[F]. זהו הכלי שבו נחסום הסתברויות משני הכיוונים: פעם אחת כדי לחסום מלמטה הסתברות הצלחה (משפט 2), ופעם אחת כדי לחסום מלמעלה הסתברות כישלון (משפט 3).
  • אי-תלות: מאורעות E1,…,EtE_1,\dots,E_t בלתי תלויים אם Pr⁡[⋂iEi]=∏iPr⁡[Ei]\Pr\left[\bigcap_i E_i\right]=\prod_i \Pr[E_i]. אצלנו אי-התלות לעולם אינה מונחת — היא נבנית בכך שכל הרצה משתמשת בהטלות מטבע טריות.
  • ספירה: מספר התמורות של [n][n] הוא n!n!; מספר הווקטורים ב-{0,1}n\{0,1\}^n הוא 2n2^n.

המרצה ביקש במפורש ([00:31:20], [01:21:06]) לחזור לקראת השיעור הבא על תוחלת, ליניאריות התוחלת ופירוק לאינדיקטורים. בשיעור הזה תוחלת מופיעה רק בהערה אחת קצרה (מסקנה 2.1).

אלגברה ליניארית. לכל מטריצות A,BA,B מסדר n×nn\times n ולכל וקטור r∈Rnr\in\mathbb{R}^n:

(A⋅B)⋅r=A⋅(B⋅r),(A−C)⋅r=A⋅r−C⋅r.(A\cdot B)\cdot r = A\cdot(B\cdot r), \qquad (A-C)\cdot r = A\cdot r - C\cdot r .

הזהות הראשונה (אסוציאטיביות) היא לב האלגוריתם של Freivalds; השנייה (דיסטריביוטיביות) היא לב הניתוח. כמו כן, הקואורדינטה ה-ii של D⋅rD\cdot r היא

(D⋅r)i=∑j=1nDij rj.(D\cdot r)_i=\sum_{j=1}^{n} D_{ij}\, r_j .

חישוב מכפלת מטריצה בווקטור עולה Θ(n2)\Theta(n^2) פעולות אריתמטיות; חישוב מכפלת מטריצה במטריצה בשיטה הנאיבית עולה Θ(n3)\Theta(n^3). בהקלטה [00:35:46] עלה שקיימים אלגוריתמים מהירים יותר לכפל מטריצות (מעריך כ-n2.37n^{2.37}), אך הקורס לא נכנס לזה ומשווה מול n3n^3.

המקרה הגרוע ביותר והאויב האכזר. מקורס האלגוריתמים: ניתוח במקרה הגרוע ביותר שקול לחשוב על יריב שמכיר את האלגוריתם ובוחר עבורו את הקלט המזיק ביותר ([00:07:06]). ההבדל המרכזי שנוסף כאן: היריב מכיר את הקוד, אך לא את תוצאות ההטלות, שנבחרות אחרי שהקלט כבר נקבע ([00:08:08]). זהו כל ההסבר לשאלה "למה אקראיות עוזרת".

הגדרות

הגדרה 1: אלגוריתם אקראי

ניסוח. אלגוריתם אקראי A\mathcal{A} מקבל שני קלטים: את הקלט "האמיתי" xx, ומחרוזת ביטים rr שכל ביט בה נדגם באופן אחיד ובלתי תלוי מ-{0,1}\{0,1\}. בהינתן xx ו-rr, הריצה של A\mathcal{A} דטרמיניסטית לחלוטין, והפלט הוא פונקציה A(x,r)\mathcal{A}(x,r). כל אמירה הסתברותית על A\mathcal{A} היא אמירה על

Pr⁡r[ A(x,r) has some property ]for a fixed, arbitrary x.\Pr_{r}\big[\,\mathcal{A}(x,r)\ \text{has some property}\,\big] \quad \text{for a \textbf{fixed}, arbitrary } x .

אינטואיציה. תחשבו על xx כעל דבר שנתון לנו מבחוץ, ועל rr כעל הדבר היחיד שאנחנו מגרילים. המרצה ניסח זאת פעמיים ([00:11:18], [00:16:35]): "האקראיות לא תגיע לי מהקלט. הקלט הוא שרירותי, אני חושב על הקלט הגרוע ביותר, האלגוריתם הוא זה שאקראי". הניסוח האינטואיטיבי שהמרצה נתן בפתיחה ([00:00:34]) הוא: אלגוריתם אקראי הוא אלגוריתם שיכול, בכל רגע ובכמה פעמים שירצה, "לדגום באקראי ביט 0/10/1", בלתי תלוי בקודמים.

מופע. האלגוריתם של Freivalds (הגדרה 5 להלן) דוגם וקטור r∈{0,1}nr\in\{0,1\}^n; זהו בדיוק nn ביטים אקראיים.

אי-מופע (חשוב). משפט מהצורה "v1v_1 הוא המועמד הטוב ביותר" אינו מאורע אקראי בהקשר הזה, כי הוא תלוי רק בקלט ולא ב-rr. המרצה עצר על כך במפורש ([00:20:16]): "לא לדבר על הסתברות של משהו שהוא לא אקראי — זה חסר משמעות". לעומת זאת "σ(1)\sigma(1) הוא המועמד הטוב ביותר" כן מאורע אקראי, כי σ\sigma הוא האובייקט שהוגרל.

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

הגדרה 2: מרחב המדגם של ריצה אקראית

ניסוח. מרחב המדגם Ω\Omega של אלגוריתם אקראי הוא אוסף תוצאות הניסוי האקראי שהאלגוריתם מבצע — לא אוסף הפלטים האפשריים שלו.

אינטואיציה ומדוע זה קריטי. זו הייתה שאלת סטודנטית שהמרצה ציין כשאלה מצוינת ([00:23:52]), כי כאן נופלים הכי הרבה. באלגוריתם המזכיר הניסוי הוא "הגרלת תמורה", ולכן Ω=Sn\Omega=S_n, קבוצת כל התמורות σ:[n]→[n]\sigma:[n]\to[n], ו-∣Ω∣=n!|\Omega|=n!. לא {1,…,n}\{1,\dots,n\}, שהיא קבוצת הפלטים. באלגוריתם Freivalds הניסוי הוא "הגרלת וקטור", ולכן Ω={0,1}n\Omega=\{0,1\}^n ו-∣Ω∣=2n|\Omega|=2^n.

מופע ואי-מופע (הדוגמה שהמרצה נתן, [00:24:55]). מטילים שתי קוביות הוגנות ושואלים מה ההסתברות שהסכום הוא 55. מרחב המדגם הוא

Ω={(x,y):x,y∈{1,…,6}},∣Ω∣=36,\Omega=\{(x,y): x,y\in\{1,\dots,6\}\},\qquad |\Omega|=36,

כלומר זוגות סדורים. תשובה שגויה נפוצה היא ש-Ω\Omega הוא קבוצת הסכומים האפשריים {2,…,12}\{2,\dots,12\} — אבל הסכום הוא מאורע, לא תוצאה של הניסוי. הפתרון המלא מופיע בסעיף הדוגמאות.

הגדרה 3: טעות חד-צדדית, ומטריצת הבלבול

ניסוח. נתבונן באלגוריתם הכרעה אקראי לשפה LL. לכל קלט xx מוגדרים שני סוגי טעות:

האלגוריתם מקבלהאלגוריתם דוחה
x∈Lx \in L (yes-instance)נכוןfalse negative
x∉Lx \notin L (no-instance)false positiveנכון

זוהי מטריצת הבלבול (confusion matrix) של האלגוריתם ([01:02:43]). לאלגוריתם יש טעות חד-צדדית אם אחת משתי משבצות הטעות ריקה — כלומר הוא יכול לטעות רק לכיוון אחד. אם שתיהן אפשריות, הטעות דו-צדדית.

אינטואיציה. אין תשובה כללית לשאלה איזו טעות גרועה יותר — זה תלוי ביישום ([01:03:14]): בבדיקה אפידמיולוגית עדיף false positive (מישהו יישאר בבית לחינם) על false negative; לפני ניתוח מוח לא רוצים אף אחד מהם.

מופע. אלגוריתם Freivalds: כאשר AB=CAB=C הוא תמיד מקבל, ולכן אין לו false negative כלל — טעות חד-צדדית מסוג false positive בלבד ([01:03:46]). זו בדיוק התכונה שתאפשר את ההגברה הפשוטה במשפט 4.

אי-מופע. אלגוריתם שמכריע לפי הצבעת רוב על הרצות שכל אחת מהן טועה בהסתברות ≤1/3\le 1/3 בשני הכיוונים הוא בעל טעות דו-צדדית. גם אותו אפשר להגביר, אך לא בכלל "קבל רק אם כולם קיבלו" אלא בהצבעת רוב; המרצה ציין זאת ([01:04:52]) והשאיר לשיעור הבא.

הגדרה 4: בעיית המזכיר (Secretary Problem)

ניסוח (המודל). נתונים nn מועמדים, [n]={1,…,n}[n]=\{1,\dots,n\}, שלמועמד ii ערך ממשי vi≥0v_i \ge 0. הערכים שונים זה מזה ו-nn זוגי (ראו פערים). המועמדים מרואיינים אחד-אחד, בסדר שהאלגוריתם קובע. הכללים:

  1. הערך viv_i מתגלה רק בזמן הראיון של מועמד ii, ולא לפניו.
  2. מיד בתום הראיון יש להחליט: לקבל או לדחות.
  3. אם קיבלנו — התהליך נעצר, שאר המועמדים הולכים הביתה.
  4. אם דחינו — המועמד הולך הביתה ולא ניתן לחזור אליו.

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

אינטואיציה. בלי כללים 1–4 זו בעיית "מציאת מקסימום במערך", והאלגוריתם המוכר (שמור את המקסימום עד כה, החלף אם ראית גדול יותר) פותר אותה בוודאות ([00:04:56]). הכללים הופכים את הקלט ממערך לרשימה מקושרת חד-כיוונית שאי אפשר לחזור בה אחורה ([00:14:29]) — מה שנקרא היום בעיה online. כל הקושי נובע מכך שההחלטה חייבת להתקבל לפני שנראתה יתרת הקלט.

מופע. n=4n=4 עם ערכים v=(10,40,20,30)v=(10,40,20,30): המועמד הטוב ביותר הוא 22 (ערך 4040), השני הכי טוב הוא 44 (ערך 3030).

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

הגדרה 5: וידוא כפל מטריצות ואלגוריתם Freivalds

ניסוח הבעיה. הקלט הוא שלוש מטריצות A,B,CA,B,C מסדר n×nn\times n, והשאלה היא האם A⋅B=CA\cdot B=C. זו בעיית הכרעה ("בעיית אחר?" — כן/לא), והיא אינה NP-קשה: אפשר לפתור אותה דטרמיניסטית בזמן O(n3)O(n^3) פשוט על ידי חישוב A⋅BA\cdot B והשוואה ל-CC. נסמן את השפה ב-MATMUL\mathrm{MATMUL} (סימון שלנו; בסיכום הבעיה אינה מקבלת שם).

המטרה אינה להוציא את הבעיה מ-P\mathrm{P} — היא כבר שם — אלא להוריד את המעריך ([00:36:51]).

האלגוריתם (Freivalds). על קלט A,B,CA,B,C:

  1. בחר באקראי, באופן אחיד, וקטור r∈{0,1}nr\in\{0,1\}^n.
  2. חשב A⋅(B⋅r)A\cdot(B\cdot r) ו-C⋅rC\cdot r.
  3. אם A⋅(B⋅r)=C⋅rA\cdot(B\cdot r)=C\cdot r — קבל; אחרת — דחה.

אינטואיציה. במקום להשוות שתי מטריצות (יקר), משווים את פעולתן על וקטור אקראי אחד (זול). ההצדקה לזמן הריצה היא האסוציאטיביות (A⋅B)⋅r=A⋅(B⋅r)(A\cdot B)\cdot r=A\cdot(B\cdot r): אף פעם לא כופלים מטריצה במטריצה, רק מטריצה בווקטור ([00:38:59]).

מופע ואי-מופע. אם AB=CAB=C אז לכל rr ההשוואה מצליחה. אם AB≠CAB\ne C עדיין ייתכנו וקטורים rr ספציפיים שעבורם ABr=CrABr=Cr — מהאלגברה הליניארית ידוע ששתי מטריצות שונות יכולות להסכים על וקטור מסוים ([00:43:20]). כל מה שצריך להוכיח הוא שאין יותר מדי כאלה.

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

משפט 1: אין אלגוריתם דטרמיניסטי עם ערובה כלשהי לבעיית המזכיר

ניסוח. לכל אלגוריתם דטרמיניסטי D\mathcal{D} לבעיית המזכיר קיים קלט (סדרת ערכים) שעליו D\mathcal{D} מחזיר את המועמד בעל הערך הנמוך ביותר. בפרט, לכל α>0\alpha>0 קיים קלט שעליו הערך שנבחר קטן מ-α\alpha כפול המקסימום.

הוכחה. נבנה יריב שמייצר את הערכים תוך כדי ריצה. הנקודה המרכזית: מאחר ש-D\mathcal{D} דטרמיניסטי, ההחלטה שלו בשלב jj היא פונקציה של הרישא v1,…,vjv_1,\dots,v_j בלבד. לכן אם היריב שינה רק ערכים שטרם נחשפו, התנהגות D\mathcal{D} על הרישא אינה משתנה.

היריב מזין ערכים עולים: v1=1, v2=2, v3=3,…v_1=1,\ v_2=2,\ v_3=3,\dots. נבחין בשני מקרים.

מקרה א': D\mathcal{D} מקבל בשלב כלשהו j≤n−1j\le n-1. בזמן הזה הוא ראה רק את v1,…,vjv_1,\dots,v_j. עכשיו היריב "משנה את דעתו" לגבי ההמשך וקובע vj+1=⋯=vn=Mv_{j+1}=\dots=v_n=M עבור MM גדול כרצוננו. הרישא לא השתנתה, ולכן D\mathcal{D} עדיין מקבל בשלב jj ומחזיר ערך jj, בעוד המקסימום הוא MM. היחס j/Mj/M קטן מכל α>0\alpha>0 עבור MM גדול מספיק. אם בפרט j=1j=1, המועמד שנבחר הוא גם בעל הערך הנמוך ביותר.

מקרה ב': D\mathcal{D} דוחה את כל n−1n-1 הראשונים. אז הוא חייב לקחת את המועמד האחרון (או להחזיר כלום, מה שגרוע אף יותר). היריב קובע כעת vn=0v_n=0, כלומר הנמוך מכולם. שוב הרישא v1,…,vn−1v_1,\dots,v_{n-1} לא השתנתה, ולכן ההתנהגות זהה, ו-D\mathcal{D} מחזיר את הגרוע ביותר. ■\blacksquare

הערה: בהרצה זה נאמר בקיצור — "לכל אלגוריתם דטרמיניסטי אני יכול לייצר קלט שבו הוא יבחר לא נכון... יותר מזה, אני יכול לדאוג שהוא ימצא מועמד ממש גרוע" ([00:05:28]–[00:06:33]) — בלי לפרט את שני המקרים. הפירוט כאן.

מדוע הניסיון הנאיבי לאקראיות אינו עוזר. סטודנט הציע ([00:07:06]) להגריל את הסף: לצפות במספר אקראי של מועמדים ואז לקחת את הראשון שעובר את המקסימום שנצפה. המרצה הראה מיד שזה נכשל: היריב פשוט ישים את המועמד הטוב ביותר במקום הראשון. אז לא משנה מה הסף שהוגרל (כל עוד הוא לפחות 11), המועמד הטוב ביותר נמצא בשלב התצפית ונדחה בוודאות, ולכן קיים קלט שעליו האלגוריתם טועה בהסתברות 11. המסקנה, שהיא הלקח האמיתי של המשפט: לא מספיק "להוסיף אקראיות" — צריך להוסיף אותה במקום הנכון, כלומר לטשטש בדיוק את הדבר שהיריב שולט בו. היריב שולט בסדר, ולכן את הסדר צריך להגריל ([00:09:42]).

משפט 2: האלגוריתם האקראי לבעיית המזכיר

האלגוריתם. על קלט של nn מועמדים (nn זוגי, ערכים שונים):

  1. הגרל תמורה σ:[n]→[n]\sigma:[n]\to[n] באופן אחיד מתוך כל n!n! התמורות.
  2. לכל 1≤j≤n21\le j\le \tfrac{n}{2}: ראיין את המועמד σ(j)\sigma(j) ודחה אותו.
  3. סמן ב-VV את הערך המקסימלי שנצפה עד כה, כלומר V=max⁡1≤j≤n/2vσ(j)V=\max_{1\le j\le n/2} v_{\sigma(j)}.
  4. לכל n2+1≤j≤n−1\tfrac{n}{2}+1\le j\le n-1: אם vσ(j)>Vv_{\sigma(j)}>V אז קבל את σ(j)\sigma(j) ועצור.
  5. אם הגעת לכאן — קבל את σ(n)\sigma(n).

ניסוח המשפט. לכל קלט (כלומר לכל וקטור ערכים שונים v1,…,vnv_1,\dots,v_n), אם AA הוא המאורע "האלגוריתם מחזיר את המועמד בעל הערך המקסימלי", אז

Pr⁡σ[A]  ≥  n4(n−1)  >  14.\Pr_{\sigma}[A] \;\ge\; \frac{n}{4(n-1)} \;>\; \frac14 .

ההסתברות נלקחת רק על התמורה σ\sigma, והחסם תקף לכל קלט.

למה שלב 5 קיים. שאלת סטודנט ([00:17:06]): מדוע הלולאה בשלב 4 נעצרת ב-n−1n-1? כי כאשר מגיעים למועמד האחרון אין עוד ברירה — חייבים לקבל אותו, בלי תנאי. אלמלא שלב 5 האלגוריתם היה עלול לא להחזיר דבר ([00:12:22]).

הוכחה. ראשית נשים לב לנקודה המתודולוגית: לאחר שהוגרלה σ\sigma, כל שאר הריצה דטרמיניסטית ([00:19:45]). לכן כל מאורע שאנחנו מגדירים חייב להיות פונקציה של σ\sigma בלבד, ומרחב המדגם הוא Ω=Sn\Omega=S_n עם ∣Ω∣=n!|\Omega|=n!.

נגדיר מאורע שני:

B={σ  :  σ−1(best)∈{n2+1,…,n}  and  σ−1(2nd best)∈{1,…,n2}},B=\Big\{\sigma \;:\; \sigma^{-1}(\text{best}) \in \{\tfrac{n}{2}+1,\dots,n\} \ \text{ and } \ \sigma^{-1}(\text{2nd best}) \in \{1,\dots,\tfrac{n}{2}\}\Big\},

כלומר: התמורה שמה את המועמד הטוב ביותר איפשהו בחצי השני, ואת השני-הכי-טוב איפשהו בחצי הראשון.

שלב 1: B⊆AB\subseteq A. נניח ש-BB מתרחש. המועמד השני-הכי-טוב נמצא בחצי הראשון, והמועמד הטוב ביותר אינו שם; לכן המקסימום של החצי הראשון הוא בדיוק ערכו של השני-הכי-טוב, כלומר V=v(2)V=v_{(2)} (כאן v(1)>v(2)>…v_{(1)}>v_{(2)}>\dots הם הערכים בסדר יורד). כעת בחצי השני: המועמד היחיד בכל הקלט שערכו גדול מ-v(2)v_{(2)} הוא המועמד הטוב ביותר. לכן בשלב 4 האלגוריתם דוחה כל מי שאינו הטוב ביותר, ומקבל אותו ברגע שהוא מגיע אליו. שני מקרי קצה:

  • אם הטוב ביותר יושב במקום jj עבור n2+1≤j≤n−1\tfrac n2 +1 \le j\le n-1 — הוא ייבחר בשלב 4.
  • אם הטוב ביותר יושב דווקא במקום nn — אז שלב 4 לא קיבל אף אחד (איש לא עבר את VV), ושלב 5 מקבל את σ(n)\sigma(n), שהוא הטוב ביותר.

בשני המקרים האלגוריתם מחזיר את הטוב ביותר, כלומר AA מתרחש. לכן B⊆AB\subseteq A כקבוצות של תמורות. מכאן, לפי מונוטוניות, Pr⁡[A]≥Pr⁡[B]\Pr[A]\ge\Pr[B] ([00:22:19]).

שלב 2: ספירת ∣B∣|B|. נבנה תמורה ב-BB בשלושה שלבים בלתי תלויים:

  • בוחרים מקום לשני-הכי-טוב בחצי הראשון: n2\tfrac{n}{2} אפשרויות.
  • בוחרים מקום לטוב ביותר בחצי השני: n2\tfrac{n}{2} אפשרויות.
  • מסדרים את n−2n-2 הנותרים ב-n−2n-2 המקומות הנותרים: (n−2)!(n-2)! אפשרויות.

כל תמורה ב-BB מתקבלת בדיוק פעם אחת בבנייה הזאת, ולכן

∣B∣=n2⋅n2⋅(n−2)!=n24 (n−2)!.|B|=\frac n2\cdot\frac n2\cdot (n-2)! = \frac{n^2}{4}\,(n-2)! .

שלב 3: החשבון. מאחר שהדגימה אחידה,

Pr⁡[B]=∣B∣∣Ω∣=n24(n−2)!n!.\Pr[B]=\frac{|B|}{|\Omega|}=\frac{\frac{n^2}{4}(n-2)!}{n!} .

נשתמש ב-n!=n (n−1) (n−2)!n!=n\,(n-1)\,(n-2)!, כלומר (n−2)!n!=1n(n−1)\dfrac{(n-2)!}{n!}=\dfrac{1}{n(n-1)}, ונקבל

Pr⁡[B]=n24⋅1n(n−1)=n4(n−1)=14⋅nn−1  ≥  14,\Pr[B]=\frac{n^2}{4}\cdot\frac{1}{n(n-1)}=\frac{n}{4(n-1)}=\frac14\cdot\frac{n}{n-1}\;\ge\;\frac14,

שכן nn−1>1\frac{n}{n-1}>1 לכל n≥2n\ge2. בשילוב עם שלב 1: Pr⁡[A]≥Pr⁡[B]≥14\Pr[A]\ge\Pr[B]\ge\frac14. ■\blacksquare

מסקנה 2.1 (תוחלת). לכל קלט, הערך של המועמד שנבחר מקיים בתוחלת

E[ vchosen ]  ≥  Pr⁡[A]⋅v(1)  ≥  v(1)4,\mathbb{E}[\,v_{\text{chosen}}\,] \;\ge\; \Pr[A]\cdot v_{(1)} \;\ge\; \frac{v_{(1)}}{4},

כלומר לפחות רבע מהמקסימום. הנימוק: כל הערכים אי-שליליים, ולכן התוחלת חסומה מלמטה על ידי התרומה של המאורע AA בלבד. המרצה ציין זאת ב-[00:31:20] בלי חישוב; זהו החישוב.

מדוע 14\tfrac14 אינו "גרוע" (שאלת סטודנט, [00:29:45]–[00:30:50]). יש להשוות למשפט 1, לא ל-11. דטרמיניסטית אין שום ערובה — קיים קלט שעליו הכישלון ודאי. כאן 14\tfrac14 מתקבל לכל קלט, כולל הגרוע ביותר; האקראיות "פיזרה את הסיכון". יתרה מזו, אם מחליפים את הסף n2\tfrac n2 ב-ne\tfrac ne מקבלים הסתברות הצלחה →1e≈0.37\to \tfrac1e\approx 0.37, וזהו האופטימום — אין אלגוריתם טוב יותר ([00:12:54], [00:17:38]). הבחירה ב-n2\tfrac n2 נעשתה רק כדי שההוכחה תהיה בת שלוש שורות.

משפט 3: נכונות וזמן ריצה של אלגוריתם Freivalds

ניסוח. יהיו A,B,CA,B,C מטריצות n×nn\times n קבועות (חלק מהקלט, לא אקראיות). האלגוריתם של הגדרה 5 רץ בזמן O(n2)O(n^2) פעולות אריתמטיות ומקיים:

  1. אם A⋅B=CA\cdot B=C אז Pr⁡r[the algorithm accepts]=1\Pr_{r}[\text{the algorithm accepts}]=1;
  2. אם A⋅B≠CA\cdot B\ne C אז Pr⁡r[the algorithm accepts]≤12\Pr_{r}[\text{the algorithm accepts}]\le \tfrac12, ולכן Pr⁡r[rejects]≥12\Pr_r[\text{rejects}]\ge\tfrac12.

ההסתברות נלקחת רק על rr, והחסם תקף לכל שלשת מטריצות.

הערה מתודולוגית חשובה ([00:41:47]–[00:42:19]): אסור לכתוב "Pr⁡[the algorithm is correct]\Pr[\text{the algorithm is correct}]" בלי לפצל למקרים. הפיצול ל-yes-instance ו-no-instance הוא פיצול לפי הקלט, והקלט אינו אקראי; לכן הוא חייב להיעשות מחוץ לסימן ההסתברות. זו טעות נפוצה למבחן.

זמן ריצה. מחשבים B⋅rB\cdot r (Θ(n2)\Theta(n^2) כפלים), אחר כך A⋅(B⋅r)A\cdot(B\cdot r) (שוב Θ(n2)\Theta(n^2), כי זו מטריצה כפול וקטור), ובנפרד C⋅rC\cdot r (Θ(n2)\Theta(n^2)), ולבסוף משווים שני וקטורים באורך nn (O(n)O(n)). סך הכול O(n2)O(n^2). הנקודה: בזכות האסוציאטיביות לעולם לא מבצעים כפל מטריצה במטריצה ([00:38:59]).

הוכחת סעיף 1 (שלמות). נניח A⋅B=CA\cdot B=C. אז לכל rr בלי יוצא מן הכלל מתקיים A⋅(B⋅r)=(A⋅B)⋅r=C⋅rA\cdot(B\cdot r)=(A\cdot B)\cdot r=C\cdot r, ולכן התנאי בשלב 3 מתקיים והאלגוריתם מקבל. זהו מאורע שמכיל את כל Ω\Omega, ולכן הסתברותו 11. שימו לב שכאן לא נעשה שום שימוש באקראיות — הטענה נכונה פוינטווייז לכל rr.

הוכחת סעיף 2 (נאותות). נניח A⋅B≠CA\cdot B\ne C ונסמן

D:=A⋅B−C  ≠  0.D:=A\cdot B-C \;\ne\; 0 .

צעד א' — תרגום תנאי הקבלה. מדיסטריביוטיביות, A⋅(B⋅r)=C⋅rA\cdot(B\cdot r)=C\cdot r אם ורק אם (A⋅B)⋅r−C⋅r=0(A\cdot B)\cdot r-C\cdot r=0 אם ורק אם D⋅r=0D\cdot r=0. לכן

Pr⁡r[accept]=Pr⁡r[ D⋅r=0 ].\Pr_r[\text{accept}]=\Pr_r[\,D\cdot r=0\,].

צעד ב' — בחירת איבר לא אפסי. מאחר ש-D≠0D\ne0, יש בה לפחות איבר אחד שונה מאפס. ללא הגבלת הכלליות נניח שזהו D11D_{11}. הבחירה הזו לגיטימית בתוך חישוב הסתברות משום ש-A,B,CA,B,C (ולכן DD) אינן אקראיות — האינדקסים נקבעים לפני ההגרלה ואינם תלויים ב-rr. אילו היה מדובר באיבר DikD_{ik} כללי, ההוכחה הייתה זהה מילה במילה עם גרירת שני אינדקסים ([00:45:29]).

צעד ג' — מעבר לקואורדינטה אחת. מתקיימת הכלת מאורעות: אם D⋅rD\cdot r הוא וקטור האפס אז בפרט הקואורדינטה הראשונה שלו אפס. כלומר

{r:D⋅r=0} ⊆ {r:(D⋅r)1=0},\{r: D\cdot r=0\}\ \subseteq\ \{r: (D\cdot r)_1=0\},

ולכן, ממונוטוניות, וזה הכיוון הנכון כי אנחנו חוסמים מלמעלה ([00:48:43]):

Pr⁡r[D⋅r=0] ≤ Pr⁡r[(D⋅r)1=0]=Pr⁡r[∑j=1nD1jrj=0].\Pr_r[D\cdot r=0]\ \le\ \Pr_r[(D\cdot r)_1=0]=\Pr_r\Big[\sum_{j=1}^{n}D_{1j}r_j=0\Big].

צעד ד' — בידוד r1r_1. מעבירים אגפים ומבודדים:

∑j=1nD1jrj=0  ⟺  D11r1=−∑j=2nD1jrj  ⟺  r1=−∑j=2nD1jrjD11.\sum_{j=1}^{n}D_{1j}r_j=0 \iff D_{11}r_1=-\sum_{j=2}^{n}D_{1j}r_j \iff r_1=\frac{-\sum_{j=2}^{n}D_{1j}r_j}{D_{11}} .

החלוקה חוקית בדיוק משום שדאגנו ש-D11≠0D_{11}\ne0; זו כל המטרה של צעד ב' ([00:53:37]).

צעד ה' — ספירה. מרחב המדגם הוא Ω={0,1}n\Omega=\{0,1\}^n עם ∣Ω∣=2n|\Omega|=2^n, בהתפלגות אחידה. נספור כמה וקטורים מקיימים את השוויון האחרון. נקבע ערכים כלשהם ל-r2,…,rnr_2,\dots,r_n; יש 2n−12^{n-1} קביעות כאלה. עבור כל קביעה, האגף הימני הוא מספר קבוע cc, ולכן קיים לכל היותר ערך אחד של r1r_1 שמקיים את השוויון: אם c∈{0,1}c\in\{0,1\} יש בדיוק אפשרות אחת, ואם c∉{0,1}c\notin\{0,1\} (למשל c=−3c=-3 או cc לא שלם או אפילו אי-רציונלי) אין אף אפשרות ([00:55:47], [00:56:19]). לכן

∣{r∈{0,1}n: D⋅r=0}∣  ≤  2n−1⋅1  =  2n−1,\big|\{r\in\{0,1\}^n:\ D\cdot r=0\}\big| \;\le\; 2^{n-1}\cdot 1 \;=\; 2^{n-1},

ומכאן

Pr⁡r[accept] ≤ 2n−12n=12.■\Pr_r[\text{accept}]\ \le\ \frac{2^{n-1}}{2^{n}}=\frac12 . \qquad\blacksquare

האופן שבו כדאי לחשוב על צעד ה'. r2,…,rnr_2,\dots,r_n הם n−1n-1 "משתנים חופשיים" ו-r1r_1 הוא "משתנה תלוי" שנקבע (לכל היותר) על ידם ([01:00:36]). זהו בדיוק תרגיל ספירה, לא טיעון הסתברותי עמוק.

מסקנה 3.1 (טעות חד-צדדית). לפי סעיף 1 אין לאלגוריתם false negative כלל: הוא לעולם אינו דוחה קלט שבו AB=CAB=C. לכן כל הטעות שלו היא false positive, והיא חד-צדדית ([01:03:46]). זו התכונה שמפעילה את משפט 4.

משפט 4: הגברה בשתי חזרות

האלגוריתם המשופר. על קלט A,B,CA,B,C:

  1. הרץ את האלגוריתם של הגדרה 5 פעמיים, כל פעם עם הגרלה טרייה ובלתי תלויה של rr.
  2. אם בשתי ההרצות האלגוריתם קיבל — קבל; אחרת — דחה.

ניסוח. אם AB=CAB=C אז Pr⁡[accept]=1\Pr[\text{accept}]=1; אם AB≠CAB\ne C אז Pr⁡[accept]≤14\Pr[\text{accept}]\le\tfrac14, ולכן Pr⁡[correct]≥34\Pr[\text{correct}]\ge\tfrac34. זמן הריצה נשאר O(n2)O(n^2) אסימפטוטית.

הוכחה. יהיו E1,E2E_1,E_2 המאורעות "ההרצה הראשונה קיבלה" ו"ההרצה השנייה קיבלה".

מקרה AB=CAB=C: לפי משפט 3.1, Pr⁡[E1]=Pr⁡[E2]=1\Pr[E_1]=\Pr[E_2]=1, ולכן שתי ההרצות מקבלות בוודאות והאלגוריתם המשופר מקבל בהסתברות 11. זה בדיוק מה שהטעות החד-צדדית קונה לנו: הצד הזה לא נפגע מהחזרה ([01:12:25]).

מקרה AB≠CAB\ne C: לפי הגדרת האלגוריתם, האלגוריתם המשופר מקבל אם ורק אם E1E_1 וגם E2E_2. המאורעות E1,E2E_1,E_2 בלתי תלויים, כי הם פונקציות של שתי מחרוזות אקראיות נפרדות שהוגרלו באופן בלתי תלוי — אי-התלות אינה הנחה, היא מובנית באלגוריתם ([01:06:25]). לכן

Pr⁡[accept]=Pr⁡[E1∩E2]=Pr⁡[E1]⋅Pr⁡[E2] ≤ 12⋅12=14,\Pr[\text{accept}]=\Pr[E_1\cap E_2]=\Pr[E_1]\cdot\Pr[E_2]\ \le\ \frac12\cdot\frac12=\frac14,

ומכאן Pr⁡[reject]≥1−14=34\Pr[\text{reject}]\ge 1-\tfrac14=\tfrac34. ■\blacksquare

הערה על שם התהליך: מרגע שנאמר "באופן בלתי תלוי", אפשר לחשוב על שתי ההרצות כאילו נעשו במקביל; זה נקרא גם parallel repetition ([01:06:25]).

משפט 5: הגברה כללית ל-tt חזרות

האלגוריתם. על קלט A,B,CA,B,C:

  1. הרץ את האלגוריתם של הגדרה 5 tt פעמים עם הגרלות טריות ובלתי תלויות.
  2. קבל אם ורק אם בכל ההרצות האלגוריתם קיבל.

ניסוח. זמן הריצה הוא O(t⋅n2)O(t\cdot n^2), ולכל A,B,CA,B,C:

  • אם AB=CAB=C:  Pr⁡[accept]=1\ \Pr[\text{accept}]=1;
  • אם AB≠CAB\ne C:  Pr⁡[accept]≤12t\ \Pr[\text{accept}]\le \dfrac{1}{2^{t}}, ולכן Pr⁡[correct]≥1−12t\Pr[\text{correct}]\ge 1-\dfrac{1}{2^{t}}.

הוכחה. זמן הריצה: tt הרצות של O(n2)O(n^2) כל אחת. שימו לב ש-tt עצמו רשאי להיות פונקציה של nn, ולכן הגורם tt נשאר מפורש בחסם ([01:11:39]).

נכונות במקרה AB=CAB=C: כל הרצה מקבלת בהסתברות 11 (משפט 3.1), ולכן חיתוך של tt מאורעות ודאיים הוא מאורע ודאי.

נכונות במקרה AB≠CAB\ne C: יהי EiE_i המאורע "ההרצה ה-ii קיבלה". המאורעות E1,…,EtE_1,\dots,E_t בלתי תלויים, שכן כל אחד מהם תלוי בבלוק ביטים אקראיים נפרד וזר לאחרים. האלגוריתם מקבל אם ורק אם ⋂i=1tEi\bigcap_{i=1}^{t}E_i, ולכן

Pr⁡[accept]=Pr⁡[⋂i=1tEi]=∏i=1tPr⁡[Ei] ≤ (12)t=12t.■\Pr[\text{accept}]=\Pr\Big[\bigcap_{i=1}^{t}E_i\Big]=\prod_{i=1}^{t}\Pr[E_i]\ \le\ \Big(\frac12\Big)^{t}=\frac{1}{2^{t}} . \qquad\blacksquare

המקרה המעניין: t=log⁡nt=\log n (בסיס 22). אז

Pr⁡[failure] ≤ 12log⁡n=1n,running time =O(n2log⁡n).\Pr[\text{failure}]\ \le\ \frac{1}{2^{\log n}}=\frac1n,\qquad \text{running time}\ =O(n^2\log n).

זהו הלקח הכמותי המרכזי של השיעור ([01:15:16]): גורם ליניארי בזמן הריצה קונה ירידה אקספוננציאלית בהסתברות הכישלון, וזה בדיוק בגלל שהסתברויות של מאורעות בלתי תלויים מוכפלות. ככל ש-nn גדל, הסתברות ההצלחה 1−1n1-\tfrac1n שואפת ל-11.

מסקנה 5.1 (טרייד-אוף). יש כאן שתי מטרות מתחרות ([01:10:37]): הגדלת tt משפרת את הסתברות ההצלחה אך מגדילה את זמן הריצה, וגם צורכת יותר ביטים אקראיים (t⋅nt\cdot n במקום nn). אין ערך "נכון" ל-tt — הוא נקבע לפי היישום.

משפט 6: הגרלה מאלפבית גדול יותר, וחשבון הביטים

רקע. שאלת סטודנט ([01:14:05]): למה להגריל rr מ-{0,1}n\{0,1\}^n ולא מ-{0,1,2}n\{0,1,2\}^n?

ניסוח. נריץ את האלגוריתם של הגדרה 5 כאשר rr נדגם באופן אחיד מ-Σn\Sigma^n עבור Σ={0,1,…,k−1}\Sigma=\{0,1,\dots,k-1\}. אז אם AB≠CAB\ne C מתקיים Pr⁡r[accept]≤1k\Pr_r[\text{accept}]\le \dfrac1k.

הוכחה. ההוכחה של משפט 3 עוברת מילה במילה עד צעד ה'. שם, ∣Ω∣=kn|\Omega|=k^n; לכל קביעה של r2,…,rnr_2,\dots,r_n (יש kn−1k^{n-1} כאלה) יש לכל היותר ערך אחד של r1r_1 שמקיים r1=−(∑j≥2D1jrj)/D11r_1=-\big(\sum_{j\ge2}D_{1j}r_j\big)/D_{11}. לכן

Pr⁡r[accept]≤kn−1kn=1k.■\Pr_r[\text{accept}]\le\frac{k^{n-1}}{k^{n}}=\frac1k . \qquad\blacksquare

בפרט: Σ={0,1,2}\Sigma=\{0,1,2\} נותן 13\tfrac13, ו-Σ={0,…,7}\Sigma=\{0,\dots,7\} נותן 18\tfrac18 ([01:17:22]).

החשבון שמראה שזה לא בהכרח משתלם ([01:18:25]–[01:19:30]). ביטים אקראיים אמיתיים הם משאב שעולה כסף — ה-random של המחשב אינו אקראי באמת, ואם רוצים ביטים בלתי תלויים באיכות גבוהה משלמים עליהם; זה משאב שכלל לא נכלל בחשבון זמן הריצה שלנו. נשווה שתי דרכים להוציא הסתברות טעות טובה יותר מ-12\tfrac12:

שיטהביטים אקראייםהסתברות טעותזמן ריצה
הרצה אחת מ-{0,1,2}n\{0,1,2\}^n2n2n (שני ביטים לקואורדינטה)≤13\le \tfrac13O(n2)O(n^2)
שתי הרצות מ-{0,1}n\{0,1\}^n2n2n≤14\le \tfrac142⋅O(n2)2\cdot O(n^2)

באותו מחיר בביטים אקראיים, החזרה הכפולה על האלפבית הבינארי נותנת טעות קטנה יותר (14<13\tfrac14<\tfrac13) אך משלמת פי שניים בזמן. אין כאן זוכה מוחלט — יש טרייד-אוף, וההחלטה תלויה במה יקר יותר במערכת הספציפית (זמן מעבד, ביטים אקראיים, זמן מתכנתים). המרצה סיכם: "זה כמו פלסטלינה, צריך לשחק עם זה".

הערה נוספת: הבחירה ב-{0,1}\{0,1\} בהוכחה המקורית נעשתה מסיבה דידקטית בלבד — כך היה קל למנות את כל האפשרויות על הלוח ([01:17:22]).

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

דוגמה 1: שתי קוביות — תרגיל החימום על מרחב מדגם

השאלה ([00:24:55]). מטילים שתי קוביות הוגנות. מה ההסתברות שהסכום הוא 55?

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

Ω={(x,y):x,y∈{1,…,6}},∣Ω∣=6⋅6=36.\Omega=\{(x,y): x,y\in\{1,\dots,6\}\},\qquad |\Omega|=6\cdot6=36 .

ההתפלגות אחידה על 3636 הזוגות. המאורע המבוקש הוא

E={(1,4),(2,3),(3,2),(4,1)},∣E∣=4.E=\{(1,4),(2,3),(3,2),(4,1)\},\qquad |E|=4 .

לכן Pr⁡[E]=436=19\Pr[E]=\dfrac{4}{36}=\dfrac19.

הלקח. התשובה הנפוצה והשגויה היא ש-Ω={2,3,…,12}\Omega=\{2,3,\dots,12\} ולכן ההסתברות היא 111\tfrac{1}{11}. הסכום הוא מאורע, לא תוצאת ניסוי; אילו היה מרחב המדגם, כל הסכומים היו שווי הסתברות, וזה שקר. אותה בדיוק טעות ממתינה בבעיית המזכיר: מרחב המדגם הוא SnS_n ולא {1,…,n}\{1,\dots,n\}.

דוגמה 2: מעקב מלא אחר אלגוריתם המזכיר עבור n=4n=4

הקלט. n=4n=4, ערכים v=(10,40,20,30)v=(10,40,20,30). הטוב ביותר: מועמד 22 (ערך 4040). השני-הכי-טוב: מועמד 44 (ערך 3030).

האלגוריתם על הקלט הזה. מגרילים σ\sigma מתוך 4!=244!=24 תמורות; מראיינים ודוחים את σ(1),σ(2)\sigma(1),\sigma(2) וקובעים V=max⁡(vσ(1),vσ(2))V=\max(v_{\sigma(1)},v_{\sigma(2)}); בשלב j=3j=3 מקבלים אם vσ(3)>Vv_{\sigma(3)}>V; אחרת מקבלים את σ(4)\sigma(4).

החסם מהמשפט. ∣B∣=42⋅42⋅2!=2⋅2⋅2=8|B|=\tfrac42\cdot\tfrac42\cdot 2!=2\cdot2\cdot2=8, ולכן Pr⁡[B]=824=13\Pr[B]=\tfrac{8}{24}=\tfrac13, בהתאמה מלאה לנוסחה n4(n−1)=412=13\tfrac{n}{4(n-1)}=\tfrac{4}{12}=\tfrac13.

חישוב מדויק של Pr⁡[A]\Pr[A] (מעבר לנדרש, כדי לראות שההכלה B⊆AB\subseteq A ממש). נסמן את דירוגי המועמדים 11 (הטוב ביותר) עד 44 (הגרוע ביותר) ונספור לפי מיקום הטוב ביותר בתמורה:

  • הטוב ביותר במקום 33: אז vσ(3)>Vv_{\sigma(3)}>V תמיד, והאלגוריתם מקבל אותו. הצלחה. מספר תמורות: 3!=63!=6.
  • הטוב ביותר במקום 44: מצליחים אם ורק אם המועמד במקום 33 אינו עובר את VV, כלומר אם הוא אינו הטוב מבין השלושה הראשונים. שלושת המקומות הראשונים מכילים את הדירוגים {2,3,4}\{2,3,4\} ב-3!=63!=6 סידורים; הכישלון הוא בדיוק כאשר דירוג 22 יושב במקום 33, וזה קורה ב-22 סידורים. לכן 6−2=46-2=4 הצלחות.
  • הטוב ביותר במקום 11 או במקום 22: אז VV שווה לערך המקסימלי בכל הקלט, איש בחצי השני לא יעבור אותו, והאלגוריתם ייקח את σ(4)\sigma(4) שאינו הטוב ביותר. כישלון בכל 2⋅3!=122\cdot3!=12 התמורות.

סך הצלחות: 6+4=106+4=10, כלומר

Pr⁡[A]=1024=512≈0.4167.\Pr[A]=\frac{10}{24}=\frac{5}{12}\approx 0.4167 .

ואכן 512>13=Pr⁡[B]>14\dfrac{5}{12}>\dfrac13=\Pr[B]>\dfrac14. ההכלה B⊆AB\subseteq A אמיתית וממש — יש הצלחות שאינן ב-BB (למשל: הטוב ביותר במקום 33 בעוד השני-הכי-טוב במקום 44) — ולכן החסם 14\tfrac14 אינו הדוק, אבל הוא זול מאוד להוכחה.

דוגמה 3: מעקב מלא אחר Freivalds, כולל מקרה שבו החסם 12\tfrac12 הדוק

ניקח

A=(1234),B=(0110),so A⋅B=(2143).A=\begin{pmatrix}1&2\\3&4\end{pmatrix},\qquad B=\begin{pmatrix}0&1\\1&0\end{pmatrix},\qquad\text{so } A\cdot B=\begin{pmatrix}2&1\\4&3\end{pmatrix}.

מקרה yes-instance. אם C=(2143)C=\begin{pmatrix}2&1\\4&3\end{pmatrix} אז לכל אחד מארבעת הווקטורים r∈{0,1}2r\in\{0,1\}^2 מתקיים A(Br)=CrA(Br)=Cr, והאלגוריתם מקבל. Pr⁡[accept]=1\Pr[\text{accept}]=1, כמובטח.

מקרה no-instance. ניקח C=(2140)C=\begin{pmatrix}2&1\\4&0\end{pmatrix}, שנבדל מ-A⋅BA\cdot B רק באיבר (2,2)(2,2). אז

D=A⋅B−C=(0003).D=A\cdot B-C=\begin{pmatrix}0&0\\0&3\end{pmatrix}.

כאן D11=0D_{11}=0, ולכן ה"ללא הגבלת הכלליות" של ההוכחה מחייב לבחור את האיבר הלא-אפסי D22=3D_{22}=3 ולהריץ את הטיעון על השורה השנייה — בדיוק כפי שנאמר בהקלטה שהיה קורה עם אינדקסים כלליים ([00:45:29]).

נבדוק את ארבעת הווקטורים ידנית:

rrA(Br)A(Br)CrCrהחלטהנכונות
(0,0) ⁣⊤(0,0)^{\!\top}(0,0) ⁣⊤(0,0)^{\!\top}(0,0) ⁣⊤(0,0)^{\!\top}קבלטעות (false positive)
(1,0) ⁣⊤(1,0)^{\!\top}(2,4) ⁣⊤(2,4)^{\!\top}(2,4) ⁣⊤(2,4)^{\!\top}קבלטעות (false positive)
(0,1) ⁣⊤(0,1)^{\!\top}(1,3) ⁣⊤(1,3)^{\!\top}(1,0) ⁣⊤(1,0)^{\!\top}דחהנכון
(1,1) ⁣⊤(1,1)^{\!\top}(3,7) ⁣⊤(3,7)^{\!\top}(3,4) ⁣⊤(3,4)^{\!\top}דחהנכון

לכן Pr⁡[accept]=24=12\Pr[\text{accept}]=\tfrac24=\tfrac12 בדיוק — הדוגמה מראה שהחסם של משפט 3 הדוק ואי אפשר לשפרו במקרה הגרוע. ואכן, לפי הניתוח: (Dr)2=3r2(D r)_2=3r_2, שמתאפס אם ורק אם r2=0r_2=0, ויש 2n−1=22^{n-1}=2 וקטורים כאלה מתוך 2n=42^n=4.

מה עושה ההגברה כאן. על אותו קלט, tt הרצות בלתי תלויות טועות רק אם בכל ההרצות הוגרל r2=0r_2=0, כלומר בהסתברות (12)t=2−t\left(\tfrac12\right)^t=2^{-t} בדיוק — התאמה מושלמת למשפט 5.

דוגמה 4: החשבון הכמותי שמצדיק את כל התרגיל

ניקח n=1024n=1024 ו-t=log⁡2n=10t=\log_2 n=10:

  • דטרמיניסטי נאיבי: n3=10243≈1.07⋅109n^3=1024^3\approx 1.07\cdot 10^{9} פעולות, תשובה ודאית.
  • Freivalds עם t=10t=10: t⋅n2=10⋅10242≈1.05⋅107t\cdot n^2=10\cdot 1024^2\approx 1.05\cdot 10^{7} פעולות — חיסכון של פי ≈100\approx 100 — והסתברות טעות ≤2−10=11024≈0.1%\le 2^{-10}=\tfrac{1}{1024}\approx 0.1\%, וגם זו רק לכיוון אחד.

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

תרגיל (נשאל בכיתה, [01:14:05]) — פתרון מלא

השאלה. מה קורה אם דוגמים rr מ-{0,1,2}n\{0,1,2\}^n במקום מ-{0,1}n\{0,1\}^n, והאם זה עדיף?

פתרון. לפי משפט 6, הסתברות הטעות יורדת ל-≤13\le\tfrac13. אבל צריך לספור ביטים אקראיים: כל קואורדינטה ב-{0,1,2}\{0,1,2\} דורשת שני ביטים, כלומר 2n2n ביטים לעומת nn. באותם 2n2n ביטים אפשר במקום זאת להריץ פעמיים את הגרסה הבינארית ולקבל טעות ≤14\le\tfrac14, שהיא טובה יותר מ-13\tfrac13 — במחיר של פי שניים בזמן הריצה. מסקנה: מבחינת ניצול ביטים אקראיים, חזרה על האלגוריתם הבינארי עדיפה; מבחינת זמן ריצה, האלפבית הגדול עדיף. אין תשובה אחת נכונה — יש טרייד-אוף.

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

  • [00:00:00] היקף למבחן. בעיית המזכיר "אינה למבחן ואינה חלק מהחומר של הקורס" — המרצה מציג אותה כי היא מדגימה בדיוק את העקרונות שיחזרו בכל השיעור: הקלט הגרוע ביותר, האויב האכזר, מה אקראי ומה שרירותי, ומהו מרחב המדגם. לעומת זאת, מ-[00:29:45] ואילך ("אלגוריתם שהוא כבר כן חלק מהקורס") החומר הוא חומר מבחן מלא.
  • [00:08:08] הסדר שבו הדברים נקבעים. "אני מכיר את האלגוריתם שלך כשאני בונה את הקלט, אבל האקראיות נבחרת אחר כך." זו כל הסיבה שאקראיות עוזרת. אם האויב היה רואה גם את המטבעות, לא היה יתרון.
  • [00:10:47] מאיפה מגיעה האקראיות. סטודנט שאל מה ההבדל בין "המנהלת מראיינת בסדר אקראי" לבין "המועמדים מגיעים בסדר אקראי". התשובה: הבדל מהותי. הקלט מגיע בסדר שרירותי ואיננו שולטים בו; רק המנהלת רשאית לערבב. הנחה על התפלגות הקלט היא הנחה שאין לנו זכות להניח.
  • [00:20:16] מאורעות חייבים להיות פונקציה של האקראיות. "v1v_1 הוא הטוב ביותר" אינו מאורע אקראי; "σ(1)\sigma(1) הוא הטוב ביותר" כן. אין משמעות להסתברות של דבר שאינו אקראי. שווה לבדוק את זה לפני כל חישוב הסתברות במבחן.
  • [00:31:51] למה זה חשוב. שאלת סטודנט "למה צריך את זה?" קיבלה את התשובה המפורשת ביותר בשיעור: "אם אתה שואל אותי מה מכל הקורס לקחת איתך הלאה — זה החלק הזה של אלגוריתמים אקראיים." הנימוק: היום גם זמן ריצה ליניארי עשוי להיות יקר מדי; אם אין תקציב לקרוא את כל הקלט, בהכרח בודקים רק חלק ממנו — ואם בוחרים את המקומות באופן קבוע, יבוא אויב ויקלקל. לכן בוחרים אותם באקראי.
  • [00:39:29] אזהרה מפני "שיפור" ריק. "להוריד את זמן הריצה זה לא חוכמה — יכולתי גם להגיד: תזרוק מטבע, יצא אפס תחזיר כן, יצא אחד תחזיר לא." העניין אינו בזמן הריצה לבדו אלא בזמן ריצה יחד עם ערובת נכונות מוכחת.
  • [00:46:38] מתודולוגיה של חסמים. "יש לי הרבה יותר כלים לחסום הסתברות מלמעלה מאשר מלמטה. לכן כשאני מנתח אלגוריתם אקראי אני אחסום מלמעלה את הסתברות הכישלון, ומכך אקבל חסם מלמטה על הסתברות ההצלחה." זה מסביר למה כל הניתוח של Freivalds מנוסח על "האלגוריתם מקבל" ולא על "האלגוריתם צודק".
  • [01:13:29] מבנה קבוע לניתוח. כמעט תמיד מפצלים ל-yes-instance ו-no-instance, כי האלגוריתם עשוי להתנהג אחרת לגמרי בשני המקרים — אבל זהו פיצול של הקלטים, לא של הדגימה האקראית.
  • [01:17:53] ביטים אקראיים עולים כסף. ה-random של המחשב אינו אקראי ואפילו לא קרוב לזה; ביטים אקראיים איכותיים ובלתי תלויים הם מוצר שמשלמים עליו. זהו משאב שהניתוח שלנו כלל לא תמחר.
  • [01:20:34] כמה שגיאה מותרת? אין תשובה מוחלטת: 10%10\% שגיאה בחלוקת עיתונים היא זניחה; 10%10\% שגיאה בניתוח מוח היא בלתי נסבלת. "שערה אחת על הראש זה מעט, שערה אחת במרק זה המון."
  • [01:21:06] לקראת השיעור הבא. לחזור על תוחלת, ליניאריות התוחלת, ופירוק לאינדיקטורים. השיעור הבא מגדיר את המודל הפורמלי (מכונת טיורינג אקראית) ואת המחלקות; שם ייאמר ([00:40:58] בהקלטה 21) שבעיית וידוא כפל המטריצות שייכת ל-coRP\mathrm{coRP}, בדיוק בגלל הטעות החד-צדדית שהוכחנו כאן.

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

  • מקור: ההקלטה, [00:04:56]–[00:09:42]. הפער: כל הטיעון שאין אלגוריתם דטרמיניסטי עם ערובה לבעיית המזכיר, כולל טיעון האויב האכזר והניסיון הכושל להגריל את הסף, אינו מופיע בסיכום כלל. ההכרעה: נכתב כאן במלואו כמשפט 1, כולל שני מקרי היריב שנאמרו בעל-פה בקיצור.
  • מקור: ההקלטה, [00:23:52]–[00:26:31]. הפער: כל הדיון במרחב המדגם ודוגמת שתי הקוביות אינם בסיכום. ההכרעה: נכתבו כהגדרה 2 וכדוגמה 1, כולל הפתרון המספרי (1/91/9) שלא נאמר בהקלטה.
  • מקור: ההקלטה, [01:01:40]–[01:04:52]. הפער: המושגים confusion matrix, false positive/false negative וטעות חד-צדדית אינם מופיעים בסיכום, אף שהם המצדיקים את כלל ההגברה "קבל רק אם כולם קיבלו". ההכרעה: נכתבו כהגדרה 3 וכמסקנה 3.1.
  • מקור: ההקלטה, [01:14:05]–[01:19:30]. הפער: ניתוח האלפבית {0,1,2}\{0,1,2\} וחשבון הביטים האקראיים אינם בסיכום. ההכרעה: נכתבו כמשפט 6 וכתרגיל בסוף סעיף הדוגמאות; ההוכחה הכללית ל-Σ\Sigma בגודל kk היא הכללה שלנו של הטיעון שנאמר עבור k=3k=3 ו-k=8k=8.
  • מקור: עמוד 1 בסיכום. הפער: האות VV מופיעה בשלוש משמעויות — קבוצת המועמדים (V=[1,…,n]V=[1,\dots,n]), ערכי המועמדים (ViV_i), והסף המקסימלי בשלב 3. ההכרעה: הופרדו כאן ל-[n][n] (המועמדים), viv_i (הערכים) ו-VV (הסף). זהו תיקון סימון, לא תיקון מתמטי.
  • מקור: עמוד 1 בסיכום, שלב 4. הפער: נכתב "אם σ[j]>V\sigma[j]>V" — השוואה בין אינדקס לבין ערך. ההכרעה: הכוונה ברורה מן ההקשר ומההקלטה ([00:16:03]) והתנאי נכתב כאן vσ(j)>Vv_{\sigma(j)}>V.
  • מקור: עמוד 1 בסיכום. הפער: לא נאמר ש-nn זוגי (אחרת n2\tfrac n2 אינו שלם) ולא שהערכים שונים זה מזה (אחרת "המועמד הטוב ביותר" ו"השני הכי טוב" אינם מוגדרים היטב, וההכלה B⊆AB\subseteq A עלולה להיכשל). ההכרעה: שתי ההנחות נוספו במפורש בהגדרה 4 ובמשפט 2.
  • מקור: ההקלטה, [00:51:55]. הפער: על הלוח נכתב לרגע ∑jD1jr1\sum_j D_{1j}r_1 (עם r1r_1 בתוך הסכום); סטודנטית תיקנה והמרצה אישר "טעיתי". הסיכום כותב נכון ∑jD1jrj\sum_j D_{1j}r_j. ההכרעה: הסיכום נכון ומופיע כאן; מדובר בפליטת לוח רגעית ולא בפער אמיתי.
  • מקור: עמוד 3 בסיכום. הפער: t=log⁡nt=\log n נרשם ללא ציון בסיס. ההכרעה: פורש כ-log⁡2\log_2, שכן רק כך 2−t=1/n2^{-t}=1/n כפי שרשום מיד אחריו ונאמר ב-[01:14:46].
  • מקור: משימת הכתיבה מול שני המקורות. הפער: ההבחנה Las Vegas מול Monte Carlo אינה מופיעה בשום מקום בסיכום או בשתי ההקלטות. ההכרעה: נכתבה כהערת מינוח מסומנת בלבד, בתוך הגדרה 1, כדי לא לייחס לקורס מונחים שלא נאמרו בו.
  • מקור: הסיכום וההקלטה מול המוסכמות של הסדרה. הפער: שני המקורות מדברים על "האלגוריתם" ולא על שפות ומחלקות, ולכן אין בשיעור הזה שמות מחלקות או רביעיית מכונה. ההכרעה: שמות המחלקות שכן מוזכרים בהפניות קדימה (P\mathrm{P}, RP\mathrm{RP}, coRP\mathrm{coRP}, BPP\mathrm{BPP}) נכתבים לפי מוסכמת הסדרה, ולשפת וידוא כפל המטריצות ניתן כאן השם MATMUL\mathrm{MATMUL} שאינו מופיע במקורות. סימוני המשתנים (σ\sigma, VV, rr, DD) נלקחו מהסיכום.
  • מקור: שם קובץ ההקלטה. הפער: הקובץ מתויג "שיעור 14" בעוד תוכנו הוא בדיוק שיעור 15 בסיכומים; ההקלטה שמתאימה לשיעור 14 (השיעור השני על קירוב) חסרה. ההכרעה: התיוג התעלם ממנו; ההקלטה מכסה את שלושת עמודי הסיכום מתחילתה ועד סופה, ואינה פותחת בחזרה על חומר הקירוב.

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

מה חייבים לזכור.

  1. על מה ההסתברות. בכל טענה על אלגוריתם אקראי, ההסתברות היא על המטבעות של האלגוריתם בלבד, לקלט קבוע ושרירותי, והערובה נדרשת לכל קלט. "בהסתברות ≥14\ge\tfrac14" פירושו: לכל קלט, לפחות רבע מהגרלות σ\sigma מובילות להצלחה. זה לא אומר "לרבע מהקלטים", ולא אומר משהו על קלט אקראי.
  2. בעיית המזכיר: דטרמיניסטית אין ערובה כלל; אקראית — הצלחה בהסתברות ≥n4(n−1)>14\ge\tfrac{n}{4(n-1)}>\tfrac14, עם הסף n2\tfrac n2. הסף ne\tfrac ne נותן 1e\tfrac1e וזה אופטימלי.
  3. Freivalds: O(n2)O(n^2); אם AB=CAB=C מקבל בהסתברות 11; אם AB≠CAB\ne C מקבל בהסתברות ≤12\le\tfrac12. טעות חד-צדדית.
  4. הגברה: tt הרצות בלתי תלויות ⇒\Rightarrow שגיאה ≤2−t\le 2^{-t} בזמן O(t⋅n2)O(t\cdot n^2). t=log⁡n⇒t=\log n \Rightarrow שגיאה ≤1/n\le 1/n.

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

  • מלכודת מרחב המדגם. לזהות את Ω\Omega עם קבוצת הפלטים במקום עם תוצאות הניסוי. בבעיית המזכיר ∣Ω∣=n!|\Omega|=n!, לא nn.
  • מלכודת "הסתברות שהאלגוריתם צודק". אסור לכתוב ביטוי כזה בלי לפצל קודם לפי סוג הקלט; הפיצול הוא מחוץ להסתברות, כי הקלט אינו אקראי.
  • מלכודת "לכל היותר אחד". בספירה של משפט 3, לכל קביעת r2,…,rnr_2,\dots,r_n יש לכל היותר ערך אחד תקין ל-r1r_1 — ולא בהכרח בדיוק אחד, כי הערך המבוקש עלול כלל לא להיות ב-{0,1}\{0,1\}. כתיבת "בדיוק אחד" היא טעות (אם כי במקרה הזה היא לא מקלקלת את החסם, כי אנחנו חוסמים מלמעלה).
  • מלכודת ה-WLOG. מותר לקבוע ש-D11≠0D_{11}\ne0 בתוך חישוב הסתברות רק משום ש-DD קבועה ואינה תלויה ב-rr. אילו DD הייתה אקראית, "ללא הגבלת הכלליות" היה טיעון פסול.
  • מלכודת ההגברה. הכלל "קבל רק אם כל ההרצות קיבלו" נכון רק כשהטעות חד-צדדית מסוג false positive. עם טעות דו-צדדית הוא הורס את צד ה-yes-instance, וצריך הצבעת רוב.
  • מלכודת מאורע לא אקראי. לא לדבר על הסתברות של מאורע שאינו פונקציה של האקראיות.

צ'ק-ליסט: אחרי השיעור צריך לדעת

  • לנסח מהו אלגוריתם אקראי ולציין במדויק, לגבי כל טענה, על מה נלקחת ההסתברות ולאילו קלטים היא תקפה.
  • לזהות את מרחב המדגם של אלגוריתם אקראי נתון ולחשב בו הסתברות בספירה קומבינטורית.
  • לבנות טיעון אויב שמראה שאלגוריתם דטרמיניסטי נכשל, ולהסביר מדוע האקראיות שוברת אותו.
  • לכתוב את אלגוריתם Freivalds, לנמק את זמן הריצה O(n2)O(n^2) דרך האסוציאטיביות, ולשחזר את שרשרת החסמים Pr⁡[Dr=0]≤Pr⁡[(Dr)1=0]≤2n−1/2n=12\Pr[Dr=0]\le\Pr[(Dr)_1=0]\le 2^{n-1}/2^n=\tfrac12 על כל צעדיה.
  • לחשב את הסתברות הטעות אחרי tt חזרות בלתי תלויות, ולבחור tt שמשיג יעד שגיאה נתון (למשל 1/n1/n או 1/nc1/n^c).
  • להסביר מה טעות חד-צדדית, למה היא הופכת את ההגברה לטריוויאלית, ומה משתנה בלעדיה.

שאלות שנשארו פתוחות

  • המונחים Las Vegas ו-Monte Carlo אינם מופיעים כלל לא בסיכום ולא בשתי ההקלטות; ההבחנה ביניהם נכתבה כאן כהערת מינוח בלבד ומסומנת ככזו.
  • עמוד 1 בסיכום: האות $V$ משמשת גם לקבוצת המועמדים ($V=[1,\dots,n]$), גם לסף המקסימלי בשלב 3 וגם לערכי המועמדים ($V_i$); כאן הופרדו הסימונים ($[n]$, $V$, $v_i$).
  • עמוד 1 בסיכום: לא נאמר במפורש ש-$n$ זוגי ושערכי המועמדים שונים זה מזה; שתי ההנחות נדרשות לניסוח האלגוריתם ולהוכחה, ונוספו כאן.
  • עמוד 3 בסיכום: $t=\log n$ נרשם ללא בסיס; פורש כבסיס $2$, שכן רק כך מתקבל $2^{-t}=1/n$ כמצוין בסיכום ובהקלטה [01:14:46].
  • בסיכום ובהקלטה בעיית וידוא כפל המטריצות אינה מקבלת שם פורמלי של שפה; הסימון $\mathrm{MATMUL}$ כאן הוא תוספת שלנו לצורך הפניה.
  • ההקלטה [00:12:54] מזכירה שהסף האופטימלי הוא $n/e$ ונותן הסתברות $1/e$, ושזה חסם עליון הדוק; ההוכחה לאופטימליות לא נאמרה ואינה נכתבת כאן.