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)