Presentation is loading. Please wait.

Presentation is loading. Please wait.

תרגול 3 - רקורסיה.

Similar presentations


Presentation on theme: "תרגול 3 - רקורסיה."— Presentation transcript:

1 תרגול 3 - רקורסיה

2 נוסחה המתארת ירידה במורד עץ הרקורסיה
מהי נוסחא רקורסיבית? נוסחה המתארת ירידה במורד עץ הרקורסיה 𝑇 𝑛 =𝑎𝑇 𝑛 𝑏 +𝑓 𝑛 𝑎 - מספר הקריאות הרקורסיביות בכל איטרציה 𝑏- פי כמה מקטינים את הקלט בכל קריאה רקורסיבית 𝑓 𝑛 - פונקציית זמן הריצה של הפעולות בכל קריאה רקורסיבית

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

4 תרגיל 1 – שיטת ההצבה בסיס האינדוקציה 𝑛=1: 𝑇 1 =1≤𝑐 1 ,כלומר נצטרך 𝑐≥1
מנחשים את הפתרון ואז מוכיחים אותו באינדוקציה נתונה הנוסחא הבאה: 𝑇(1)=1 𝑇 𝑛 =𝑇 𝑛 2 + 𝑛 הראו ש- 𝑇 𝑛 =𝑂 𝑛 . פתרון: בשיטת ההצבה: 𝑇 𝑛 =𝑂 𝑛 ← לפי ההגדרה קיים 𝑐 כך ש -𝑇 𝑛 ≤𝑐 𝑛 בסיס האינדוקציה 𝑛=1: 𝑇 1 =1≤𝑐 1 ,כלומר נצטרך 𝑐≥1 צעד האינדוקציה: נניח 𝑇 𝑘 ≤𝑐 𝑘 לכל 𝑘<𝑛 הנחת האינדוקציה 𝑇 𝑛 =𝑇 𝑛 𝑛 ≤𝑐 𝑛 𝑛 = 𝑛 𝑐 ≤𝑐 𝑛 כלומר, צריך למצוא c כך ש 𝑐 ≤𝑐, נקח 𝑐=4 נרצה שיתקיים

5 תרגיל 2 – שיטת האיטרציה i=1 i=2 i=3
מפתחים "עד הסוף" ומנסים לחשב נוסחא סגורה לסכום שהתקבל מצאו את זמן הריצה של הנוסחה הרקורסיביות הבאה: 𝑇(𝑎)=𝜃(1) 𝑇(𝑛)=𝑇(𝑛−𝑎)+𝑇(𝑎)+𝑛 פתרון: נפתח בשיטת האיטרציה ופשוט נפתח את הנוסחא עד קבלת נוסחא כללית: 𝑇 𝑛 =𝑇 𝑛−𝑎 +𝑇 𝑎 +𝑛 = 𝑇 𝑛−2𝑎 +𝑇 𝑎 + 𝑛−𝑎 +𝑇 𝑎 +𝑛 = 𝑇 𝑛−3𝑎 +𝑇 𝑎 + 𝑛−2𝑎 +2𝑇 𝑎 +2𝑛−𝑎 =𝑇 𝑛−3𝑎 +3𝑇 𝑎 +3𝑛−2𝑎−𝑎=… =𝑇 𝑛−𝑖𝑎 +𝑖∗𝑇 𝑎 +𝑖∗𝑛− 𝑘=1 𝑖−1 𝑘∗𝑎 =𝑇 𝑛−𝑖𝑎 +𝑖∗𝑇 𝑎 +𝑖∗𝑛−𝑎∗ 𝑖−1 ∗𝑖 2 i=1 i=2 i=3

6 תרגיל 2 – שיטת האיטרציה 𝑇 𝑛 =𝑇 𝑛−𝑖∗𝑎 +𝑖∗𝑇 𝑎 +𝑖∗𝑛−𝑎∗ 𝑖∗ 𝑖−1 2
מפתחים "עד הסוף" ומנסים לחשב נוסחא סגורה לסכום שהתקבל מצאו את זמן הריצה של הנוסחה הרקורסיביות הבאה: 𝑇(𝑎)=𝜃(1) 𝑇(𝑛)=𝑇(𝑛−𝑎)+𝑇(𝑎)+𝑛 𝑇 𝑛 =𝑇 𝑛−𝑖∗𝑎 +𝑖∗𝑇 𝑎 +𝑖∗𝑛−𝑎∗ 𝑖∗ 𝑖−1 2 כמה איטרציות נבצע עד שנגיע למקרה בסיס 𝑇 𝑎 ? 𝑇 𝑛−𝑖∗𝑎 = 𝑇 𝑎 𝑛−𝑖∗𝑎=𝑎 𝑖= 𝑛−𝑎 𝑎 = 𝑛 𝑎 −1

7 תרגיל 2 – שיטת האיטרציה 𝑇(𝑎)=𝜃(1) 𝑇(𝑛)=𝑇(𝑛−𝑎)+𝑇(𝑎)+𝑛
מפתחים "עד הסוף" ומנסים לחשב נוסחא סגורה לסכום שהתקבל 𝑇(𝑎)=𝜃(1) 𝑇(𝑛)=𝑇(𝑛−𝑎)+𝑇(𝑎)+𝑛 נציב 𝑖= 𝑛 𝑎 −1 בנוסחה ונקבל 𝑇 𝑛 =𝑇 𝑛−𝑖∗𝑎 +𝑖∗𝑇 𝑎 +𝑖∗𝑛−𝑎∗ 𝑖∗ 𝑖−1 2 =𝑇 𝑛− 𝑛 𝑎 −1 𝑎 + 𝑛 𝑎 −1 𝑇 𝑎 + 𝑛 𝑎 −1 𝑛−𝑎 𝑛 𝑎 −1 𝑛 𝑎 −2 =𝑇 𝑎 + 𝑛 𝑎 𝑇 𝑎 −𝑇 𝑎 + 𝑛 2 𝑎 −𝑛− 𝑎 2 ∗ 𝑛 2 𝑎 2 − 3𝑛 𝑎 +2 = 𝑛 𝑎 𝑇 𝑎 + 𝑛 2 𝑎 −𝑛− 𝑛 2 2𝑎 + 3𝑛 2 −𝑎 = 𝑛 𝑎 𝑇 𝑎 + 𝑛 2 2𝑎 + 𝑛 2 −𝑎 =𝛩 𝑛 𝛩 1 +𝛩 𝑛 2 𝛩 1 +𝛩 𝑛 𝛩 1 −𝛩 1 =𝛩( 𝑛 2 ) ולכן 𝑻 𝒏 =𝜣( 𝒏 𝟐 )

8 Master Theorem נתון: 𝑇(𝑛)=𝑎𝑇( 𝑛 𝑏 )+𝑓(𝑛)
נתון: 𝑇(𝑛)=𝑎𝑇( 𝑛 𝑏 )+𝑓(𝑛) רעיון (לא פורמלי): נשווה את 𝑓(𝑛) עם 𝑛 log 𝑏 𝑎 ונראה "מי יותר דומיננטי" כללים: אם 𝑓 𝑛 =𝑂( 𝑛 log 𝑏 𝑎 −𝜖 ) אז 𝑇 𝑛 =𝜃 𝑛 log 𝑏 𝑎 אם 𝑓 𝑛 =𝜃( 𝑛 log 𝑏 𝑎 ) אז 𝑇 𝑛 =𝜃 𝑛 log 𝑏 𝑎 log 𝑛 אם 𝑓 𝑛 =Ω( 𝑛 log 𝑏 𝑎 +𝜖 ) וגם קיים 𝑐<1 כך ש 𝑎𝑓 𝑛 𝑏 <𝑐𝑓 𝑛 לכל n מספיק גדול אז 𝑇 𝑛 =𝜃(𝑓 𝑛 ) הערה: מקרה 2 המוכלל - אם 𝑓 𝑛 =𝜃( 𝑛 log 𝑏 𝑎 log 𝑘 𝑛 ) אז 𝑇 𝑛 =𝜃 𝑛 log 𝑏 𝑎 log k+1 𝑛 בעצם f(n) קובע לנו מהי הפונקציה המתאימה

9 תרגיל 3 - שיטת המאסטר מצאו את זמני הריצה של הנוסחאות הרקורסיביות הבאות: 𝑇(𝑛) = 7𝑇(𝑛/2) + 𝑛2 𝑇(𝑛) = 4𝑇(𝑛/2) + 𝑛2 𝑇(𝑛) = 2𝑇(𝑛/3) + 𝑛3

10 תרגיל 3 𝑇(𝑛) = 7𝑇 𝑛 2 + 𝑛2 פתרון: 𝑎 = 7, 𝑏 = 2, 𝑓(𝑛) = 𝑛2
𝑇(𝑛) = 7𝑇 𝑛 𝑛2 פתרון: 𝑎 = 7, 𝑏 = 2, 𝑓(𝑛) = 𝑛2 𝑛 log 𝑏 𝑎 = 𝑛 2.803… 𝑓 𝑛 =𝑛 2 =𝑂 𝑛 2.8−𝜖 =𝑂 𝑛 log 𝑏 𝑎 −𝜖 ולכן: 𝑻(𝒏)=𝜽( 𝒏 𝐥𝐨𝐠 𝟐 𝟕 ) אם 𝑓 𝑛 =𝑂( 𝑛 log 𝑏 𝑎 −𝜖 ) אז 𝑇 𝑛 =𝜃 𝑛 log 𝑏 𝑎

11 תרגיל 3 𝑇(𝑛) = 4𝑇 𝑛 2 + 𝑛2 פתרון: a = 4, b = 2, f(n) = n2
𝑇(𝑛) = 4𝑇 𝑛 𝑛2 פתרון: a = 4, b = 2, f(n) = n2 𝑛 log 𝑏 𝑎 = 𝑛 log = 𝑛 2 𝑓 𝑛 =𝑛 2 =𝜃 𝑛 2 =𝜃 𝑛 log 𝑏 𝑎 ולכן : 𝑇(𝑛)=𝜃( 𝑛 2 log 𝑛 ) אם 𝑓 𝑛 =𝜃( 𝑛 log 𝑏 𝑎 ) אז 𝑇 𝑛 =𝜃 𝑛 log 𝑏 𝑎 log 𝑛

12 תרגיל 3 𝑇(𝑛) = 2𝑇 𝑛 3 + 𝑛3 פתרון: a = 2, b = 3, f(n) = n3
𝑇(𝑛) = 2𝑇 𝑛 𝑛3 פתרון: a = 2, b = 3, f(n) = n3 𝑛 log 𝑏 𝑎 = 𝑛 0.63… 𝑓 𝑛 =𝑛 3 =Ω 𝑛 𝜖 =Ω 𝑛 log 𝑏 𝑎 +𝜖 𝑐<1 𝑎𝑛𝑑 2⋅𝑓 𝑛 3 = 2 𝑛 <𝑐 𝑛 3 Take c = 0.5 𝑇(𝑛)=𝜃( 𝑛 3 ) ⇔ <𝑐<1 אם 𝑓 𝑛 =Ω( 𝑛 log 𝑏 𝑎 +𝜖 ) וגם קיים 𝑐<1 כך ש 𝑎𝑓 𝑛 𝑏 <𝑐𝑓 𝑛 לכל n מספיק גדול אז 𝑇 𝑛 =𝜃(𝑓 𝑛 )

13 שאלה 6 ידוע שלכל קבוע t קיים 𝑛 0 כך שלכל 𝑛> 𝑛 0 , 𝑙𝑜𝑔𝑛≤ 𝑛 t
השתמשו בשיטת המאסטר למצוא את 𝑇(𝑛): 𝑇(𝑛) = 3𝑇(𝑛/2) + 𝑛𝑙𝑜𝑔𝑛 פתרון: 𝑎 = 3, 𝑏 = 2, 𝑓(𝑛) = 𝑛𝑙𝑜𝑔𝑛 log 2 3 =1.585 נראה כי : 𝑓 𝑛 =𝑛𝑙𝑜𝑔𝑛=𝑂 𝑛 log 2 3 −𝜖 =𝑂 𝑛 1.585−𝜖 כלומר, לפי הגדרה, נמצא 𝑐>0 כך ש 𝑛𝑙𝑜𝑔𝑛≤𝑐 𝑛 −𝜖 נחלק ב 𝑛 : 𝑙𝑜𝑔𝑛≤𝑐 𝑛 −𝜖−1 =𝑐 𝑛 0.585−𝜖 ידוע שלכל קבוע t קיים 𝑛 0 כך שלכל 𝑛> 𝑛 0 , 𝑙𝑜𝑔𝑛≤ 𝑛 t נקח 𝑐=1 ו 𝜖<0.585 כלשהו. נקבל כי𝑓 𝑛 =𝑂 𝑛 log 2 3 −𝜖 , ולכן .𝑇(𝑛) = Θ( 𝑛 𝑙𝑜𝑔23 )

14 שאלה 6 השתמשו בשיטת המאסטר למצוא את 𝑇(𝑛): 𝑇(𝑛) = 3𝑇(𝑛/2) + 𝑛𝑙𝑜𝑔𝑛
השתמשו בשיטת המאסטר למצוא את 𝑇(𝑛): 𝑇(𝑛) = 3𝑇(𝑛/2) + 𝑛𝑙𝑜𝑔𝑛 פתרון: 𝑎 = 3, 𝑏 = 2, 𝑓(𝑛) = 𝑛𝑙𝑜𝑔𝑛 log 2 3 =1.585 נראה כי : 𝑓 𝑛 =𝑛𝑙𝑜𝑔𝑛=𝑂 𝑛 log 2 3 −𝜖 =𝑂 𝑛 1.585−𝜖 נראה כי 𝑛⋅𝑙𝑜𝑔𝑛=𝑂 𝑛 1.5 : lim 𝑛→∞ 𝑓 𝑛 𝑔 𝑛 = lim 𝑛→∞ 𝑛⋅ log 𝑛 𝑛 = lim 𝑛→∞ log 𝑛 𝑛 = ∞ ∞ נשתמש בלופיטל (נגזרת של המונה והמכנה) ונקבל : lim 𝑛→∞ log 𝑛 𝑛 = lim 𝑛→∞ 𝑛 ⋅ ln ⋅ 𝑛 − = lim 𝑛→∞ ln ⋅ 𝑛 =0<∞ lim 𝑛→∞ 𝑓 𝑛 𝑔 𝑛 =0<∞ כלומר 𝑓 𝑛 =𝑂 𝑛 1.5 =𝑂 𝑛 log 2 3 −𝜖 ולכן 𝑇(𝑛) = Θ( 𝑛 log )

15 תרגיל 4 𝑓(0)=0 𝑓(1)=1 𝑓(𝑖)=𝑓(𝑖−1)+𝑓(𝑖−2), 𝑖>1
מצאו פונקציה איטרטיבית ופונקציה רקורסיבית למציאת האיבר ה- 𝑛 בסדרת פיבונצ'י 𝑓(𝑛), ונתחו את זמני הריצה. 𝑓(0)=0 𝑓(1)=1 𝑓(𝑖)=𝑓(𝑖−1)+𝑓(𝑖−2), 𝑖>1 שיטה רקורסיבית: זמן הריצה מוגדר ע"י הנוסחה הרקורסיבית T(n)=T(n-1)+T(n-2)+1

16 תרגיל 4 נחסום את הנוסחה הרקורסיבית מלמעלה ומלטה 𝑇(𝑛)=𝑇(𝑛−1)+𝑇(𝑛−2)+1
כדי לחסום מלמעלה נשתמש באי-שיוויון 𝑇(𝑛)=𝑇(𝑛−1)+𝑇(𝑛−2)+1 ≤ 2𝑇(𝑛−1)+1 כדי לחסום מלמטה נשתמש באי-שיוויון 𝑇(𝑛)=𝑇(𝑛−1)+𝑇(𝑛−2)+1 ≥ 2𝑇(𝑛−2)+1

17 סכום סדרה הנדסית: 𝑖=0 𝑛−1 2 𝑖 = 2 𝑛 −1
תרגיל 4 חסימה מלמעלה: T(n) ≤ 2T(n-1) +1 ≤ 2(2T(n-2) +1) +1 ≤2(2(2T(n-3) +1) +1) +1 ≤ …≤ ≤ 2𝑘𝑇(𝑛−𝑘)+ 𝑖=0 𝑘−1 2 𝑖 נציב 𝑘=𝑛−1 ונקבל 𝑇 𝑛 =𝑂( 2 𝑛−1 + 2 𝑛 )=𝑂( 2 𝑛 ) 𝑆 𝑛 = 𝑎 1 ⋅ 𝑞 𝑛 −1 𝑞−1 סכום סדרה הנדסית: 𝑖=0 𝑛−1 2 𝑖 = 2 𝑛 −1

18 במקרה הטוב נקבל את הזמן הזה...
תרגיל 4 באופן דומה חסימה מלמטה: T(n) ≥ 2T(n-2) +1 ≥ 2(2T(n-4) +1) +1 ≥ 2(2(2T(n-6) +1) +1) +1 ≥ … ≥ ≥ 2kT(n-2k)+ 𝑖=0 𝑘−1 2 𝑖 נציב 𝑘= 𝑛−1 2 ונקבל 𝑇 𝑛 =Ω( 2 𝑛− 𝑛−1 2 )=Ω( 2 𝑛 2 ) במקרה הטוב נקבל את הזמן הזה... זה שווה?

19 תרגיל 4 מצאו שיטה איטרטיבית ושיטה רקורסיבית למציאת האיבר ה 𝑛 בסדרת פיבונצ'י 𝑓(𝑛), ונתחו את זמני הריצה 𝑓(0)=0 𝑓(1)=1 𝑓(𝑖)=𝑓(𝑖−1)+𝑓(𝑖−2), 𝑖>1 שיטה איטרטיבית: זמן ריצה: 𝜃(𝑛)

20 תרגיל 5 הציעו שיטה רקורסיבית לפתרון בעיית מגדלי הנוי ומצאו את זמן הריצה שלה

21 תרגיל 5 מצאו שיטה רקורסיבית לפתרון בעיית מגדלי הנוי ומצאו את זמן הריצה שלה פתרון: זמן הריצה מתואר ע"י הנוסחה הרקורסיבית T(n)=2T(n-1)+1 Tower_Of_Hanoi: If N==1 : Move disk from source to destination return; Tower_Of_Hanoi (N-1, source, destination, helper) Move disk from source to destination Tower_Of_Hanoi (N-1, helper, destination, source)

22 תרגיל 5 T(n) = 2T(n-1) +1 = 2(2T(n-2) +1) +1
נפתור בשיטת האיטרציה: T(n) = 2T(n-1) +1 = 2(2T(n-2) +1) +1 =2(2(2T(n-3) +1) +1) +1 = …= = 2kT(n-k)+ 𝑖=1 𝑘−1 2 𝑖 נציב k=n-1 ונקבל 𝑇 𝑛 = 2 𝑛−1 𝑇 𝑛−1 −1=𝜃 2 𝑛

23 שאלה 8 יש ברשותכם שתי ביצים. אתם נמצאים בבניין בן N קומות. נרצה לדעת מהי הקומה הגבוהה ביותר M שניתן לזרוק ממנה את הביצה מבלי שתישבר? ניתן לזרוק את הביצים כמה פעמים שרוצים מהחלון של איזה קומה שרוצים (כל עוד היא לא נשברת). תארו אלגוריתם יעיל ככל הניתן למצוא את הקומה M.

24 פתרון 1 נזרוק את הביצה הראשונה בכל הקומות 𝑖∗ 𝑛 לכל 1≤𝑖≤ 𝑛 . ברגע שהיא נשברת (נניח ב𝑖=𝑘 ), נזרוק את הביצה השניה 𝑛 פעמים בין הקומות 𝑘−1 𝑛 ל 𝑘 𝑛 . סה"כ יש לכל היותר 2 𝑛 −1 זריקות. 81 = 9* 𝑛 דוגמא: 72 = 8* 𝑛 𝑛 = 9 נקח n = 81 , קודם זורקים מקומה 9, אחר כך מקומה 18, אחר כך מקומה 27 וכך הלאה. נניח והביצה נשברה בקומה 27. אז נצטרך לעבור על הקטע [18,27] בצורה סדרתית מלמטה למעלה. 27 = 3* 𝑛 ניתוח זמן ריצה: במקרה הגרוע הביצה הראשונה נשברת בקומה n, כלומר בסה"כ נעשה 𝑛 זריקות. במקרה הגרוע הביצה השנייה נשברת בקומה אחרונה של הקטע [ 𝑛 -1* 𝑛 , 𝑛], כלומר נעשה 𝑛 -1 זריקות נוספות. בסה"כ ביצענו 𝟐 𝒏 −𝟏 זריקות 18 = 2* 𝑛 9 = 1* 𝑛

25 פתרון 2 - שיפור 1+2+3+…+𝑥≥𝑛 … 13+12+…+1 = 𝑖=𝑥 1 𝑖 13+12+…+2 = 𝑖=𝑥 2 𝑖
שיפור אפשרי - לאזן בין מספר הזריקות שביצענו כדי למצוא קטע, לבין גודל הקטע. נחפש 𝑥 המקיים: את הביצה הראשונה נזרוק מהקומות 𝑖=𝑥 1 𝑖 , כלומר בפעם הראשונה נזרוק מהקומה 𝑥 , אח"כ 𝑥+ 𝑥−1 וכך הלאה. 1+2+3+…+𝑥≥𝑛 13+12+…+1 = 𝑖=𝑥 1 𝑖 1+2+3+…+𝑥≥𝑛 ⇒ 𝑥 𝑥+1 2 ≥𝑛 ⇒ 𝑥 2 +𝑥−2𝑛≥0 ⇒𝑥= 2𝑛−1 13+12+…+2 = 𝑖=𝑥 2 𝑖 =36 = 𝑥+ 𝑥−1 + 𝑥−2 דוגמא: 13+12=25 = 𝑥+ 𝑥−1 2𝑛−1 = = 13 נקח n = 81 , קודם זורקים מקומה 13, אחר כך מקומה 25, אחר כך מקומה 36 וכך הלאה. 13 = 𝑥 נניח והביצה נשברה בקומה 36. אז נצטרך לעבור על הקטע [26,35] בצורה סדרתית מלמטה למעלה, כלומר נבצע עוד 10 זריקות לכל היותר ==> בסה"כ 3+10=13 זריקות. ניתוח זמן ריצה: על כל זריקה בשלב הראשון אנחנו מקטינים קטע חיפוש ב 1, לכן כמות הזריקות בכל מקרה תהיה שווה (ללא תלות באיזה קטע נחפש). בסה"כ נבצע 𝟐𝒏−𝟏 = 𝟏𝟐.𝟕 = 𝟏𝟑 זריקות

26 Analysis of algorithms for multiplication
Given two binary numbers x, y with n-bits each, give an efficient algorithm to calculate the product z = x*y. Analyze the time complexity of this algorithm. Example: (18210) x (15710) = ( )


Download ppt "תרגול 3 - רקורסיה."

Similar presentations


Ads by Google