תורת החישוביות והסיבוכיות עונה על השאלה - ״איזה בעיות ניתן לפתור בצורה יעילה באמצעות מחשב״.
נזכר שבאמצעות המודל החישובי ענינו על השאלה ״איזה בעיות ניתן לפתור באמצעות מחשב וראינו שיש קשר בין שפות שמחשב יכול לפתור לבין שפות כריעות שאלו שפות שמכונת טיורינג יכולה לקבל.
נתעסק בשתי סוגי בעיות
בעיות חיפוש - מבקשות פתרון כלשהו (יכול להיות כמה פתרונות תקינים אבל צריך להחזיר רק אחד)
בעיות הכרעה - מספקות פתרון חד משמעי - true/false
ונענה על השאלה איך ממדלים אותם ומה הקשר בינהם.
בעיות קנוניות
בעיות חיפוש מפורסמות שילוו אותנו כאשר נרצה למדל בעיות חיפוש נוספות.
3-COL
נתון גרף ונרצה למצוא צביעה של קודקודי בשלושה צבעים ללא קשת ״מונוכרומטית״ כלומר לא קיימת קשת ששני הקצוות שלה צבועים באותו הצבע.
למשל זה גרף שלא ניתן לצבוע כל קשת באופן הנ״ל
3-SAT
נתונה נוסחה בוליאנית בצורה נסמנה והמכילה משתנים בוליאנים. נרצה למצוא השמה למשתנים שנותנת השמה מספקת כלומר המחזירה
נזכיר שנוסחה בצורה היא נוסחה מהצורה
כלומר נוסחה שעוטפת 3 משתנים בוליאניים בפסוקיות או וכל קבוצה של 3 או פחות מחוברת לקבוצה אחרת עם וגם. (נשים לב ש יכול להיות גם מהצורה כלומר המשלים)
נשים לב שאם נסמן פסוקית בודדת שמכילה 3 משתנים אז נוכל למצוא פסוקית שלא ניתן לספק אותה על ידי
מציאת מסלול בגרף
עבור גרף וזוג קודקודים נרצה לדעת האם קיים בינהם מסלול.
Independent Set
בהינתן גרף לא מכוון ומספר נרצה לבדוק האם יש בגרף קודקודים ללא אף קשת בינהם (קבוצה בלתי תלויה)
מידול בעיות חיפוש
נתאר בעית חיפוש על ידי יחסים
יחס הוא אוסף של זוגות
כאשר
ו מייצג בעיה כלשהי ו הוא הפתרון עבורה.
למשל עבור בעיית ה 3col
היא צביעה חוקית של
סימון: יהווה את קבוצת אוסף הפתרונות של קלט כלשהו כלומר
אלגוריתם לפתרון בעיית חיפוש
אלגוריתם הוא אוסף כללים סופי שמגדיר תהליך חישובי במודל חישובי ״סביר״. כאשר סביר שקול למכונת טיורינג עם סרט בודד.
כלומר לפתור בעיית חיפוש זה כמו להגיד שלכל
אם אז
אם אז נסמן סימון שמעיד שאין פתרון.
בעיות הכרעה
בעיות שהתשובה עליהן היא true/false ואותם ממדלים על ידי קבוצות.
כלומר קבוצת כל הקלטים שמחזירים true עבור הבעיה שלנו.
למשל
אלגוריתם פותר בעית הכרעה :
סיבוכיות זמן
עבור מכונת טיורינג בעלת סרט בודד נסמן - מספר הצעדים ש רצה על קלט עד שעוצרת (אם לא עוצרת אז ) .
כדי למדוד יעילות וסיבוכיות נגדיר עבור אלגוריתם
פונקציית זמן הריצה של שמקיימת
כלומר הזמן המקסימלי הדרוש כדי להריץ את את האלגוריתם על קלט באורך .
מה ייחשב יעיל?
״פולינומי״ - החישוב של יקרא ״יעיל״ אם קיים פולינום כלשהו כך שלכל מתקיים
מצב זה נקרא סיבוכיות זמן פולינומית
אלגוריתם לא יהיה יעיל אם לא קיים פולינום כזה למשל עבור סיבוכיות מעריכית כמו .
הבחנה
אלגוריתם יעיל הוא אלגוריתם שרץ בזמן פולינומי לאורך הקלט שלו למשל אם הקלט הוא אז האלגוריתם צריך לרוץ בזמן
מחלקות של בעיות חיפוש
נרצה בתוך עולם של בעיות החיפוש למצוא את קבוצת בעיות החיפוש שיש להן אלגוריתם יעיל שמוצא פתרון. נסמן את קבוצה זאת כ - polynomial find. יתקיים עבורו ש
(R זאת בעיית חיפוש) אם:
חסום פולינומית כלומר
כלומר אורך הפולט הוא פולינומי לאורך הקלט.
קיים אלגוריתם פולינומי שפותר את
הבחנה
זה תנאי הכרחי אבל לא מספיק כלומר לא כל יחס שהפתרונות שלו הם קצרים יהיה ב למשל חסום פולינומית אבל לא ידוע אם הוא ב כי לא מכירים אלגוריתם שפותר אותה ביעילות. מה שכן אנחנו יכולים לעשות זה לוודא שפתרון כלשהו הוא תקין כלומר בהינתן שיש פתרון נוכל לוודא אותו ביעילות.
מחלקה חשובה נוספת של בעיות חיפוש נקראת שמתארת בעיות שוידוא פתרון ניתן לעשות ביעילות. polynomial check. במקרה זה, . באופן פורמלי יותר אם חסום פולינומית וקיים אלגוריתם פולינומי כך שלכל זוג איברים יתקיים .
שאלה: האם ?
אינטואיטיבית נראה שכן אבל בפועל זה לא המצב.
אם כן , ישנו ושמקיים ולכן אין הכלה. ההסבר ללמה זה נכון היא שבאלגוריתם וידוא פתרון לפעמים לאמת פתרון קשה מאוד יהיה יותר מורכב מלמצוא אותו. לדוגמה :
עבור תמיד היא תשובה נכונה כי זה איחוד של כל הקלטים עם 0 וקלטים תקינים עם 1.
היא בעצם בעיה הדורשת מאיתנו לבדוק האם עוצרת על שזאת בעיה לא כריעה.
הבחנה
לא ידוע האם
מחלקות של בעיות הכרעה
מהן המקבילות של בעולם של בעיות הכרעה?
המקבילה ל נקראת והיא מייצגת את אוסף בעיות ההכרעה שיש להן אלגוריתם פולינומי כלומר קיים להן אלגוריתם מכריע . למשל-
המקבילה של היא קבוצת אלגוריתמים שכל אחד מהם הוא מוודא או באופן פורמלי אלגוריתם עבור בעיית הכרעה כלשהי שמקיים 2 תנאים
אי שלמות- לכל קיים כך ש
נאותות- אם אזי לכל מתקיים
כלומר
סך הכל, נגדיר מחלקה של בעיות הכרעה שניתנות לווידוא כ ויתקיים אם קיים ל מוודא פולינומי מסוג :
כלומר אם קיים מוודא ופולינום כך ש
ו הינו אלגוריתם שזמן ריצתו הוא פולינומי ב .
נשים לב
אומנם אמרנו ש היא המקבילה של ומתקיים אבל יתקיים ש בגלל ה עד הריק, לכל יש אלגוריתם פולינומי שמכריע את ויתקיים ש כזו היא ב כי נוכל להגדיר מוודא פולינומי באופן הבא כלומר הוא מתעלם מהעד ומכריע רק לפי הקלט.
משפט: לכל בעית חיפוש ניתן להגדיר בעית הכרעה מתאימה ובפרט מתקיים .
בעיית קליקה
יהי גרף לא מכוון.
קבוצת קודקודים נקראת ״קליקה״ אם לכל יש קשת בין ל
נגדיר את בעיית החיפוש הבאה
נרצה להראות ש . כלומר לבנות אלגוריתם שמוצא פתרון בזמן פולינומי לגודל של . ראשית נשים לב שהיחס עצמו חסום פולינומית כי לכל ביחס מתקיים . כעת נוכל לבנות את האלגוריתם
A(G):
create S with 4 vertex
for all u,v in S
if (u,v) not in E
return NULL
return S
זה האלגוריתם הנאיבי ביותר ולכן ברור שהוא פותר את הבעיה. הוא גם פולינומי כי מספר תתי הקבוצות בגודל 4 הוא .
נרחיב את הבעיה לבעיה כללית יותר
כעת נרצה לבדוק האם היחס הזה גם שייך ל . במקרה הזה מתקיים שהאלגוריתם מהתרגיל הקודם אינו פולינומי כי נקבל שנרצה לבנות את תתי הקבוצות בגודל הינו
שבהתאם ל יכול להיות אקספוננציאלי לגודל הקלט למשל אם נקבל שזמן הריצה יהיה גדול או שווה ל .
אם כן התשובה לשאלה נשארת פתוחה כי אנחנו לא יודעים אם קיים אלגוריתם ומצד שני לא קיבלנו עדיין כלים לקבוע באופן חד משמעי בלי למצוא אלגוריתם.
האם ? כן
בהינתן האלגוריתם יבדוק אם ושלכל מתקיים אם הבדיקות עברו בהצלחה יחזיר אחרת . כעת יותר קל לאמת כי אנחנו מביאים איזשהו ״עד״ כמו שאמרנו. זמן הריצה יהיה חסום על ידי
בעיית composite
נגדיר את בעיית ההכרעה הבאה
נרצה להראות שהבעייה שייכת ל . אכן נגדיר
V(n,k)
if 1<k<n AND n mod k == 0
return 1
return 0
האלגוריתם אכן מקיים אי שלמות ונאותות עבור composite :
אחרת אם הוא לא שייך בוודאי שאין לו מחלק בתחום הזה כי הוא ראשוני
והוא בהחלט פולינומי כיוון שגודל ה״עד״ חסום בגודל הקלט.
סיכום: סוגי מחלקות
חיפוש :
מציאה קבוצה של יחסים חסומים פולינומית כך שלכל קיים אלגוריתם פולינומי שמוצא פתרון כלשהו
ווידוא קבוצה של יחסים חסומים פולינומית כך שלכל קיים אלגוריתם פולינומי שמקבל ומוודא שהוא אכן שייך ל הכרעה :
מציאה קבוצה של בעיות כך שלכל בעיה קיים אלגוריתם פולינומי שמכריע אותה כלומר האם איבר שייך לקבוצה או לא.
ווידוא קבוצה של כך שלכל בעיה קיים מוודא פולינומי
הכלה של המחלקות
הראנו אם כן ש וש .
מה לגבי: ו ?
אם כן ההכלה של אחד בשני אינה כה ברורה אבל נוכל לטעון את הטענה הבעיה
הוכחה: : נניח ונרצה להראות ש .
תהי כלומר קיים פולינומי כך ש
נגדיר
אכן חסום פולינומית כי מוגדר לפי הזוגות שהמוודא מקבל ולפי הגדרה חסום פולינומית ל המתאים לו. כמו כן הוא אלגוריתם פולינומי ולכן .
מההנחה ש מתקיים ולכן קיים אלגוריתם פולינומי שמקיים
לכן נוכל להגדיר אלגוריתם פולינומי ל על ידי
ומתקיים ש כדרוש.
: נניח וצריך להראות ש .
יהי נרצה להראות שהוא גם ב
אם כן, עבור מתקיים שישנו אלגוריתם פולינומי כך ש
אם כן, נגדיר
מתקיים כי אפשר להשתמש ב בתור המוודא הפולינומי ל כי מהגדרתו נובע ש אמ״מ כאשר קיים שכזה חסום פולינומי באורכו של .
מההנחה מתקיים ש כלומר קיים אלגוריתם שמכריע את
כעת , נגדיר בעיה שקולה ל :
כלומר בעיה שמכילה את הקלט ביחד עם כל התחיליות של הפתרון שלו בבעיית החיפוש . גם כאן מתקיים כיוון שנוכל להשתמש בוריאציה של כמוודא פולינומי כלומר
זה עדיין פולינומי כי מציאת שכזה היא עדיין פולינומית ולכן , מההנחה מתקיים גם ש ולכן קיים לו אלגוריתם שמכריע כל קלט מהצורה .