<算法导论>练习4.3
4.3-1
用數學歸納法證明即可,思路是假設n<=kn<=kn<=k時存在c使得T(k)<=cn2T(k)<=cn^2T(k)<=cn2成立,只要證明出n=k+1n=k+1n=k+1時,存在c使得T(k+1)<=c(k+1)2T(k+1)<=c(k+1)^2T(k+1)<=c(k+1)2。那么把T(k)和T(k?1)T(k)和T(k-1)T(k)和T(k?1)代入遞歸式得到:
T(k)=T(k?1)+k<=c?(k?1)2+k=c(k2?2k+1)+k\begin{aligned} T(k)&=T(k-1)+k\\ &<=c*(k-1)^2+k\\ &=c(k^2-2k+1)+k \end{aligned} T(k)?=T(k?1)+k<=c?(k?1)2+k=c(k2?2k+1)+k?
把T(k)的方程代入T(k+1)的方程可以得到:
T(k+1)=T(k)+k+1<=c(k2?2k+1)+k+k+1=c(k2?2k+1+2k+1c)\begin{aligned} T(k+1)&=T(k)+k+1\\ &<=c(k^2-2k+1)+k+k+1\\ &=c(k^2-2k+1+\frac{2k+1}{c}) \end{aligned} T(k+1)?=T(k)+k+1<=c(k2?2k+1)+k+k+1=c(k2?2k+1+c2k+1?)?
當c=12+14kc=\frac12+\frac1{4k}c=21?+4k1?時,k無窮大時c=12c=\frac12c=21?,即c>12c>\frac12c>21?.代入上式可得:
T(k+1)<=c(k+1)2,c>12T(k+1)<=c(k+1)^2,c>\frac12 T(k+1)<=c(k+1)2,c>21?
證明完畢。
4.3-2
用書中所介紹的代入法計算可能會更簡單一些:假設對于m(m<n)(m<n)(m<n)成立。令:
m=?n2?m=\left \lceil \frac{n}{2} \right \rceil m=?2n??
即對于m,滿足方程的解為O(lgn),即T(m)<=c?lgmO(lgn),即T(m)<=c*lgmO(lgn),即T(m)<=c?lgm,將其代入n的遞歸式中,解出使方程成立的c的解即可。
T(n)<=c?lg??n2?+1<=c?lg?(n2+1)+1<=c?lg?(n+2)?c?lg?(2)+1\begin{aligned} T(n)&<=c*\lg{\left \lceil \frac{n}{2} \right \rceil }+1\\ &<=c*\lg(\frac{n}2+1)+1\\ &<=c*\lg(n+2)-c*\lg(2)+1 \end{aligned} T(n)?<=c?lg?2n??+1<=c?lg(2n?+1)+1<=c?lg(n+2)?c?lg(2)+1?
顯然不成立,因為lg(n+2)>lg(n),按照書中的方法,令n減去d重新計算,猜測:T(n)<=c?lg(n?2)T(n)<=c*lg(n-2)T(n)<=c?lg(n?2),證明方法和上文中的一樣
T(n)<=c?lg?(?n2??2)+1<=c?lg?(n2+1?2)+1=c?lg?((n?2)/2)+1=c?lg?(n?2)?c+1\begin{aligned} T(n)&<=c*\lg(\left \lceil \frac{n}{2} \right \rceil-2)+1\\ &<=c*\lg(\frac{n}2+1-2)+1\\ &=c*\lg((n-2)/2)+1\\ &=c*\lg(n-2)-c+1 \end{aligned} T(n)?<=c?lg(?2n???2)+1<=c?lg(2n?+1?2)+1=c?lg((n?2)/2)+1=c?lg(n?2)?c+1?
在c大于1時,上式成立,且lg(n-2)<lgn。對于漸進上界O(lgn)來說,原式成立。
4.3-3
根據題意,只需證明T(n)>=c?nlg?(n)T(n)>=c*n\lg(n)T(n)>=c?nlg(n),和上一題類似依舊用代入法證明,假設在m<n時T(m)T(m)T(m)成立,只需證明在n處,有T(n)>=cnlg(n)T(n)>=cnlg(n)T(n)>=cnlg(n)即可。先將
m=?n2?m=\left \lfloor \frac{n}{2} \right \rfloor m=?2n??
代入原式中,得:
T(n)>=2c?n2?lg??n2?+n>=2c(n2?1)lg?(n2?1)+n=c(n?2)(lg?(n?2)?1)+n\begin{aligned} T(n)&>=2c\left \lfloor \frac{n}{2} \right \rfloor \lg{\left \lfloor \frac{n}{2} \right \rfloor }+n\\ &>=2c(\frac{n}{2}-1)\lg(\frac{n}{2}-1)+n\\ &=c(n-2)(\lg(n-2)-1)+n \end{aligned} T(n)?>=2c?2n??lg?2n??+n>=2c(2n??1)lg(2n??1)+n=c(n?2)(lg(n?2)?1)+n?
很顯然沒有得到我們想要的結果,由于是在證明T(n)>=cnlg(n)時,選擇在后面加上一個常數項。
即假設T(n)>=c(n+2)lg(n+2)T(n)>=c(n+2)lg(n+2)T(n)>=c(n+2)lg(n+2),證明如下:
T(n)>=2c(?n2?+2)(lg?(?n2?+2)+n>=c(n+2)lg?(n+22)+n=c(n+2)lg?(n+2)+(1?c)n?2c>=c(n+2)lg?(n+2)\begin{aligned} T(n)&>=2c(\left \lfloor \frac{n}{2} \right \rfloor+2)(\lg(\left \lfloor \frac{n}{2} \right \rfloor+2)+n\\ &>=c(n+2)\lg(\frac{n+2}{2})+n\\ &=c(n+2)\lg(n+2)+(1-c)n-2c\\ &>=c(n+2)\lg(n+2) \end{aligned} T(n)?>=2c(?2n??+2)(lg(?2n??+2)+n>=c(n+2)lg(2n+2?)+n=c(n+2)lg(n+2)+(1?c)n?2c>=c(n+2)lg(n+2)?
在0<=c<1且n>=2c1?c0<=c<1且n>=\frac{2c}{1-c}0<=c<1且n>=1?c2c?的時候上式最后一步成立,且(n+2)lg(n+2)>nlgn(n+2)lg(n+2)>nlgn(n+2)lg(n+2)>nlgn,所以證明完畢。
4.3-4
要想不調整歸納證明中的邊界條件,只能放大漸進上界,比如求其解為T(n)=O(nlgn+n)T(n)=O(nlgn+n)T(n)=O(nlgn+n)
歸納證明的方法和前面的類似,此時把邊界條件n=1n=1n=1代入,T(1)=1lg1+1=1T(1)=1lg1+1=1T(1)=1lg1+1=1,所以不需要調整遞歸邊界條件。
4.3-5
4.3-6
這個和前面類似,直接證也是證明不出來的,需要減去一個常數項,即證明:
T(n)<=c(n?36)lg?(n?36)T(n)<=c(n-36)\lg(n-36) T(n)<=c(n?36)lg(n?36)
證明方式和前面一模一樣。
4.3-7
總結
以上是生活随笔為你收集整理的<算法导论>练习4.3的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ZigBee协议栈点播
- 下一篇: 小学生python趣味编程-小学生C++