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