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