חזור לתיקייה: תרגול

2 - פונקציות רקורסיביות

חיפוש בתיקיה
Ctrl K
לחץ כאן או הקש Ctrl K כדי לחפש בכל התיקיה
  • כללי
  • שיטות לפתרון רקורסיות
  • השיטה האינדוקטיבית
  • שיטת האיטרציות
  • עצי רקורסיות - דרך אחרת להסתכל על שיטת האיטרציות
  • שיטת המאסטר
  • החלפת משתנים

2 - פונקציות רקורסיביות

02340218

מבני נתונים 1

רשימות תרגול לקריאה בשבת

פונקציות רקורסיביות

הופק מתוך תקיית התואר של שקד

uni-folder.vercel.app

הגדרה 1 (רקורסיה)

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

דוגמה (אלגוריתם ה-Merge  SortMerge\;SortMergeSort)

T(n)={Θ(1)n=12  T ⁣ ⁣   ⁣(n2)+Θ(n)n>1T(n)=\begin{cases} \Theta (1) & n=1 \\ 2\;T\!\!\;\!\left( \frac{n}{2} \right)+\Theta(n) & n>1 \end{cases}T(n)={Θ(1)2T(2n​)+Θ(n)​n=1n>1​

שיטות לפתרון רקורסיות

השיטה האינדוקטיבית

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

דוגמה

נגדיר:

T(n)={1n=12T(⌊n2⌋)+nn>1T(n)=\begin{cases} 1 & n=1 \\ 2T\left( \left\lfloor \frac{n}{2} \right\rfloor \right)+n & n>1 \end{cases}T(n)={12T(⌊2n​⌋)+n​n=1n>1​

ונוכיח T(n)=O(nlog⁡n)T(n)=O(n\log n)T(n)=O(nlogn).
הוכחה:
בסיס:

  • עבור n=2n=2n=2 ו-c≥2c\geq 2c≥2 מתקיים: 4=T(2)≤2clog⁡224=T(2)\leq 2c\log_{2} 24=T(2)≤2clog2​2
  • עבור n=3n=3n=3 ו-c≥2c\geq 2c≥2 מתקיים: 5=T(3)≥3clog⁡235=T(3)\geq_{3}c\log{2}35=T(3)≥3​clog23.

צעד: נפעיל את הנחת האינדוקציה על ההגדרה הרקורסיבית:

T(n)=2T(⌊n2⌋)+n≤2(c⌊n2⌋log⁡2⌊n2⌋)+n≤2(cn2log⁡2n2)+n=cn(log⁡2n−1)+nT(n)=2T\left( \left\lfloor \frac{n}{2} \right\rfloor \right)+n\leq 2\left( c\left\lfloor \frac{n}{2} \right\rfloor \log_{2}\left\lfloor \frac{n}{2} \right\rfloor \right)+n\leq2\left( c \frac{n}{2}\log_{2} \frac{n}{2} \right)+n=cn(\log_{2}n-1)+nT(n)=2T(⌊2n​⌋)+n≤2(c⌊2n​⌋log2​⌊2n​⌋)+n≤2(c2n​log2​2n​)+n=cn(log2​n−1)+n =cnlog⁡2n−cn+n≤cnlog⁡2n=cn\log_{2}n-cn+n\leq cn\log_{2}n=cnlog2​n−cn+n≤cnlog2​n

אי השוויון האחרון נכון כאשר c≥1c\geq 1c≥1.
∎

הערה (מדוע הצעד ⌊n2⌋  ⟹  n\left\lfloor \frac{n}{2} \right\rfloor\implies n⌊2n​⌋⟹n מספיק?)

זה לא נכון נראה לי
​מבני תרגול של החברה 2.png
זה הנימוק מהמצגת, לא אוהב אותו.

שיטת האיטרציות

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

דוגמה

T(n)=n+3T(⌊n4⌋)T(n)=n+3T\left( \left\lfloor \frac{n}{4} \right\rfloor \right)T(n)=n+3T(⌊4n​⌋)

הוכחה:

T(n)=n+3T(⌊n4⌋)=n+3(⌊n4⌋+3T(⌊n16⌋))=n+3⌊n4⌋+9⌊n16⌋+27T(⌊n64⌋)T(n)=n+3T\left( \left\lfloor \frac{n}{4} \right\rfloor \right)=n+3\left( \left\lfloor \frac{n}{4} \right\rfloor +3T\left( \left\lfloor \frac{n}{16} \right\rfloor \right) \right)=n+3\left\lfloor \frac{n}{4} \right\rfloor +9\left\lfloor \frac{n}{16} \right\rfloor +27T\left( \left\lfloor \frac{n}{64} \right\rfloor \right)T(n)=n+3T(⌊4n​⌋)=n+3(⌊4n​⌋+3T(⌊16n​⌋))=n+3⌊4n​⌋+9⌊16n​⌋+27T(⌊64n​⌋)
הערה

מספר האיטרציות שנצטרך לבצע עד שנגיע לתנאי התחלה הוא ⌊n4i⌋=1  ⟹  i=log⁡4n\left\lfloor \frac{n}{4^i} \right\rfloor=1\implies i=\log_{4}n⌊4in​⌋=1⟹i=log4​n.

T(n)≤n+34n+916n+⋯+3iT(⌊n4i⌋)≤n∑i=0∞(34)i+3log⁡4nΘ(1)T(n)\leq n+\frac{3}{4}n+\frac{9}{16}n+\dots+3^i T\left( \left\lfloor \frac{n}{4^i} \right\rfloor \right)\leq n\sum_{i=0}^\infty \left( \frac{3}{4} \right)^i +3^{\log_{4}n}\Theta(1)T(n)≤n+43​n+169​n+⋯+3iT(⌊4in​⌋)≤ni=0∑∞​(43​)i+3log4​nΘ(1)

נשים לב כי מתקיים:

I  ∑i=0∞(34)i=11−34=4II  3log⁡4n=3log⁡3nlog⁡34=(3log⁡3n)1log⁡34=n1log⁡44log⁡43=n11log⁡43=nlog⁡43\begin{align*} \mathrm{I}\; & \sum_{i=0}^\infty \left( \frac{3}{4} \right)^i=\frac{1}{1-\frac{3}{4}}=4 \\ \mathrm{II}\; & 3^{\log_{4}n}=3^{\frac{\log_{3}n}{\log_{3}4}}=(3^{\log_{3}n})^{\frac{1}{\log_{3}4}}=n^{\frac{1}{\frac{\log_{4}4}{\log_{4}3}}}=n^{\frac{1}{\frac{1}{\log_{4}3}}}=n^{\log_{4}3} \end{align*}III​i=0∑∞​(43​)i=1−43​1​=43log4​n=3log3​4log3​n​=(3log3​n)log3​41​=nlog4​3log4​4​1​=nlog4​31​1​=nlog4​3​

ולכן:

T(n)≤4n+nlog⁡43Θ(1)=O(n)T(n)\leq 4n+n^{\log_{4}3}\Theta(1)=O(n)T(n)≤4n+nlog4​3Θ(1)=O(n)

∎

עצי רקורסיות - דרך אחרת להסתכל על שיטת האיטרציות

דוגמה

עבור:

T(n)=2T(n2)+n2T(n)=2T\left( \frac{n}{2} \right)+n^2T(n)=2T(2n​)+n2

​מבני תרגול של החברה 3.png
סכום הצמתים של כל אחד מהעצים הנ"ל הוא T(n)T(n)T(n) ולכן:

T(n)≤n2+2(n2)2+4(n4)2+⋯=n2(1+12+14+⋯ )=2n2  ⟹  T(n)=O(n2)T(n)\leq n^2+2\left( \frac{n}{2} \right)^2+4\left( \frac{n}{4} \right)^2+\dots=n^2\left( 1+\frac{1}{2}+\frac{1}{4}+\cdots \right)=2n^2\implies T(n)=O(n^2)T(n)≤n2+2(2n​)2+4(4n​)2+⋯=n2(1+21​+41​+⋯)=2n2⟹T(n)=O(n2)
דוגמה

עבור:

T(n)=n+T(n3)+T(2n3)T(n)=n+T\left( \frac{n}{3} \right)+T\left( \frac{2n}{3} \right)T(n)=n+T(3n​)+T(32n​)

נשים לב כי מתקיים:
​מבני תרגול של החברה 4.png
ולכן:

nlog⁡3n≤T(n)≤nlog⁡32n  ⟹  T(n)=Θ(nlog⁡n)n\log_{3}n\leq T(n)\leq n\log_{\frac{3}{2}}n \implies T(n)=\Theta(n\log n)nlog3​n≤T(n)≤nlog23​​n⟹T(n)=Θ(nlogn)

שיטת המאסטר

משפט (המאסטר)

יהיו a≥1a\geq1a≥1 ו-b>1b>1b>1 קבוצים ותהי f(n)f(n)f(n) פונקציה.
נגדיר: T(n)=aT(nb)+f(n)T(n)=aT\left( \frac{n}{b} \right)+f(n)T(n)=aT(bn​)+f(n). אזי, ניתן לחסום את TTT אסימפטוטית באופן הבא:

  1. אם f(n)=O(nlog⁡ba−ε)f(n)=O(n^{\log_{b}a-\epsilon})f(n)=O(nlogb​a−ε) כאשר ε>0\epsilon>0ε>0 קבוע כלשהו אזי T(n)=Θ(nlog⁡ba)T(n)=\Theta(n^{\log_{b}a})T(n)=Θ(nlogb​a).
  2. אם f(n)=Θ(nlog⁡ba)f(n)=\Theta(n^{\log_{b}a})f(n)=Θ(nlogb​a) אז T(n)=Θ(nlog⁡ba⋅log⁡n)T(n)=\Theta(n^{\log_{b}a}\cdot \log n)T(n)=Θ(nlogb​a⋅logn)
  3. אם f(n)=Ω(nlog⁡ba+ε)f(n)=\Omega(n^{\log_{b}a+\epsilon})f(n)=Ω(nlogb​a+ε) כאשר ε>0\epsilon>0ε>0 קבוע כלשהו וגם af(nb)≤cf(n)af\left( \frac{n}{b} \right)\leq cf(n)af(bn​)≤cf(n) עבור קבוע c<1c<1c<1 והחל מ-nnn מספיק גדול אזי T(n)=Θ(f(n))T(n)=\Theta(f(n))T(n)=Θ(f(n)).
דוגמה

T(n)=aT(nb)+f(n)ablog⁡naf(n)ΘT(n)=9T(n3)+n932nn2T(n)=T(2n3)+113201log⁡nT(n)=3T(n4)+nlog⁡n34log⁡43nlog⁡nnlog⁡nT(n)=2T(n2)+nlog⁡n221nlog⁡nלא עומד בתנאי המשפט\begin{array}{|c|c|c|c|c|c|} \hline T(n)=aT\left( \frac{n}{b} \right)+f(n) & a & b & \log_{n}a & f(n) & \Theta \\ \hline T(n)=9T\left( \frac{n}{3} \right)+n & 9 & 3 & 2 & n & n^2 \\ \hline T(n)=T\left( \frac{2n}{3} \right)+1 & 1 & \frac{3}{2} & 0 & 1 & \log n \\ \hline T(n)=3T\left( \frac{n}{4} \right)+n\log n & 3 & 4 & \log_{4}3 & n\log n & n\log n \\ \hline T(n)=2T\left( \frac{n}{2} \right)+n\log n & 2 & 2 & 1 & n\log n & \R{\text{לא עומד בתנאי המשפט}} \\ \hline \end{array}T(n)=aT(bn​)+f(n)T(n)=9T(3n​)+nT(n)=T(32n​)+1T(n)=3T(4n​)+nlognT(n)=2T(2n​)+nlogn​a9132​b323​42​logn​a20log4​31​f(n)n1nlognnlogn​Θn2lognnlognלא עומד בתנאי המשפט​​

החלפת משתנים

תרגיל

מצאו חסם אסימפטוטי הדוק למשוואה הרקורסיבית הבאה:

T(n)={1n=12T(n)+log⁡n−1n>1T(n)=\begin{cases} 1 & n=1 \\ 2T(\sqrt{ n }) & +\log n-1 & n>1 \end{cases}T(n)={12T(n​)​n=1+logn−1​n>1​

תחילה נסמן m=log⁡2nm=\log_{2}nm=log2​n ואז:

T(2m)=2T(2m2)+m−1T(2^m)=2T\left( 2^{\frac{m}{2}} \right)+m-1T(2m)=2T(22m​)+m−1

נגדיר S(m)=T(2m)S(m)=T(2^m)S(m)=T(2m) ונשים לב כי תחת הגדרה זו S(m2)=T(2m2)S\left( \frac{m}{2} \right)=T\left( 2^{\frac{m}{2}} \right)S(2m​)=T(22m​) ולכן:

S(m)=2S(m2)+m−1S(m)=2S\left( \frac{m}{2} \right)+m-1S(m)=2S(2m​)+m−1

בתחילת התרגול ראינו כי S(m)=Θ(mlog⁡m)S(m)=\Theta(m\log m)S(m)=Θ(mlogm) ולכן:

T(n)=T(2m)=S(m)=Θ(mlog⁡m)=Θ(log⁡n⋅log⁡(log⁡n))T(n)=T(2^m)=S(m)=\Theta(m\log m)=\Theta(\log n\cdot \log(\log n))T(n)=T(2m)=S(m)=Θ(mlogm)=Θ(logn⋅log(logn))
תרגיל

מצאו חסם אסימפטוטי הדוק למשוואה הרקורסיבית הבאה:

T(n)={1n=12nT(n)+n(log⁡n−1)T(n)=\begin{cases} 1 & n=1 \\ 2\sqrt{ n }T(\sqrt{ n })+n(\log n-1) \end{cases}T(n)={12n​T(n​)+n(logn−1)​n=1

תחילה נחלק את המשוואה ב-nnn:

T(n)n=2T(n)n+log⁡n−1\frac{T(n)}{n}=2 \frac{T(\sqrt{ n })}{\sqrt{ n }}+\log n-1nT(n)​=2n​T(n​)​+logn−1

נציב U(n)=T(n)nU(n)=\frac{T(n)}{n}U(n)=nT(n)​ ונשים לב כי תחת הגדרה זו U(n)=T(n)nU(\sqrt{ n })=\frac{T(\sqrt{ n })}{\sqrt{ n }}U(n​)=n​T(n​)​.

U(n)=2U(n)+log⁡n−1U(n)=2U(\sqrt{ n })+\log n-1U(n)=2U(n​)+logn−1

נשים לב שזוהי המשוואה שהרגע ראינו ולכן:

T(n)=nU(n)=nΘ(log⁡n⋅log⁡(log⁡n))=Θ(nlog⁡n⋅log⁡log⁡n)T(n)=nU(n)=n\Theta(\log n\cdot \log(\log n))=\Theta(n\log n\cdot \log \log n)T(n)=nU(n)=nΘ(logn⋅log(logn))=Θ(nlogn⋅loglogn)