第三章 理解分治算法的思想
3.1 掌握Master method(主方法)来求解递归关系式
求解递归方程式的方法:
1、代入法
Karatsuba Multiplication
2、递归树法
Karatsuba Multiplication
3、主方法
可以很快速的分析算法的时间复杂度。
对于一个递归实现的分治算法,其时间复杂度表示为:
T(n) = aT(n/b)+h(n)
比较n^log b (a)与Θ(h(n)) 的大小(Θ的含义和“等于”类似,而大O的含义和“小于等于”类似,感觉好像这里都可以用):
若n^log b (a)= Θ(h(n)) :该方法的复杂度为 Θ(h(n)log(n))
若n^log b (a)< Θ(h(n)) :该方法的复杂度为 Θ(h(n))
若n^log b (a)> Θ(h(n)) :该方法的复杂度为 Θ(n^log b (a))
**例如:
T(n) = T(n/2)+1:Θ(log(n))(二分查找)
T(n) = 2T(n/2)+n :Θ(nlog(n))(归并排序)
以上都属于“等于”的情况。**
3.3 其他问题
(后面来补)。。。。。
第四章 理解动态规划算法的思想
对动态规划类型的问题能建立起基本的递归关系式,并能用从底至上的方法求解,在求解过程知道建立数据储存的表格、
理解背包问题动态规划算法的运行时间是伪多项式时间。
4.1 基本概念
overlapping subproblems:
公式化表达:
当有选择上限制时:
4.2 背包问题
理解背包问题是伪多项式问题: