主定理简介——精选推荐
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
主定理简介
使⽤主定理求解递归式
主定理是分治算法分析中⾮常重要的定理。
如,我们要处理⼀个 规模为 n 的问题通过分治,得到 a 个规模为 n
b 的问题,分解⼦问题和合并⼦问题的时间是 f (n )。
在 T (n )=aT (n
b )+f (n ) 这个式⼦⾥,要求 a ⩾1,b >1(如果 b =1 时,递推⽆意义),f (n ) 是渐进意义上的正数。
回顾⼀下 a 和 b 的含义:
a 个⼦问题,即 a 是原问题分为⼦问题的个数;每个⼦问题的规模是 n
b ;
分治算法共三部分,分治合,⽽ f (n ) 就是分 + 合的时间。
n b 和 n
b ,向下取整和向上取整的细节,并不会影响主定理的推导。
⽽后呢,根据上⾯的式⼦我们会得到三种情况:
若有实数⼤于零 (ε>0),f (n )=O (n log b a −ε),则 T (n )=Θ(n log b a );
若 f (n )=Θ(n log b a ),则 T (n )=Θ(n log b a log n );若有实数⼤于零 (ε>0)f (n )=Ω(n log b a +ε),使得较⼤的 n ,满⾜ af (n b )⩽cf (n ),这时候则 T (n )=Θ(f (n ))。
这三种情况看起来很复杂,搞清楚他们之间的关系,快速记忆就简单了。
对于三种情况的每⼀种,我们将函数 f (n ) 与 n log b a ⽐较,俩个函数较⼤者将决定递归式的解。
若函数 n log b a 更⼤,如情况 1,则解是 T (n )=Θ(n log b a );注意 f (n ) ⼩于 n log b a 是渐进意义上的,要差⼀个因⼦量级 n ε(ε>0)。
若函数 f (n ) 更⼤,如情况 3,则解是 T (n )=Θ(f (n ));注意 f (n ) ⼤于 n log b a 是渐进意义上的,要差⼀个因⼦量级 n ε(ε>0),还要满⾜ af (n
b )⩽cf (n );
若俩个函数相等,如情况 2,则乘上⼀个对数因⼦,解为 T (n )=Θ(n log b a log n );
上⾯的三种情况并未覆盖 f (n ) 的所有可能性,情况 1、情况 2 之间存在间隙,f (n ) 可能⼩于 n log b a 但不是多项式意义上的⼩于;情况 2、情况 3 之间也存在间隙,f (n ) 可能⼤于n log b a 但不是多项式意义上的⼤于;若函数 f (n ) 在这俩个间隙中,或者是情况 3 中要求的 af (n
b )⩽cf (n ) 条件不成⽴,就不能使⽤主⽅法来解决递归式。
⾸先,得明⽩⼀个基准函数:Θ(n log b a )。
有了基础函数之后,就可以根据它来判定情形之间的关系。
那我们该如何记忆这个基准函数呢 ??
原来的函数是:aT (n
b )+f (n ) 为底数,如果化为对数形式也是以 b 为底 (log b a );
原函数是⼀个多项式,a 和 b 都是常数,算出来肯定也是⼀个具体的数值。
所以,我们要记这样⼀个基准多项式(基准函数):Θ(n ),次⽅(即 ?)是取对数的。
接下来,是以上三种情况的判定:
f (n ) 是弱于基准的,O (n lo
g b a −ε)<Θ(n log b a );
f (n ) 是等于基准的,Θ(n lo
g b a )=Θ(n log b a );
f (n ) 是强于基准的,Ω(n lo
g b a +ε)>Θ(n log b a )。
例⼦
例 1:T (n )=4T (n
4)+Θ(1)(乐⾼铺积⽊)
⌊⌋⌈⌉
分析,a=b=4,基准函数是Θ(n log44),因为 log44=1,所以基准函数是Θ(n)。
⼜因为f(n)=Θ(1) ⽐基准函数Θ(n) 要弱,我们取⼀个实数 (ε=1),即Θ(1)=O(n1−1
2)=O(√n)。
得到T(n)=Θ(n)。
例 2:T(n)=T(n
2)+Θ(1)(⼆分查找)
分析,a=1,b=2,基准函数是Θ(n log21),因为 log21=0,所以基准函数是Θ(1)。
⼜因为f(n)=Θ(1),基准函数也是Θ(1) ,f(n)=基准函数,再乘上⼀个 log n,即T(n)=Θ(log n)。
例3:T(n)=2T(n
2)+Θ(n) (归并排序)
分析,a=b=2,基准函数是Θ(n log22),因为 log22=1,所以基准函数是Θ(n)。
⼜因为f(n)=Θ(n),基准函数也是Θ(n),f(n)=基准函数,最后T(n)=Θ(n logn)。
摘⾃。
Processing math: 100%。