תרגול 3 - רקורסיות 3 שיטות עיקריות לפתור נוסחאות זמן ריצה רקורסיביות: הצבה: מנחשים את הפתרון ואז מוכיחים אותו באינדוקציה איטרציה: מפתחים "עד הסוף" ומנסים לחשב נוסחא סגורה לסכום שהתקבל Master Theorem
Master Theorem נתון: 𝑇(𝑛)=𝑎𝑇( 𝑛 𝑏 )+𝑓(𝑛) רעיון (לא פורמלי ולא מדוייק): נתון: 𝑇(𝑛)=𝑎𝑇( 𝑛 𝑏 )+𝑓(𝑛) רעיון (לא פורמלי ולא מדוייק): נשווה את f(n) עם 𝑛 log 𝑏 𝑎 ונראה "מי יותר דומיננטי" כללים: אם 𝑓 𝑛 =𝑂( 𝑛 log 𝑏 𝑎 −𝜖 ) אז 𝑇 𝑛 =𝜃 𝑛 log 𝑏 𝑎 אם 𝑓 𝑛 =𝜃( 𝑛 log 𝑏 𝑎 ) אז 𝑇 𝑛 =𝜃 𝑛 log 𝑏 𝑎 ⋅ log 𝑛 אם 𝑓 𝑛 =Ω( 𝑛 log 𝑏 𝑎 +𝜖 ) וגם קיים c<1 כך ש 𝑎𝑓 𝑛 𝑏 <𝑐⋅𝑓 𝑛 לכל n מספיק גדול אז 𝑇 𝑛 =𝜃(𝑓 𝑛 ) הערה: מקרה 2 המוכלל - אם 𝑓 𝑛 =𝜃( 𝑛 log 𝑏 𝑎 log 𝑘 𝑛 ) אז 𝑇 𝑛 =𝜃 𝑛 log 𝑏 𝑎 ⋅ log k+1 𝑛
תרגיל 1 מצאו את זמני הריצה של הנוסחאות הרקורסיביות הבאות: T(n) = 7T(n/2) + n2 T(n) = 4T(n/2) + n2 T(n) = 2T(n/3) + n3
תרגיל 1 מצאו את זמני הריצה של הנוסחאות הרקורסיביות הבאות: T(n) = 7T(n/2) + n2 Answer: a = 7, b = 2, f(n) = n2 𝑛 log 𝑏 𝑎 = 𝑛 2.803… 𝑛 2 =𝑂 𝑛 2.8 =𝑂 𝑛 log 𝑏 𝑎 −𝜖 𝑇(𝑛)=𝜃( 𝑛 log 2 7 )
תרגיל 1 מצאו את זמני הריצה של הנוסחאות הרקורסיביות הבאות: T(n) = 4T(n/2) + n2 Answer: a = 4, b = 2, f(n) = n2 𝑛 log 𝑏 𝑎 = 𝑛 2 𝑛 2 =𝜃 𝑛 log 𝑏 𝑎 𝑇(𝑛)=𝜃( 𝑛 2 log 𝑛 )
תרגיל 1 מצאו את זמני הריצה של הנוסחאות הרקורסיביות הבאות: T(n) = 2T(n/3) + n3 Answer: a = 2, b = 3, f(n) = n3 𝑛 log 𝑏 𝑎 = 𝑛 0.63… 𝑛 3 =Ω 𝑛 0.7 =𝑂 𝑛 log 𝑏 𝑎 +𝜖 𝑐<1 𝑎𝑛𝑑 2⋅𝑓 𝑛 3 = 2 𝑛 3 3 3 ≤𝑐 𝑛 3 Take c=0.5 𝑇(𝑛)=𝜃( 𝑛 3 ) ⇔ 2 27 <𝑐<1
תרגיל 2 נתון ש T(1)=1 𝑇 𝑛 =𝑇 𝑛 2 + 𝑛 הראו ש 𝑇 𝑛 =𝑂 𝑛 𝑇 𝑛 =𝑇 𝑛 2 + 𝑛 הראו ש 𝑇 𝑛 =𝑂 𝑛 ללא שימוש בMaster Theorem פתרון בשיטת ההצבה: נניח 𝑇 𝑘 ≤4 𝑘 לכל k<n ואז 𝑇 𝑛 = 𝑇 𝑛 2 + 𝑛 ≤4 𝑛 2 + 𝑛 = 4 2 +1 𝑛 ≤4 𝑛 כנדרש
תרגיל 2 נתון ש T(1)=1 𝑇 𝑛 =𝑇 𝑛 2 + 𝑛 הראו ש 𝑇 𝑛 =𝑂 𝑛 𝑇 𝑛 =𝑇 𝑛 2 + 𝑛 הראו ש 𝑇 𝑛 =𝑂 𝑛 איך ידענו לנחש c=4? פתרון: נניח 𝑇 𝑘 ≤𝑐 𝑘 לכל k<n ואז 𝑇 𝑛 = 𝑇 𝑛 2 + 𝑛 ≤𝑐 𝑛 2 + 𝑛 = 𝑐 2 +1 𝑛 ≤𝑐 𝑛 כלומר, היינו צריכים למצוא c כך ש 𝑐 2 +1 ≤𝑐
תרגיל 3 מצאו את זמן הריצה של הנוסחא הרקורסיביות הבאה: For all j<a, 𝑇(𝑗)=𝑇(𝑎)=𝜃(1) T(n)=T(n-a)+T(a)+n פתרון: נפתח בשיטת האיטרציה 𝑇 𝑛 =𝑇 𝑛−𝑎 +𝑇 𝑎 +𝑛 = 𝑇 𝑛−2𝑎 +𝑇 𝑎 + 𝑛−𝑎 +𝑇 𝑎 +𝑛 = 𝑇 𝑛−3𝑎 +𝑇 𝑎 + 𝑛−2𝑎 +2𝑇 𝑎 +2𝑛−𝑎 =𝑇 𝑛−3𝑎 +3𝑇 𝑎 +3𝑛−2𝑎−𝑎=… =𝑇 𝑛−𝑖𝑎 +𝑖∗𝑇 𝑎 +𝑖∗𝑛− 𝑘=1 𝑖−1 𝑘∗𝑎 =𝑇 𝑛−𝑖∗𝑎 +𝑖∗𝑇 𝑎 +𝑖∗𝑛−𝑎∗ 𝑖∗ 𝑖−1 2
תרגיל 3 i≈ 𝑛 𝑎 −1 ⇐𝑛−𝑖⋅𝑎≤𝑎 המשך: קבלנו את הנוסחא הבאה עבור האיטרציה הi מצאו את זמן הריצה של הנוסחא הרקורסיביות הבאה: For all j<a, 𝑇(𝑗)=𝑇(𝑎)=𝜃(1) T(n)=T(n-a)+T(a)+n המשך: קבלנו את הנוסחא הבאה עבור האיטרציה הi 𝑇 𝑛 =𝑇 𝑛−𝑖∗𝑎 +𝑖∗𝑇 𝑎 +𝑖∗𝑛−𝑎∗ 𝑖∗ 𝑖−1 2 מה הi שנציב בנוסחא? (כלומר, כמה איטרציות יש סה"כ?) i≈ 𝑛 𝑎 −1 ⇐𝑛−𝑖⋅𝑎≤𝑎
תרגיל 3 המשך: נציב 𝑖= 𝑛 𝑎 −1 בנוסחא ונקבל ולכן 𝑻 𝒏 =𝜣( 𝒏 𝟐 ) מצאו את זמן הריצה של הנוסחא הרקורסיביות הבאה: For all j<a, 𝑇(𝑗)=𝑇(𝑎)=𝜃(1) T(n)=T(n-a)+T(a)+n המשך: נציב 𝑖= 𝑛 𝑎 −1 בנוסחא ונקבל 𝑇 𝑛 =𝑇 𝑛− 𝑛 𝑎 −1 𝑎 + 𝑛 𝑎 −1 𝑇 𝑎 + 𝑛 𝑎 −1 𝑛−𝑎 1 2 𝑛 𝑎 −1 𝑛 𝑎 −2 =𝑇 𝑎 + 𝑛 𝑎 𝑇 𝑎 −𝑇 𝑎 + 𝑛 2 𝑎 −𝑛− 𝑎 2 ∗ 𝑛 2 𝑎 2 − 3𝑛 𝑎 +2 = 𝑛 𝑎 𝑇 𝑎 + 𝑛 2 𝑎 −𝑛− 𝑛 2 2𝑎 + 3𝑛 2 −𝑎= 𝑛 𝑎 𝑇 𝑎 + 𝑛 2 2𝑎 + 𝑛 2 −𝑎 =𝛩 𝑛 𝛩 1 +𝛩 𝑛 2 +𝛩 𝑛 =𝛩( 𝑛 2 ) ולכן 𝑻 𝒏 =𝜣( 𝒏 𝟐 )
תרגיל 4 מצאו שיטה איטרטיבית ושיטה רקורסיבית למציאת האיבר הn בסדרת פיבונצ'י f(n), ונתחו את זמני הריצה f(0)=0 f(1)=1 f(i)=f(i-1)+f(i-2), i>1 שיטה איטרטיבית: זמן ריצה: 𝜃(𝑛)
תרגיל 4 מצאו שיטה איטרטיבית ושיטה רקורסיבית למציאת האיבר הn בסדרת פיבונצ'י f(n), ונתחו את זמני הריצה f(0)=0 f(1)=1 f(i)=f(i-1)+f(i-2), i>1 שיטה רקורסיבית: זמן הריצה מוגדר ע"י הנוסחא הרקורסיבית T(n)=T(n-1)+T(n-2)+1
תרגיל 4 המשך: חסמו את הנוסחא הרקורסיבית הבאה מלמעלה ומלטה T(n)=T(n-1)+T(n-2)+1 כדי לחסום מלמעלה נשתמש באי-שיוויון T(n)=T(n-1)+T(n-2)+1 ≤ 2T(n-1)+1 כדי לחסום מלמטה נשתמש באי-שיוויון T(n)=T(n-1)+T(n-2)+1 ≥ 2T(n-2)+1
תרגיל 4 המשך: T(n) ≤ 2T(n-1) +1 ≤ 2(2T(n-2) +1) +1 ≤2(2(2T(n-3) +1) +1) +1 ≤ …≤ ≤ 2kT(n-k)+ 𝑖=1 𝑘 2 𝑖 נציב k=n-1 ונקבל 𝑇 𝑛 =𝑂( 2 𝑛−1 + 2 𝑛−1 )=𝑂( 2 𝑛 )
תרגיל 4 המשך: באופן דומה T(n) ≥ 2T(n-2) +1 ≥ 2(2T(n-4) +1) +1 ≥ 2(2(2T(n-6) +1) +1) +1 ≥ … ≥ ≥ 2kT(n-2k)+ 𝑖=1 𝑘 2 𝑖 נציב 𝑘= 𝑛−1 2 ונקבל 𝑇 𝑛 =Ω( 2 𝑛−1 2 + 2 𝑛−1 2 )=Ω( 2 𝑛 2 )
תרגיל 5 מצאו את זמן הריצה של הנוסחא הרקורסיבית הבאה: T(n) = 9T(n/3) + 𝑛2log(𝑛) Answer: Master Theorem a = 9, b = 3, 𝑓(𝑛) = 𝑛2log(𝑛) 𝑛 log 𝑏 𝑎 = 𝑛 2 𝑛 2 log 𝑛 =𝜃 𝑛 log 𝑏 𝑎 log 𝑛 𝑇(𝑛)=𝜃( 𝑛 2 log 2 𝑛 )
תרגיל 6 הציאו שיטה רקורסיבית לפתרון בעיית מגדלי הנוי ומצאו את זמן הריצה שלה
תרגיל 6 מצאו שיטה רקורסיבית לפתרון בעיית מגדלי הנוי ומצאו את זמן הריצה שלה פתרון: זמן הריצה מתואר ע"י הנוסחא הרקורסיבית T(n)=2T(n-1)+1
תרגיל 6 T(n) = 2T(n-1) +1 = 2(2T(n-2) +1) +1 מצאו שיטה רקורסיבית לפתרון בעיית מגדלי הנוי ומצאו את זמן הריצה שלה פתרון, המשך: T(n)=2T(n-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 𝑘 2 𝑖 נציב k=n-1 ונקבל 𝑇 𝑛 = 2 𝑛−1 𝑇 1 + 2 𝑛−1 −1=𝜃 2 𝑛 האם אפשר לפתור גם בשיטת ההצבה?