Transcript ppsx

‫תרגול ‪3‬‬
‫רקורסיות‬
‫תרגול ‪ - 3‬רקורסיות‬
‫• ‪ 3‬שיטות עיקריות לפתור נוסחאות זמן ריצה‬
‫רקורסיביות‪:‬‬
‫‪ .1‬הצבה‪ :‬מנחשים את הפתרון ואז מוכיחים אותו‬
‫באינדוקציה‬
‫‪ .2‬איטרציה‪ :‬מפתחים "עד הסוף" ומנסים לחשב נוסחה‬
‫סגורה לסכום שהתקבל‬
‫‪Master Theorem .3‬‬
‫ – שיטת ההצבה‬1 ‫תרגיל‬
• Given:
• T(1) = 1
• T(n) = T(n/2) + 𝑛
• Prove that T(n) = O( 𝑛)
• Guess: T(n) = O( 𝑛), meaning T(n) ≤ c 𝑛
• Induction base: n=1, c=4
• T(1) = 1 ≤ c 1
• Induction step:
• T(n) = T(n/2)+ 𝑛 ≤ c 𝑛/2 + 𝑛 = 𝑛(
≤c 𝑛
𝑐
2
+ 1)
‫תרגיל ‪ – 2‬שיטת האיטרציה‬
‫•‬
‫מצאו את זמן הריצה של הנוסחא הרקורסיביות הבאה‪:‬‬
‫•‬
‫פתרון‪ :‬נפתח בשיטת האיטרציה‬
‫)‪• 𝑇(𝑎) = 𝜃(1‬‬
‫‪• T(n)=T(n-a)+T(a)+n‬‬
‫𝑛‪𝑇 𝑛 =𝑇 𝑛−𝑎 +𝑇 𝑎 +‬‬
‫𝑛‪+𝑇 𝑎 +‬‬
‫𝑎 ‪= 𝑇 𝑛 − 2𝑎 + 𝑇 𝑎 + 𝑛 −‬‬
‫𝑎 ‪= 𝑇 𝑛 − 2𝑎 + 2𝑇 𝑎 + 2𝑛 −‬‬
‫𝑎 ‪+ 2𝑇 𝑎 + 2𝑛 −‬‬
‫𝑎‪= 𝑇 𝑛 − 3𝑎 + 𝑇 𝑎 + 𝑛 − 2‬‬
‫⋯ = 𝑎 ‪= 𝑇 𝑛 − 3𝑎 + 3𝑇 𝑎 + 3𝑛 − 2𝑎 −‬‬
‫‪𝑖−1‬‬
‫‪= 𝑇 𝑛 − 𝑖𝑎 + 𝑖 ∗ 𝑇 𝑎 + 𝑖 ∗ 𝑛 −‬‬
‫𝑎∗𝑘‬
‫‪𝑘=1‬‬
‫‪𝑖∗ 𝑖−1‬‬
‫‪2‬‬
‫∗𝑎‪=𝑇 𝑛−𝑖∗𝑎 +𝑖∗𝑇 𝑎 +𝑖∗𝑛−‬‬
‫תרגיל ‪ – 2‬שיטת האיטרציה‬
‫•‬
‫מצאו את זמן הריצה של הנוסחא הרקורסיביות הבאה‪:‬‬
‫)‪• 𝑇(𝑎) = 𝜃(1‬‬
‫‪• T(n)=T(n-a)+T(a)+n‬‬
‫• המשך‪ :‬לאחר ‪ i‬פיתוחים נקבל את הנוסחה הבאה‪:‬‬
‫‪𝑖∗ 𝑖−1‬‬
‫∗𝑎‪𝑇 𝑛 =𝑇 𝑛−𝑖∗𝑎 +𝑖∗𝑇 𝑎 +𝑖∗𝑛−‬‬
‫‪2‬‬
‫מה ה ‪ i‬שנציב בנוסחה?‬
‫𝑎 ≤ 𝑎 ⋅ 𝑖 ‪i ≈ 𝑛𝑎−1 ⇐ 𝑛 −‬‬
‫תרגיל ‪ – 2‬שיטת האיטרציה‬
‫•‬
‫מצאו את זמן הריצה של הנוסחא הרקורסיביות הבאה‪:‬‬
‫•‬
‫המשך‪ :‬נציב ‪ 𝑖 = 𝑛𝑎−1‬בנוסחה ונקבל‬
‫)‪𝑇(𝑎) = 𝜃(1‬‬
‫‪T(n)=T(n-a)+T(a)+n‬‬
‫𝑛‬
‫‪−2‬‬
‫𝑎‬
‫𝑛‬
‫𝑛‬
‫𝑛‬
‫𝑛 ‪1‬‬
‫‪−1 𝑎 +‬‬
‫‪−1 𝑇 𝑎 +‬‬
‫𝑎‪−1 𝑛−‬‬
‫‪−1‬‬
‫𝑎‬
‫𝑎‬
‫𝑎‬
‫𝑎 ‪2‬‬
‫‪𝑇 𝑛 =𝑇 𝑛−‬‬
‫𝑛‬
‫‪𝑛2‬‬
‫𝑎‬
‫𝑛‪𝑛2 3‬‬
‫‪=𝑇 𝑎 + 𝑇 𝑎 −𝑇 𝑎 + −𝑛− ∗ 2−‬‬
‫‪+2‬‬
‫𝑎‬
‫𝑎‬
‫‪2‬‬
‫𝑎‬
‫𝑎‬
‫𝑛‬
‫‪𝑛2‬‬
‫𝑛‪𝑛2 3‬‬
‫𝑛‬
‫𝑛 ‪𝑛2‬‬
‫‪= 𝑇 𝑎 + −𝑛−‬‬
‫‪+‬‬
‫‪−𝑎 = 𝑇 𝑎 +‬‬
‫𝑎‪+ −‬‬
‫𝑎‬
‫𝑎‬
‫𝑎‪2‬‬
‫‪2‬‬
‫𝑎‬
‫‪2𝑎 2‬‬
‫) ‪= 𝛩 𝑛 𝛩 1 + 𝛩 𝑛2 + 𝛩 𝑛 = 𝛩(𝑛2‬‬
‫•‬
‫ולכן ) 𝟐𝒏(𝜣 = 𝒏 𝑻‬
‫•‬
‫•‬
‫‪Master Theorem‬‬
‫• נתון‪𝑇(𝑛) = 𝑎𝑇( ) + 𝑓(𝑛) :‬‬
‫• רעיון (לא פורמלי ולא מדוייק)‪:‬‬
‫𝑛‬
‫𝑏‬
‫– נשווה את )‪ f(n‬עם 𝑎 𝑏‪ 𝑛log‬ונראה "מי יותר דומיננטי"‬
‫• כללים‪:‬‬
‫‪ .1‬אם ) 𝜖‪ 𝑓 𝑛 = 𝑂(𝑛log𝑏 𝑎−‬אז 𝑎 𝑏‪𝑇 𝑛 = 𝜃 𝑛log‬‬
‫‪ .2‬אם ) 𝑎 𝑏‪ 𝑓 𝑛 = 𝜃(𝑛log‬אז 𝑛 ‪𝑇 𝑛 = 𝜃 𝑛log𝑏 𝑎 ⋅ log‬‬
‫‪ .3‬אם ) 𝜖‪ 𝑓 𝑛 = Ω(𝑛log𝑏 𝑎+‬וגם קיים ‪ 𝑐 ≤ 1‬כך ש‬
‫𝑛 𝑓 ⋅ 𝑐 ≤ 𝑏𝑛 𝑓𝑎 לכל ‪ n‬מספיק גדול אז ) 𝑛 𝑓(𝜃 = 𝑛 𝑇‬
‫• הערה‪ :‬מקרה ‪ 2‬המוכלל ‪ -‬אם )𝑛 𝑘 ‪𝑓 𝑛 = 𝜃(𝑛log𝑏 𝑎 log‬‬
‫אז 𝑛 ‪𝑇 𝑛 = 𝜃 𝑛log𝑏 𝑎 ⋅ log k+1‬‬
‫תרגיל ‪3‬‬
‫• מצאו את זמני הריצה של הנוסחאות הרקורסיביות‬
‫הבאות‪:‬‬
‫‪1. T(n) = 7T(n/2) + n2‬‬
‫‪2. T(n) = 4T(n/2) + n2‬‬
‫‪3. T(n) = 2T(n/3) + n3‬‬
‫תרגיל ‪3‬‬
‫• מצאו את זמני הריצה של הנוסחאות הרקורסיביות‬
‫הבאות‪:‬‬
‫‪1. T(n) = 7T(n/2) + n2‬‬
‫‪Answer:‬‬
‫‪• a = 7, b = 2, f(n) = n2‬‬
‫…‪• 𝑛log𝑏 𝑎 = 𝑛2.803‬‬
‫𝜖‪• 𝑛2 = 𝑂 𝑛2.8 = 𝑂 𝑛log𝑏 𝑎−‬‬
‫) ‪• 𝑇(𝑛) = 𝜃(𝑛log2 7‬‬
‫תרגיל ‪3‬‬
‫• מצאו את זמני הריצה של הנוסחאות הרקורסיביות‬
‫הבאות‪:‬‬
‫‪2. T(n) = 4T(n/2) + n2‬‬
‫‪Answer:‬‬
‫‪• a = 4, b = 2, f(n) = n2‬‬
‫‪• 𝑛log𝑏 𝑎 = 𝑛2‬‬
‫𝑎 𝑏‪• 𝑛2 = 𝜃 𝑛log‬‬
‫)𝑛 ‪• 𝑇(𝑛) = 𝜃(𝑛2 log‬‬
‫תרגיל ‪3‬‬
‫• מצאו את זמני הריצה של הנוסחאות הרקורסיביות הבאות‪:‬‬
‫‪3. T(n) = 2T(n/3) + n3‬‬
‫‪Answer:‬‬
‫‪• a = 2, b = 3, f(n) = n3‬‬
‫…‪• 𝑛log𝑏 𝑎 = 𝑛0.63‬‬
‫𝜖‪• 𝑛3 = Ω 𝑛0.7 = Ω 𝑛log𝑏 𝑎+‬‬
‫‪≤𝑐≤1‬‬
‫‪2‬‬
‫‪27‬‬
‫⇔ ‪≤ 𝑐𝑛3‬‬
‫‪2𝑛3‬‬
‫‪33‬‬
‫=‬
‫𝑛‬
‫‪3‬‬
‫𝑓 ⋅ ‪• 𝑐 ≤ 1 𝑎𝑛𝑑 2‬‬
‫‪– Take c=0.5‬‬
‫) ‪• 𝑇(𝑛) = 𝜃(𝑛3‬‬
‫תרגיל ‪4‬‬
‫• מצאו שיטה איטרטיבית ושיטה רקורסיבית למציאת האיבר‬
‫ה‪ n‬בסדרת פיבונצ'י )‪ ,f(n‬ונתחו את זמני הריצה‬
‫‪• f(0)=0‬‬
‫‪• f(1)=1‬‬
‫‪• f(i)=f(i-1)+f(i-2), i>1‬‬
‫שיטה רקורסיבית‪:‬‬
‫{ )‪recFib(n‬‬
‫זמן הריצה מוגדר ע"י‬
‫)‪if (n ≤ 1‬‬
‫‪return n‬‬
‫הנוסחא הרקורסיבית‬
‫‪else‬‬
‫)‪return recFib(n-1) + recFib(n-2‬‬
‫‪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‬‬
‫𝑖 ‪𝑘−1‬‬
‫‪𝑖=0 2‬‬
‫‪≤ 2kT(n-k)+‬‬
‫נציב ‪ 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‬‬
‫𝑖 ‪𝑘−1‬‬
‫‪𝑖=0 2‬‬
‫‪ 𝑘 = 𝑛−1‬ונקבל‬
‫נציב‬
‫‪2‬‬
‫𝑛‬
‫) ‪Ω(22‬‬
‫=‬
‫‪𝑛−1‬‬
‫) ‪2 2‬‬
‫‪+‬‬
‫‪𝑛−1‬‬
‫‪Ω(2 2‬‬
‫‪≥ 2kT(n-2k)+‬‬
‫= 𝑛 𝑇‬
‫תרגיל ‪4‬‬
‫• מצאו שיטה איטרטיבית ושיטה רקורסיבית למציאת האיבר‬
‫ה‪ n‬בסדרת פיבונצ'י )‪ ,f(n‬ונתחו את זמני הריצה‬
‫‪• f(0)=0‬‬
‫‪• f(1)=1‬‬
‫‪• f(i)=f(i-1)+f(i-2), i>1‬‬
‫שיטה איטרטיבית‪:‬‬
‫זמן ריצה‪𝜃(𝑛) :‬‬
‫{ )‪IterFib (n‬‬
‫;‪f[0] = 0‬‬
‫;‪f[1] = 1‬‬
‫)‪for ( i=2 ; i ≤ n ; i++‬‬
‫;]‪f[i] = f[i-1] + f[i-2‬‬
‫}‬
‫תרגיל ‪5‬‬
‫מצאו שיטה רקורסיבית לפתרון בעיית מגדלי הנוי ומצאו את‬
‫זמן הריצה שלה‬
‫תרגיל ‪5‬‬
‫מצאו שיטה רקורסיבית לפתרון בעיית מגדלי הנוי ומצאו את‬
‫זמן הריצה שלה‬
‫פתרון‪:‬‬
‫זמן הריצה מתואר ע"י הנוסחה הרקורסיבית‬
‫‪T(n)=2T(n-1)+1‬‬
‫תרגיל ‪5‬‬
‫• מצאו שיטה רקורסיבית לפתרון בעיית מגדלי הנוי ומצאו את זמן‬
‫הריצה שלה‬
‫פתרון‪ ,‬המשך‪:‬‬
‫‪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‬‬
‫‪𝑖=0‬‬
‫נציב ‪ k=n-1‬ונקבל‬
‫𝑛‪𝑇 𝑛 = 2𝑛−1 𝑇 1 + 2𝑛−1 − 1 = 𝜃 2‬‬
‫האם אפשר לפתור גם בשיטת ההצבה?‬
•
•
•
•
6 ‫תרגיל‬
T(1) = 1
T(n) = T(n-1) + 1/n
Find T(n)=𝜃(?)
Answer: use integrals
1
1
1
1
𝑛
𝑛
𝑇 𝑛 = +
+ ⋯ + 1 = Σ𝑖=1
= 1 + Σ𝑖=2
𝑛 𝑛−1
𝑖
𝑖
𝑛
1
𝑛
≤1+
𝑑𝑥 = 1 + ln 𝑥 | = 1 + ln 𝑛
1
𝑥
1
1
1
1
𝑛
𝑇 𝑛 = +
+ ⋯ + 1 = Σ𝑖=1
𝑛 𝑛−1
𝑖
𝑛
1
𝑛
≥
𝑑𝑥 = ln 𝑥 | = ln 𝑛
1
𝑥
1
7 ‫תרגיל‬
‫• מצאו את זמן הריצה של הנוסחא הרקורסיבית‬
:‫הבאה‬
T(n) = 3T(n/2) + 𝑛log(𝑛)
Answer: Master Theorem
• a = 3, b = 2, 𝑓(𝑛) = 𝑛log(𝑛)
• 𝑛log𝑏 𝑎 = 𝑛log 3 = 𝑛1.585
• 𝑛 log 𝑛 ≤ 𝑐𝑛log 3−𝜀
• log 𝑛 ≤ 𝑐𝑛log 3−𝜀−1
7 ‫תרגיל‬
•
•
•
•
•
•
•
log 𝑛 ≤ 𝑐𝑛log 3−𝜀−1
We may operate log on both sides
log log 𝑛 ≤ 𝑙𝑜𝑔3 − 𝜀 − 1 log 𝑛 + log 𝑐
log log 𝑛 ≤ 0.585 − 𝜀 log 𝑛 + log 𝑐
c=1, ɛ=0.085
log log 𝑛 ≤ 0.5 log 𝑛
True for log 𝑛 ≥4 => n0=16
‫תרגיל ‪8‬‬
‫• נתונים שני מספרים בינריים ‪ x,y‬ונדרש לחשב‬
‫באופן יעיל את המכפלה שלהם ‪z=xy‬‬
‫• שיטה ‪ :1‬כפל ארוך‪ ,‬כמו בבית הספר‪...‬‬
8 ‫תרגיל‬
10110110
x 10011101
------------10110110
00000000
10110110
10110110
10110110
00000000
00000000
10110110
------------------------110111110011110
18210
x 15710
T(n) = O(n2)+O(n2) = O(n2)
2857410
8 ‫תרגיל‬
Method 2, like anything in computer science…
Divide by 2:
Split x,y into their left and right halves, n/2 long
Example:
x = 10110110 then xL = 1011, xR = 0110
x = 1011 × 24 + 0110
8 ‫תרגיל‬
• xy = (2n/2xL+xR)(2n/2yL+yR) =
• = 2nxLyL + 2n/2(xLyR+xRyL) + xRyR
•
•
•
•
•
We will solve it recursively. run time:
T(n) = 4T(n/2)+O(n)
Using Master Theorem:
𝑻 𝒏 = 𝜽 𝒏 𝒍𝒐𝒈𝟐 𝟒 = 𝜽(𝒏𝟐 )
no improvement
8 ‫תרגיל‬
Lets look at another problem first:
The mathematician Carl Friedrich Gauss (1777–
1855) once noticed that although the product of
two complex numbers:
(a + bi)(c + di) = ac − bd + (bc + ad)i
seems to involve four multiplications, it can in
be done with just three
Because:
bc + ad = (a + b)(c + d) − ac − bd
‫תרגיל ‪8‬‬
‫‪(a + bi)(c + di) = ac − bd + (bc + ad)i‬‬
‫‪bc + ad = (a + b)(c + d) − ac − bd‬‬
‫‪ 3‬מכפלות במקום ‪ ,4‬נראה שלא שיפרנו בהרבה‪...‬‬
‫אך כאשר נפעיל את זה ברקורסיה‪ ,‬השינוי יהיה‬
‫משמעותי‬
8 ‫תרגיל‬
• Back to our problem:
• xy = 2nxLyL + 2n/2(xLyR+xRyL) + xRyR
xLyR+xRyL = (xL+xR)(yL+yR)−xLyL−xRyR
• Run time: T(n) = 3T(n/2) + O(n)
• Master theorem:
– 𝑻 𝒏 = 𝜽 𝒏𝒍𝒐𝒈𝟐 𝟑 ≈ 𝜽(𝒏𝟏.𝟔 )
• More complicated divide and conquer
algorithm – “fast fourier transform”-O(nlogn)