【算法】M-01主项定理Master Method
2016-01-19 23:12
274 查看
原博主链接:http://blog.csdn.net/rizejin/article/details/5916833
主项定理所需条件:
递归方程如下
T(n) = a * T(n/b) + f(n)
a >= 1, b > 1, f(n)为简单函数
判断n^log b (a)与h(n)的大小关系
= Θ(h(n)) :该方法的复杂度为 Θ(h(n)*lg(n))
> Θ(h(n)) :该方法的复杂度为 Θ(n^(log a/log b))
< Θ(h(n)) :该方法复杂度为 Θ(h(n))
eg:
T(n) = T(n/2)+1:Θ(log(n))(二分查找)
T(n) = 2T(n/2)+n :Θ(n*log(n))(归并排序)
n^log b (a)其实相当于用递归树方法解出的递归方程的右侧的第一项,
而f(n)则是递归方程的右侧的第二项,这样,主项定理实际上是在比较组成结果的两个函数项,
而且这种比较是按照数量级(或者说是变化幅度)来比较的,也就是说,如2n 与 28n是
数量级(变化幅度)相当的。
这样就有了三种不同的情形:
f(n) < nlogba
也就是 f(n) = O(nlogba -e)
,e > 0为任意小的常数
或者说,f(n) 比 nlogba变化的慢,慢ne
那么,T(n) Î
Q (nlogba)
f(n) > nlogba
也就是 f(n) = W(nlogba +e)
,e > 0为任意小的常数
或者说,f(n) 比 nlogba变化的快,快ne
那么, T(n) Î
Q(f(n))
可以简单地说,递归方程的右侧的两项,哪项变化的块,T(n)就属于哪项的数量级
f(n) = nlogba
也就是两项的数量级相当,就给这个数量级乘上一个lg n
T(n) Î Q(nlogba * lg n)
Examples(以下示例来源于网络):
T(n) = 5T(n/2) + Q(n2)
Case 1: If f(n) =
O(nlogba -e)
for some constant e > 0 then T(n)ÎQ(nlogba)
Determine: a, b, f(n) and logba
a = 5
b = 2
f(n) = Q(n2)
logb a = log2 5 ≈ 2.32
Is f(n) Î O(nlg 5 -e) fore > 0 ?
Yes. f(n) = Q(n2)Î O(nlg 5 -e)
= O(n2.32 -e) fore ≈ 0.32
T(n) Î
Q(nlog25)
2. T(n) = 2T(n/2) + n
Determine: a, b, f(n) and logb(a)
a = 2
b = 2
f(n) = n
logb a = log2 2 = lg 2 = 1
Case 3: If f(n) =
Q(nlogba) then T(n)Î
Q(nlogba lg n)
f(n) = n Î
Q(nlog22) =Q(n1)
T(n) Î
Q(nlog22 lg n) =Q(n lg n)
3. T(n) = 5T(n/2) + Q(n3)
Determine: a, b, f(n) and logb(a)
a = 5
b = 2
f(n) = Q(n3)
logb a = log2 5 ≈ 2.32
Case 2: If f(n) =
W(nlogba+e)
for some constant e > 0
f(n) = Q(n3)ÎW(nlog25+e)
= W(n2.32+e) fore
≈0.68
and af(n/b) ≤ cf(n) for some constant c < 1 and all sufficiently large n
5(n/2)3≤ cn3
5n3/8 ≤ cn3
c = 5/8 < 1
then T(n) Î
Q(n3)
主项定理所需条件:
递归方程如下
T(n) = a * T(n/b) + f(n)
a >= 1, b > 1, f(n)为简单函数
判断n^log b (a)与h(n)的大小关系
= Θ(h(n)) :该方法的复杂度为 Θ(h(n)*lg(n))
> Θ(h(n)) :该方法的复杂度为 Θ(n^(log a/log b))
< Θ(h(n)) :该方法复杂度为 Θ(h(n))
eg:
T(n) = T(n/2)+1:Θ(log(n))(二分查找)
T(n) = 2T(n/2)+n :Θ(n*log(n))(归并排序)
n^log b (a)其实相当于用递归树方法解出的递归方程的右侧的第一项,
而f(n)则是递归方程的右侧的第二项,这样,主项定理实际上是在比较组成结果的两个函数项,
而且这种比较是按照数量级(或者说是变化幅度)来比较的,也就是说,如2n 与 28n是
数量级(变化幅度)相当的。
这样就有了三种不同的情形:
f(n) < nlogba
也就是 f(n) = O(nlogba -e)
,e > 0为任意小的常数
或者说,f(n) 比 nlogba变化的慢,慢ne
那么,T(n) Î
Q (nlogba)
f(n) > nlogba
也就是 f(n) = W(nlogba +e)
,e > 0为任意小的常数
或者说,f(n) 比 nlogba变化的快,快ne
那么, T(n) Î
Q(f(n))
可以简单地说,递归方程的右侧的两项,哪项变化的块,T(n)就属于哪项的数量级
f(n) = nlogba
也就是两项的数量级相当,就给这个数量级乘上一个lg n
T(n) Î Q(nlogba * lg n)
Examples(以下示例来源于网络):
T(n) = 5T(n/2) + Q(n2)
Case 1: If f(n) =
O(nlogba -e)
for some constant e > 0 then T(n)ÎQ(nlogba)
Determine: a, b, f(n) and logba
a = 5
b = 2
f(n) = Q(n2)
logb a = log2 5 ≈ 2.32
Is f(n) Î O(nlg 5 -e) fore > 0 ?
Yes. f(n) = Q(n2)Î O(nlg 5 -e)
= O(n2.32 -e) fore ≈ 0.32
T(n) Î
Q(nlog25)
2. T(n) = 2T(n/2) + n
Determine: a, b, f(n) and logb(a)
a = 2
b = 2
f(n) = n
logb a = log2 2 = lg 2 = 1
Case 3: If f(n) =
Q(nlogba) then T(n)Î
Q(nlogba lg n)
f(n) = n Î
Q(nlog22) =Q(n1)
T(n) Î
Q(nlog22 lg n) =Q(n lg n)
3. T(n) = 5T(n/2) + Q(n3)
Determine: a, b, f(n) and logb(a)
a = 5
b = 2
f(n) = Q(n3)
logb a = log2 5 ≈ 2.32
Case 2: If f(n) =
W(nlogba+e)
for some constant e > 0
f(n) = Q(n3)ÎW(nlog25+e)
= W(n2.32+e) fore
≈0.68
and af(n/b) ≤ cf(n) for some constant c < 1 and all sufficiently large n
5(n/2)3≤ cn3
5n3/8 ≤ cn3
c = 5/8 < 1
then T(n) Î
Q(n3)
相关文章推荐
- 批量处理数据的一些经验
- oracle 中的dual表简介与用法
- Kettle
- 手动下载 Xcode 文档
- Android属性动画
- Android6.0 SystemUI Keyguard 简介
- 一点思考
- 德玛啦啦啦
- C#发送邮件Email
- 本地缓存机制
- java中使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
- HDU 2199 Can you solve this equation?(简单二分)
- spring搭建redis集群
- HDU 2199 Can you solve this equation?(简单二分)
- [读书笔记]C#学习笔记三: C#类型详解..
- 6.Foundation Kit介绍 部分二
- Linux驱动开发之主设备号找驱动,次设备号找设备
- 实用工具——【1】java程序生成Windows安装程序
- SIP信令中的PRACK的含义和使用
- 笔记——表单