מבני נתונים ואלגוריתמים - מחברת קורס/אלגוריתמים/נוסחאות נסיגה

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

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


כדאי לדעת:

בספר הקורס, הפרק "Recurrences" דן בנושאים אלה.


מהן נוסחאות נסיגה?[עריכה]

הגדרה:

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

בעיות טכניות[עריכה]

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


שימו לב:

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






נתמודד עם שתי הבעיות כך:

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


עכשיו תורכם:

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

הגישות לפתרון[עריכה]

ישנן שתי שיטות (עיקריות) לפתור נוסחאות נסיגה:

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

פרישה[עריכה]

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



דוגמה:

נפרוש את נוסחת הנסיגה .

עץ הפרישה. ט"ו בשבט שמח.
עץ הפרישה. ט"ו בשבט שמח.

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




דוגמה:

נפרוש את נוסחת הנסיגה .

עץ הפרישה. ט"ו בשבט שמח.
עץ הפרישה. ט"ו בשבט שמח.

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


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



משפט:

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


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



דוגמה:

אם , אז .


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




דוגמה:

אם , אז .


הוכחה: ראינו שאם , אז




כאשר גובה העץ, אבל מהמשפט האחרון, . נקבל, לכן,




כעת משתמש בזהות הלוגריתמית האומרת שלכל ,‏. נקבל

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



משפט המאסטר[עריכה]

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



משפט:

נתון , עבור שלם וקבוע כלשהם. אז:


הנה דוגמה לשימוש במשפט המאסטר.



דוגמה:

הוכח שאם , אז .


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


שימו לב:

משפט המאסטר חל אך ורק על נוסחאות מהצורה

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

אינדוקציה[עריכה]

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



דוגמה:

נוכיח שאם , אז .


הוכחה: נראה (באינדוקציה) שקיימים , , כך שלכל ,‏ .

(מעבר האינדוקציה) נניח שהטענה נכונה עד (כולל) , ונראה שהיא נכונה גם עבור :





לכל שנבחר, הביטוי האחרון קטן או שווה ל.

(בסיס האינדוקציה) ננסה להראות שהטענה נכונה עבור :

.

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

ננסה שוב.(בסיס האינדוקציה) ננסה להראות שהטענה נכונה עבור ו:



כלומר, בסיס האינדוקציה יחזיק אם נבחר .

לסיכום, הוכחנו את הטענה לכל , עבור איזה שנבחר.




דוגמה:

נוכיח שאם , אז .


הוכחה: נראה (באינדוקציה) שקיימים , , כך שלכל ,‏ .

(מעבר האינדוקציה) נניח שהטענה נכונה עד (כולל) , ונראה שהיא נכונה גם עבור :





לכל שנבחר, הביטוי האחרון קטן או שווה ל.

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

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



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