- 作者:Rockics(http://blog.csdn.net/Rockics )
- 转载请注明出处
本课的主讲是Erik,讲了算法设计中特别重要的思想之一:分治法。好好体会这一课的精华。由于本人英文水平太差,这一课前前后后加起来的时间差不多一天。最后的VLSI问题还是没有听的太明白?求什么?
分治法将会用到很多的递归技术,分治法的分割基本步骤:
1:分--减小问题规模
2:治--处理问题
3:合并--这一步不是必须的,比如说,二分查找法就没有合并这一步
举例说明:
1.合并排序
2.二分查找
3.数的幂乘
直接的解法就是将X乘上n次,需要Theta(n)。我们可以使用分治的思想,将n个X的乘法分成2个X^(n/2)的子问题,并递归的求出X^(n/2)。
递归式为T(n) = T(n/2) + Theta(1)。用主方法可以解得T(n) = Theta(lgn)。何为主方法?第二讲有讲。必须记忆。
4.Fibonacci数列
最简单的方法就是递归解决,时间复杂度指数级别,BAD。
把式子展开成二叉树,观察不难发现,很多F_i我们重复计算了好些次,如果采用自低向上的方法来计算出每一个F_i,一直到F_n,这可