לדלג לתוכן

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

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

כיצד מחליטים האם מחרוזת היא אקראית או נתונה לפי חוקיות מסויימת? נתבונן בשתי המחרוזות הבאות:

  1. 0101010101010101010101010101010101010101
  2. 0011010010001000010111011110101010100101

אינטואיטיבית, המחרוזת הראשונה בעלת חוקיות ברורה ואילו השניה נראית "אקראית" וחסרת חוקיות, אולם כיצד אפשר להגדיר זאת בצורה מדוייקת? נשים לב שאפשר לתאר כיצד לייצר את המחרוזת הראשונה בצורה קצרה: "כתוב את הרצף '01' 20 פעמים", אך את ייצור המחרוזת השנייה כנראה שנצטרך לתאר פחות-או-יותר בעזרת תוכנה: "כתוב את הרצף 0011010010001000010111011110101010100101".

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

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

הגדרות

[עריכה]

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


הגדרה: סיבוכיות קולמוגורוב (גרסת מ"ט)

סיבוכיות קולומוגורוב של מחרוזת , היא אורך הזוג הקצר ביותר של מ"ט וקלט, כך שתוצר פעולת המכונה על הקלט היא :

עם זאת, בפרק זה נשתמש בהגדרה גמישה יותר (ומדוייקת פחות), התופסת יותר את רוח הדברים.

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


הגדרה: סיבוכיות קולמוגורוב (גרסת שפה אוניברסאלית מפורשת)

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

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

הדבר מוביל אותנו לאבחנה הבאה:



משפט:

לכל שתי שפות אוניברסאליות ו, קיים קבוע המקיים


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


הגדרה: סיבוכיות קולמוגורוב

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


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

Flag of Ireland
Flag of Belgium

הגדרה:

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

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



אי-חישוביות פונקציית הסיבוכיות

[עריכה]

למרבה הצער, אין אפשרות לחשב את סיבוכיות קולמוגורוב.


משפט:

הפונקציה אינה ניתנת לחישוב.          


הוכחה: (ההוכחה מעט דומה באופייה להוכחת אי-כריעות בעיית העצירה.)

נניח על דרך השלילה שישנה תוכנית המחשבת את .

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


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

  1. סימנים נדרשים לתיאור
  2. סימנים נדרשים לתיאור .
  3. (קבוע כלשהו) סימנים לתיאור הקריאה ל.

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

אי-דחיסות מחרוזות

[עריכה]

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

טענה:

קיים קבוע שעבורו, לכל מחרוזת ,  


הוכחה: ברור ניתן לתאר את המחרוזת ע"י התיאור "להלן המחרוזת המבוקשת" שלאחריה פשוט המחרוזת .

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

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


משפט: קיום מחרוזות אי-דחיסות

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


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

יתרה מזאת, רוב המחרוזות אינן דחיסות באופן משמעותי.


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

נסמן ב מספר טבעי כלשהו.

.

(הוכחת המשפט נמצאת בתרגיל: רוב המחרוזות אינן דחיסות במיוחד.) נשים לב שמשמעות הביטוי היא ש99.9% מהמחרוזות אינן דחיסות ביותר מ10 תווים!

כלל השרשרת לסיבוכיות

[עריכה]

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

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



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



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

     

מעט אטימולוגיה ותורת האינפורמציה.

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

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


הוכחה: ראשית נראה כי

כדי לייצר תכנית הפולטת את , נוכל להשתמש בתכנית הבאה, המורכבת מהחלקים הבאים:

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

כעת נראה כי

כדי להוכיח את כוון זה, נגדיר את הקבוצה

,

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

כקבוצת זוגות המחרוזות המקיימות זאת כשהמחרוזת הראשונה מבין השתיים היא .

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

.

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

.

באותו אופן אפשר להראות כי

נגדיר כעת את הקבוצה כך:

אז לפי הבניה,

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

.

הוכחת הכוון השני מסתיימת ע"י הצבת הגדרת .


הפרק הקודם:
משפט הרקורסיה
סיבוכיות קולמוגורוב
תרגילים
הפרק הבא:
יישומי אי-דחיסות