这是网易公开课麻省理工学院算法导论的笔记,主要讲了几种渐进符号, O, Θ,o, ω,Ω的意义。
这里重点想分享的是递归算法的听课笔记。
递归算法常见三种算法:代换法,递归树算法和主定理
1、代换法(substitutionmethod):
主要分为三个步骤:
1) 猜测形式。并不需要很确切,只要大致是上界就可以,系数之类只用常数c代替就可以
2) 带入求证。把猜测的形式带入,能否证的最终的上界,不能的话重新猜测
3) 确定系数
Ex: T(n) = 4* T(n/2)+ n,猜测是不是以n3为上界, 假设答案为c*n3,带入, T(n)<=c n3 + n
=cn3-(cn3-n)
<cn3
所以可以确定O(n3)是一个上界,进一步精确看n2行不行
2、递归树(recursion tree):
这个方法比较直观简单,容易理解,在归并排序的时候见过。举个例子好了 T(n) = T(n/4)+T(n/2)+
因为第一次分 n/4 + n/2 = 3n/4 <n
所以最终的叶子节点个数严格小于n , 最终由等比数列求和可知T(n)<2*
补充一点, t(n) = at(n/b)+f(n)的递归树树高 logb(n);
3、主定理(mastermethod):
这个方法受限制比较多,但是非常常用,因为方便
要记忆的东西比较多,主要是适用于形如 T(n) = aT(n/b)+f(n), a>=1; b>1;f(n)渐进趋正(对特定n0, 任意 n>=n0, f(n)>0)
解有三种形式,取决于 f(n)与 (log 以b为底,a)
EX:
T(n)= 4T(n/2)+n a = 4 b = 2 f(n) = n,符合case1 Θ(n2);
T(n)= 4T(n/2)+n2 符合case2,T(n) = Θ( ) (以2为底)
F(n)= n3 时符合case3