当前位置:文档之家› 版第二讲分治策略不可更改

版第二讲分治策略不可更改

i=0
所以,由递归树猜测T(n)=O(n2)随后,再利用数 学归纳法证明。
PPT文档演模板
15
版第二讲分治策略不可更改
公式法
其中,a≥1,b>1是常数,f(n)是一个渐进函 数,描述划分问题与合并解的时间复杂性。 n/b可以是 ,也可以是
上述方程描述了如下算法的运行时间:将一个规模为n的问题 划分为a个规模为n/b的子问题,其中a和b为正常数。分别递归 地解决a个子问题,解每个子问题所需时间为T(n/b)。划分原问 题和合并子问题的解所需要的时间由f(n)决定
Ackerman函数的特征:A(n,m)的自变量m的每一个值 都定义了一个单变量函数。
m=0时,A(n,0)=n+2
m=1时,A(n,1)=A(A(n-1,1),0)=A(n-1,1)+2, A(1,1)=2 可以得出A(n,1)=2*n
m=2时A(,1,A0)(n=,22)=A(A(n-1,2),1)=2A(n-1,2), A(0A,(m1,)2=)=1A(A(0,2),1)=A(1m,1)≥=02 A(可n,0以)得=出n A+(2n,2)= 2n 。 n≥2
PPT文档演模板
16
版第二讲分治策略不可更改
定理:上述递归方程含有三种情形的渐进界:
(1)对于某个常数
如果

(2)如果

(3)对某个常数
如果
且对某个常数 c <1 以及任意足够大的
n,
PPT文档演模板
17
版第二讲分治策略不可更改
定理含义
将f(n)与 进行比较,
当 较大时,
相等时
当 较小时,
结论:可以通过尽量减少子问题的个数 或者减少f(n)的数量级来增强分治算法的 有效性。
例2:T(n) = T(2n/3)+1 由上式可知a=1, b=3/2, f(n)=1, 且 又因为 满足定理(2),因此
PPT文档演模板
20
版第二讲分治策略不可更改
2.2 递归概念
分治算法的特征:将较大规模的问题分解为若 干个较小规模的子问题,每个子问题的求解过 程与原问题一样,并利用自底向上的求解策略 得到最终的解。
PPT文档演模板
5
版第二讲分治策略不可更改
分治算法的算法框架
divide-and-conquer(P){ if ( | P | <= n0) adhoc(P); //解决规模小的问题 //将问题P 分解为子问题P1,P2,...,Pa; for (i=1,i<=a,i++) yi=divide-and-conquer(Pi);//递归的求解各子问
边界条件
递归方程
边界条件与递归方程是递归函数的二要素。
PPT文档演模板
22
版第二讲分治策略不可更改
递归应用举例2: Ackerman函数
A(1,0) = 2
A(0,m) = 1
m≥0
A(n,0) = n + 2
n≥2
A(n,m) = A(A(n-1,m),m-1) n,m≥1
PPT文档演模板
23
版第二讲分治策略不可更改
❖用递归树方法求解递归方程的基本步骤:
① 利用递归树推测出一个解 ② 利用替换方法进行证明
❖ 构造递归树的方法就是展开递归方程,然后将树 中每层的时间求和,最终获得算法的时间复杂性。
PPT文档演模板
11
版第二讲分治策略不可更改
例:T(n)=3T(n/4)+cn2
T(n) →
PPT文档演模板
12
版第二讲分治策略不可更改
题 return merge(y1,...,ya); //合并为原问题的解
}
PPT文档演模板
6
版第二讲分治策略不可更改
分治算法的复杂性分析
一个分治算法将规模为n的问题分成a个规模为 n规/模b为的1子的问问题题。耗设费分1个解单阈位值时n0间=。1,再且设a将dh原oc问解 题分解为a个子问题以及用merge将a个子问题 的解合并为原问题的解需用f(n)个单位时间。 用T(n)表示该分治算法解规模为|P|=n的问题 所需的计算时间,则有下列递归方程:
25
版第二讲分治策略不可更改
方法1:固定位置找元素
假设R={r1,r2,…,rn}是待排列的n个元素,Ri=R-{ri}。 假设集合Ri中元素的全排列记为perm(Ri)。 (ri)perm(Ri)表示在全排列perm(Ri)的每一个排列的第一 个位置加前缀ri得到的排列。
当n=1时,perm(R)=(r) 其中r是集合R中唯一的元素; 当n>1时,perm(R)的全排列为: (r1)perm(R1),(r2)perm(R2),…,(rn)perm(Rn)
m=3A时(n,,m类) =似A的(A可(n以-1,m推)出,m-1) n,m≥1
PPT文档演模板
24
版第二讲分治策略不可更改
递归应用举例3: 排列问题
求解n个元素{r1,r2,…,rn}的全排列。 n个元素的全排列有n!种可能。 解题基本方法: (1)固定位置放元素 (2)固定元素找位置
PPT文档演模板
n/16 n/16 n/16 n/16 n/16
PPT文档演模板
2
版第二讲分治策略不可更改
将求出的较小规模的问题解合并成一个较
大规模的问题解,并自底向上地求出原问
题的解。
最顶层问题
a 为分解的子问题数量; n/b 为每个子问题的数据规模; f(n) 为合并子问题解所消耗的时间。
PPT文档演模板
3
版第二讲分治策略不可更改
2.1 分治算法的基本思想
分治算法的基本思想是将一个规模为n的问题 分解为a个规模较小的子问题,这些子问题互 相独立且与原问题相同。递归地解这些子问题, 然后将各个子问题的解合并得到原问题的解。
PPT文档演模板
4
版第二讲分治策略不可更改
分治算法所能解决问题一般具有以下几个特征:
缩小问题规模可以降低解决问题的难度; 可以将子问题的解合并为原问题解; 问题分解出的各个子问题是相互独立的,即子问题之间 不包含公共的子问题。
33
方法2:固定元素找位置
在n-1 个元素的全排列基础上,将某个元素插入到 每个位置上,进而得出n 个元素的全排列。
基本过程: ① 将n放在p[1]位置上,并用p[2..n]产生n-1个元素的全排列; ② 将n放在p[2]位置上,并用p[1]和p[3..n]产生n-1个元素 的全排列; ③ 将n放在p[3]位置上,并用p[1..2]和p[4..n]产生n-1个 元素的全排列; ...........
1.需要先考虑P[m],如果能够求出剩余元P[m+1] 、P[m+2] 、…,P[n] 的所有排列,我们只需将P[m]放到每个排列的开头。
2.然后考虑P[m+1],通过交换P[m]和P[m+1],这样我们仍然只要考虑求剩 余元素P[m+1] 、P[m+2],… P[n]的所有排列即可。
3.然后依次考虑P[m+3],…,P[n]。
PPT文档演模板
31
版第二讲分治策略不可更改
void perm(int[] r, int i, int n) { // r存放R集合元素,r[0]~r[n] // i,n 表示目前求解的全排列起始与终止位置 if (只有一个元素){ //递归边界条件 显示当前排列; } else { 依次将i ~ n 之间的每个元素交换 //递归到第i 个位置,并用同样的方法 (递归)求解i+1~n 之间的全排列 }
log4n+1
PPT文档演模板
nlog4 3
13
O(nlog4 3 )
版第二讲分治策略不可更改
递归树总共有多少层?当递归树展开一层,其规模 为n/4,当递归树展开到第2层时,其规模为 n/16=n/42,依次类推,当展开到第k层时,其规 模为n/4k=1时,不再展开,由此可以求得递归树 的层数为k=log4n。
4.当问题规模降为求一个元素P[m]的全排列时,问题就极为简单,可作为 递归出口。
5.值得注意的是,将P[m]和某个P[k]交换,求出剩余元素的所有排列后,为 了避免重复,发生混乱,必须将P[m] 和P[k]交换回去,然后才能继续P[m] 和P[K+1]的交换。
PPT文档演模板
30
版第二讲分治策略不可更改
❖ 现在,我们来计算一下,有多少个叶节点。第1层
有3个节点,第2层有32个节点,依次类推,第k层有
3k个节点,当k=log4n,即为叶节点,因此,叶节点
的个数为
,而每个叶节点需要的时
间为T(1),因此,整个叶节点的时间为

PPT文档演模板
14
版第二讲分治策略不可更改
将递归树每一层的时间累加,可得:
PPT文档演模板
26
版第二讲分治策略不可更改
递归公式
PPT文档演模板
27
版第二讲分治策略不可更改
PPT文档演模板
28
版第二讲分治策略不可更改
思路?
PPT文档演模板
举例,0~3共4个数值的全排列
29
将每个元素交换 到固定位置上, 并求解其余位置 元素的全排列。
版第二讲分治策略不可更改
假设: 要求P[m] 、P[m+1] 、… P[n]的全排列:
❖适用比较容易猜出递归解的情形。
PPT文档演模板
9
版第二讲分治策略不可更改
例:T(n)=2T(n/2)+n (2路归并)
v 猜测出解为T(n)=O(nlgn) v 证明存在某个常数c,使得T(n) ≤cnlgn
数学归纳法:
假设解对n/2成立,即T(n/2) ≤c(n/2)lg(n/2) 将其对递归方程进行替换,得: T(n)= 2T(n/2)+n
相关主题