题干:
使用数学归纳法证明: 当n刚好是2的幂时,以下递归式的解是T(n)=nlgn.
递归式的内容:
T(n) = 2 (若n = 2)
T(n) = 2T(n/2)+n (若n = 2^k, k > 1)
计算步骤:
1. 先计算证明 在递归式的开始部分 解能成立;
2. 再证明递归式的第二部分内容:
3. 先将原递归式写为带有不同变量的部分 比如这次的例题里 T(n) 和 T(n/2) 就是变量不同的部分 将n替换为新变量 即分别替换为T(2^k ) 和 T(2^(k+1)) 得到新递归式 T(2^(k+1)) = 2*T(2^k)+2^(k+1)
4. 假设题目中给出的解正确 将题目中的解根据第一种变量带入. 比如题目中的解是 T(n)=nlgn , 就将T(2^k) = 2^k * k 带入步骤3中的新递归式
5. 计算带入假设解了的新递归式 直到该递归式的样式变成"所有的变量均有新变量k+1组成"的样子 则证明解成立
比如 步骤3中的新变量是2^k 和 2^(k+1) 已经将变量为T(2^k )的假设解带入了 就需要推算出所有变量的样式是2^(k+1)
解:
(1) 当n = 2 时, 假设解成立, 即T(2) = 2*lg2成立, 计算得出T(2) = 2, 所以当n=2时,该解成立
(2) 当n = 2^k时, 假设解成立, 即T(2^k) = 2^k*lg(2^k)成立, 若能推算出T(2^(k+1)) = 2^(k+1)*lg(2^(K+1))亦成立(即将原式子中的k替换为k+1),则解成立.
计算过程如下:
在原递归式中 将n替代为2^(k+1) 可得到递归式为:
T(2^(k+1)) = 2*T(2^k)+2^(k+1)
根据假设成立的解, T(2^k) = 2^k*lg(2^k) 将该解带入原递归式 得到:
T(2^(k+1)) = 2* 2^k*lg(2^k) + 2^(k+1)
2*2的某次方 次方直接+1
T(2^(k+1)) = k * 2^(k+1) + 2^(k+1)
再将等式右边2^(k+1)提取公因式
T(2^(k+1)) = (k+1) * 2^(k+1)
所以解成立