算法导论(第三版)参考答案:练习4.4-1,练习4.4-2,练习4.4-3,练习4.4-4,练习4.4-5,练习4.4-6,练习4.4-7,练习4.4-8,练习4.4-9
Use a reccursion tree to determine a good asymptotic upper bound on the recurrence T(n)=3T(⌊n/2⌋)+n . Use the substitution method to verify your answer.
假设 n 是2的幂(忍受不精确),则递归树为
注:请看更正版,一个更好的渐进紧确界。
树高 lgn,叶节点数量为 3lgn=nlg3 ,整棵树的代价:
T(n)=n+(32)n+(32)2n+⋯+(32)lgn−1n+Θ(nlg3)=∑i=0lgn−1(32)in+Θ(nlg3)=n(3/2)lgn−1(3/2)−1+Θ(nlg3)<n(3/2+1/2)lgn−1(3/2)−1+Θ(nlg3)<nn−1(3/2)−1+Θ(nlg3)=O(n2) 代入法证明 T(n)≤cn2+2n : T(n)≤3c(n/2)2+2⋅n/2+n=34cn2+2n≤cn2+2n O(n2) 为 T(n) 的一个渐进上界。更正:
T(n)=n+(32)n+(32)2n+⋯+(32)lgn−1n+Θ(nlg3)=∑i=0lgn−1(32)in+Θ(nlg3)=n(3/2)lgn−1(3/2)−1+Θ(nlg3)=2n(3lgnn−1)+Θ(nlg3)=2⋅3lgn−2n+Θ(nlg3)=O(nlg(3)) 代入法证明 T(n)≤cnlg3+2n : T(n)≤3c(n/2)lg3+2⋅n/2+n=cnlg3+2n=O(nlg3) O(nlg3) 为 T(n) 的一个渐进上界。Use a reccursion tree to determine a good asymptotic upper bound on the recurrence T(n)=T(n/2)+n2 . Use the substitution method to verify your answer.
树高 lgn ,叶节点数量为 1 ,整棵树的代价: T(n)=n2 14n2 (14)2n2 ⋯ (14)lgn−1n2 T(1)=∑i=0lgn−1(14)in2 T(1)<n2∑i=0∞(14)i T(1)=n211−1/4 T(1)=O(n2) 证明 T(n)≤cn2
T(n)≤c(n/2)2+n2≤cn2/4+n2≤(c/4+1)n2(c>4/3)≤cn2 得证。Use a reccursion tree to determine a good asymptotic upper bound on the recurrence T(n)=4T(n/2+2)+n . Use the substitution method to verify your answer.
树高 lgn ,叶节点数量为 4lgn=n2 ,整棵树的代价:
注:以下递归树求解有误,请略过。看更正版(上图递归树形状不变,其中常数项代价需更改)
T(n)=n+((4⋅12)n+4⋅2)+((42⋅(12)2)n+42⋅2)+⋯+((4lgn−1⋅(12)lgn−1)n+4lgn−1⋅2)+Θ(n2)=∑i=0lgn−1(2in+22i+1)+Θ(n2)=∑i=0lgn−12in+2∑i=0lgn−14i+Θ(n2)=n2lgn−12−1+24lgn−14−1+Θ(n2)=n2−n+2n2−13+Θ(n2)=Θ(n2)更正:
T(n)=n+((4⋅12)n+4⋅(2))+((42⋅(12)2)n+42⋅(1+2))+((43⋅(12)3)n+43⋅(12+1+2))+⋯+((4lgn−1⋅(12)lgn−1)n+4lgn−1⋅(12lgn−3+⋯+2))+Θ(n2)=∑i=0lgn−1(2in)+∑i=1lgn−1(4i+1−2i+2)+Θ(n2)=∑i=0lgn−1(2in)+∑i=2lgn4i−4∑i=1lgn−12i+Θ(n2)=n2lgn−12−1+8−4lgn+11−4+42−2lgn1−2+Θ(n2)=n2−n+13(4n2−8)+4n−8+Θ(n2)=Θ(n2) 证明 T(n)≤cn2+2n T(n)≤4c(n/2)2+2⋅n/2+n≤cn2+2n得证 T(n)=O(n2) 。
Use a reccursion tree to determine a good asymptotic upper bound on the recurrence T(n)=2T(n−1)+1 . Use the substitution method to verify your answer.
树高 n−1 ,叶节点数量为 2n−1 ,整棵树的代价:
T(n)=1+2+4+⋯+2n−2+Θ(2n−1)=2n−1−1+Θ(2n−1)=Θ(2n) 证明 T(n)<c2n+n T(n)≤2c2n−1+(n−1)+1≤c2n+n 得证 T(n)=O(2n) 。Use a reccursion tree to determine a good asymptotic upper bound on the recurrence T(n)=T(n−1)+T(n/2)+n . Use the substitution method to verify your answer.
画图可知递归树不是完全二叉树,从 lgn 到 n−1 层为非完全的。求整棵树代价中,可以推测 T(n)=O(2n)
证明 T(n)≤c2n−4n
T(n)≤c2n−1−4(n−1)+c2n/2−4n/2+n≤c(2n−1+2n/2)−5n+1≤c(2n−1+2n/2)−4n≤c(2n−1+2n−1)−4n≤c2n−4n(n>1/4)(n>2) 得证 T(n)=O(2n)Argue that the solution to the recurrence T(n)=T(n/3)+T(2n/3)+cn , where c is a constant, is Ω(nlgn) by appealing to the recurrsion tree.
递归树直到 log3n 后才开始变得不完全,加上每层代价都为 cn ,所以 T(n)≥Ω(nlog3n)=Ω(nlgn) 。
Draw the recursion tree for T(n)=4T(⌊n/2⌋)+cn , where c is a constant, and provide a tight asymptotic bound on its solution. Verify your answer with the substitution method.
树高 lgn,叶节点数量为 4lgn=n2 ,整棵树的代价:
T(n)=cn+2cn+4cn+⋯+4lgn−1cn2lgn−1+Θ(n2)=∑i=0lgn−12icn+Θ(n2)=cn2lgn−12−1+Θ(n2)=Θ(n2) 证明 T(n)≤cn2+2cn T(n)≤4c(n/2)2+2cn/2+cn=cn2+2cn 证明 T(n)≥cn2+2cn T(n)≥4c(n/2)2+2cn/2+cn=cn2+2cn 得证 T(n)=Θ(n2) 。Use a recursion tree to give an asymptotically tight solution to the recurrence T(n)=T(n−a)+T(a)+cn , where a≥1 and c>0 are constants.
树高 n/a (假设 n 能被 a 整除),叶节点数量为 2 ,整棵树的代价: T(n)=cn cn c(n−a) c(n−2a) ⋯ c(n−(na−1)a a) Θ(1)=cn2/a c(na−1)a−∑1n−1a−1c⋅i⋅a Θ(1)=Θ(n2) Θ(n)−Θ(n) Θ(1)=Θ(n2) 尝试用代入法,证明 T(n)≤cn2
T(n)≤c(n−a)2+ca+cn=cn2−2acn+ca2+ca+cn=cn2−cn(2a−1)+ca2+ca≤cn2=O(n2)(a≥1>1/2, n>a2+a2a−1) 证明 T(n)≥c(n+1)2 (这部分有trick) T(n)≥c(n−a)2+ca+cn=cn2−2acn+ca2+ca+cn=cn2−c(2an−a−n)≥cn2+cn≥cn2=Θ(n2)(a<1/2,n>2a) 决策树给出了精确值,可是代入法证明失败了。Use a recursion tree to give an asymptotically tight solution to the recurrence T(n)=T(αn)+T((1−α)n)+cn , where α is a constant in the range 0<α<1 , and c>0 is also a constant.
类似练习4.4-6。假设 α 更大,则树高 lg1αn。整棵树在 lg11−αn 以上,每一层次代价都为 cn ,所以
T(N)≤cn⋅lg11−αn≤cn⋅lgn((1−α)≤12) 即 T(n)=Ω(nlgn)代入法证明 T(n)≤dnlgn
T(n)≤dαnlg(αn)+c(1−α)nlg((1−α)n)+cn=dαnlgn+d(1−α)nlgn+dαnlgα+d(1−α)nlg(1−α)+cn≤dnlgn+(d(αlgα+(1−α)lg(1−α))+c)n≤dnlgn 只要 d≥−cαlgα+(1−α)lg(1−α) , T(n)=O(nlgn) 。所以 T(n)=Θ(nlgn) 。