【递归】递归式求解

首先介绍一些符号及其概念。


Θ:渐近紧确界

定义:Θ(g(n)) = { f(n):存在正常量c1,c2和n0,使得对所有n≥n0,有0 ≤ c1g(n) ≤ f(n) ≤ c2g(n)}

也就是说,当n超过某个值时,f(n)夹在c1g(n)和c2g(n)之间。

比如我们证明2n^2-3n的渐近确界时Θ(n^2):c1n^2<<2n^2-3n<<c2n^2,求解不等式时,先确定n0,再确定c

即 c1≤ 2-3/n -> 我们令n0=5,则c1≤7/5,也就是说,存在c1小于等于7/5,对于n≥n0,上述不等式成立,n^2时其渐近紧确界。


O:渐近上界

定义:O(g(n)) = { f(n) :存在正常量c和n0,使得对所有n≥n0,有0≤f(n)≤cg(n) }

定义很明确,f(n)函数在n大于某个值时小于cg(n),通常用来描述算法运行的最坏时间。


Ω:渐近下界

定义:Ω(g(n)) = { f(n):存在正常量c和n0,使得对所有n≥n0,有0 ≤ cg(n) ≤ f(n)}

一个简单的定理:对任意两个函数f(n)和g(n),我们有f(n) = Θ(g(n)),当且仅当f(n) = O(g(n))且f(n) = Ω(g(n))。


o:非渐近紧确上界

定义:o(g(n)) = { f(n): 对任意正常量c>0, 存在常量n0>0,使得对所有n≥n0,有0≤f(n)<cg(n)}

与O记号的区别就在于是对于任意的正常量c。比如我们证明2n = o(n^2)

2n ≤ cn^2,n ≥ 2/c ,则n0=2/c,意思是,对于任意的正数c,都有当n大于2/c时渐近确界成立。


w:非渐近紧确的下界

定义:Ω(g(n)) = { f(n):对任意正常量c>0,存在常量n0>0,使得对所有n≥n0,有0 ≤ cg(n) < f(n)}

算法导论上有个思考题:第三章3-2,感觉网上很多答案时错的。当然我自己也可能时错的,欢迎指正。

A是否时B的O,o,Ω,w,Θ

A B O o Ω w Θ
lg^k(n) n^ε × ×     ×
n^k c^n × ×   × ×
n^1/2 n^sinn × × × × ×
2^n 2^n/2     × × ×
n^lgc c^lgn   ×   ×  
lg(n!) lg(n^n)   ×   ×  

求解递归式


第一种方法时递归树法

根据递归式画出递归树->确定树的高度->确定每行的规模(复杂度)->做加法。

代入法验证:比如证明T(n) = 3T(n/4)+Θ(n^2)的上界是O(n^2)。证明如下:

T(n) ≤ dn^2

T(n) = 3T(n/4)+Θ(n^2) ≤ 3d(n/4)^2 + cn^2 = 3/16dn^2+cn^2 ≤ dn^2

当d≥(16/13)c时,成立。

第二种方法叫主方法

依赖于主定理:

令a≥1,b>1是常数,f(n)是一个函数,T(n)是定义在非负整数上的递归式:T(n) = aT(n/b) + f(n),那么T(n)有如下渐近界:

1. 若对某个常数 ε>0,有f(n) = O(n^(logb(a-ε))),则T(n) = Θ(n^(logb(a)))

2. 若f(n)=Θ(logb(a)),则T(n) = Θ(logb(a)lgn)

3. 若对某个常数 ε>0,有f(n)=Ω(n^(logb(a+ε))),且对某个常数c<1和所有足够大的n有af(n/b)≤cf(n),则T(n)=Θ(f(n))。

其实就是将f(n)与n^(logb(a)进行比较,根据具体情况来判断渐近确界。举个例子:比如计算T(n) = 9T(n/3)+n的渐近确界。

a = 9, b = 3, n^(logb(a) = n^2,因为n=O(n^2),所以根据第一条T(n) = Θ(n^(logb(a)))=Θ(n^2)

猜你喜欢

转载自blog.csdn.net/ll523587181/article/details/81335731