תורת החישוביות/סיבוכיות קולמוגורוב/הסתברות אוניברסאלית

מתוך ויקיספר, אוסף הספרים והמדריכים החופשי

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

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

הגדרות[עריכה]

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


הגדרה: הסתברות אוניברסאלית של מחרוזת

ההסתברות האוניברסאלית של מחרוזת היא

נגדיר גם את הסתברות הקולמוגורוב של מחרוזת ע"י ביטוי אלגברי דומה (שלו קשה יותר למצוא מוטיווציה):

הגדרה: הסתברות אוניברסאלית של מחרוזת

הסתברות הקולמוגורוב של מחרוזת היא

בהקשר בין הסתברות אוניברסאלית להסתברות קולמוגורוב נראה ששתי הסתברויות אלו שוות עד כדי קבוע לא-טריוויאלי.

הקשר בין הסתברות אוניברסאלית להסתברות קולמוגורוב[עריכה]

משפט: שקילות הסתברות אוניברסאלית והסתברות קולמוגורוב

קיים קבוע עבורו

,

ובאופן שקול, קיים קבוע שעבורו


בשאר החלק נוכיח את שני הכוונים של משפט זה.


שקלו לדלג על נושא זה

שאר ההוכחה מורכבת למדי, ואפשר לוותר עליה.



סיבוכיות קולמוגורוב היא לכל הפחות סיבוכיות אוניברסאלית[עריכה]

כוון זה קל להוכיח. הדבר נובע למעשה מההגדרה. נניח ש- היא התוכנית הקצרה ביותר המייצרת את . אז

סיבוכיות קולמוגורוב היא לכל היותר סיבוכיות אוניברסאלית (עד כדי קבוע)[עריכה]

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

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

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

בניית עץ השיוך[עריכה]

בניית העץ 0 - עץ קידוד התחלתי

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

  1. פנוי
  2. משוייך
  3. תפוס

בתחילה כל הצמתים נמצאים במצב פנוי.

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

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

קל לראות כי הביטוי שואף מלמטה להסתברות האוניברסאלית:

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

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

כשעוצרת תוכנית , נחליט האם לשייכה לעץ בעזרת רשימה של שלשות שנחזיק בצד המתארות את התוכניות שעצרו כבר. השלשה המתאימה לתוכנית ה- שעצרה, מורכבת מ:

  1. המחרוזת,
  2. אורך תיאור התוכנית,
  3. הצומת שאליו משוייכת, אם בכלל. את הצומת בעץ אפשר לתאר בעזרת מחרוזת של המסלול (לדוגמה, המחרוזת "01" מציינת הליכה שמאלה פעם אחת, ולאחריה הליכה למטה פעם אחת; המחרוזת "222" מציינת הליכה ימינה שלוש פעמים). לא כל תוכנית שהסתיימה משוייכת לצומת. נניח שיש סימון מיוחד, נניח "-", המציין שאין שיוך.

נחליט את שיוך לצומת כך:

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

לדוגמה (בתרשים "בניית העץ 1" המצוייר בצד שמאל), נניח שהתוכנית הראשונה שהסתיימה היא התוכנית שתיאורה הוא "1", והפלט שלה הוא "000111000". בשלב זה,

ולכן

לכן עלינו לבחור צומת ברמה . היותר שבשלב זה כל הצמתים בעץ פנויים, הצומת השמאלי ביותר ברמה 2 הופך להיות משוייך, והצמתים השמאליים ביותר ברמות 0 ו1 הופכים להיות תפוסים.


נניח שהתוכנית השניה שהסתיימה היא התוכנית שתיאורה הוא באורך מיליארד, והפלט שלה הוא שוב "000111000". בשלב זה,

ולכן

(ולכן הוא לא השתנה). אמנם הרמה המתאימה היא 2, אך היות שברמה זו כבר יש צומת המשוייך לתוכנית המציירת מחרוזת זו, לא נשייך את התוכנית לצומת.


בניית העץ 2 - שיוך צומת שני לתכנית בעלת אורך תיאור 0

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

ולכן

עלינו לשייך את התוכנית לצומת ברמה . היות שהצומת השמאלי ביותר ברמה זו תפוס, נשייך אותו לצומת השני משמאל ברמה 1.

בניית העץ 3 - שיוך עוד מספר צמתים

נמשיך כך הלאה והלאה. לפי הdovetailing, כל תוכנית שתסתיים בסופו של דבר תישקל ותשוייך לצומת. כל מחרוזת המיוצרת ע"י תוכנית כלשהי, תשוייך לצומת כלשהו בעץ. נקבל עץ אינסופי, שרק לעליו יש שיוך (לדוגמה, בתרשים "בניית העץ 3" בצד שמאל).

קידוד ופענוח[עריכה]

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

  1. מוגדרת היטב.
  2. איננה נתנת לחישוב (ראינו כבר שפונקציית הסיבוכיות איננה נתנת לחישוב).


נניח שיש לנו אוראקל, עם זאת, המגלה לנו את . במקרה זה, נוכל לחזור על תהליך בניית העץ, ונעצור ברגע שמשוייכת תוכנית המייצרת את לצומת בגובה .

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

אורך הקידוד, לכן, הוא

כנדרש.


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

התכנות בניית עץ השיוך[עריכה]

בבניית עץ השיוך הנחנו שאם אנו בונים את העץ לפי הכללים, אז בכל פעם שמסתיימת תוכנית , אם התעדכן כלפי מטה, אז יש צומת פנוי ברמה . מדוע זה נכון?

ראשית נוכיח את המשפט הבא:


משפט:

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


הוכחה: עפ"י ההגדרה,

היות שאף תוכנית איננה מופיעה פעמיים באותה רמה בעץ, אז כל ה- נפרדים. לכן נקבל:

נפשט את הטור האינסופי:


נשים לב ש-. אם נחבר זאת למשפט הקודם, נקבל את המשפט הבא.


משפט:

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


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

תער אוקאם[עריכה]

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

לפלס חשב על הבעיה הבאה: נניח שכל מה שידוע לנו על השמש היא שהיא זרחה מדי יום במהלך אלפי השנים האחרונות. מדוע, למעשה, אנו חושבים שהיא תזרח גם מחר?

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

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

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

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

נשערך ביטויים אלה. ראשית, נשים לב שעבור קבוע כלשהו,

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

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

שממנו נובע

עבור

נציב זאת בנוסחת בייס מקודם, ונקבל

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


הפרק הקודם:
יישומי אי-דחיסות
הסתברות אוניברסאלית הפרק הבא:
בעיות זיהוי ובעיות חיפוש