-分治收集讲座.ppt
《-分治收集讲座.ppt》由会员分享,可在线阅读,更多相关《-分治收集讲座.ppt(52页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、算法设计与分析,第二讲 分 治,目的 分治法的思想 分治算法的设计方法 将递归算法改写成迭代算法的一般方法 重点 分治法的抽象控制策略 针对问题的抽象控制策略实现 难点 将递归算法改写成迭代算法的一般方法和实现,2.1 基本策略,一、求解大规模问题的复杂性,二、化整为零、分而治之,P n,p1 n1,p2 n2,pk nk,s0,s1,sk,S,分解,分治,合并,三、分治法的抽象控制策略,设: 原问题输入为an,简记为(1,n); 子问题输入为apaq,1pqn,简记为(p,q)。,已知: SOLUTION; int divide (int, int); int small (int, int
2、); SOLUTION conquer (int, int); SOLUTION combine (SOLUTION, SOLUTION);,SOLUTION DandC(p,q) /* divide and conquer */ if(small(p,q) return conquer(p,q); else m=divide(p,q); return combine( DandC(p,m), DandC(m+1,q) ); ,分治法的抽象控制算法,已知n个按非降次序排列的元素an, 查找元素x是否在表中出现, 若找到, 返回其下标值, 否则, 返回一负数.,2.2 二分检索,一、问题,二、分
3、治的思路,原问题: (n, a0,an-1, x),数据分组: a0ak-2 ak-1 akan-1,三个子问题: (k-1, a0,ak-2, x) (1, ak-1, x) (n-k, ak,an-1, x),int BinSearch1(p, q, x) int k=(p+q)/2; if(qak) return BinSearch1(k+1, q, x); ,三、递归算法,四、计算复杂度,1. 二元比较树,以有序表的中间元素为根节点的二分树,左子树上所有元素不比父节点元素值大,右子树上所有元素不比父节点元素值小,圆形接点称为内节点,对应成功检索的数据元素,二分检索树的深度:,二元比较树
4、的深度:,方形接点称为外节点,对应不成功检索的数据子集,定理2.2 若n在区域2k-1, 2k)中, 则对于一次成功的检索, BinSearch1至多作k次比较; 而对于一次不成功的检索, 或者作k-1次比较或者作k次比较。,成功检索最好情况: 不成功检索最好情况: 成功检索最坏情况: 不成功检索最坏情况:,2. 时间复杂度,平均情况分析,内部路径长度之 和:I,5,2,7,1,3,6,8,4,9,外部路径长度之和:E, E=I+2n。,成功检索的平均比较次数: S(n)=(I/n)+1,不成功检索的平均比较次数: U(n)=E/(n+1),因为:U(n)=O(log n),所以:S(n)=O
5、(log n),由此可得:S(n)=(1+1/n)U(n)-1,成功检索 不成功检索 最好 最坏 平均 最好 最坏 平均 O(1) O(log n) O(log n) O(log n) O(log n) O(log n),二分检索的时间复杂度结论,定理2.3 设an含有n(n1)个不同元素, 排序为a1an. 又设用以比较为基础去判断是否xan的任何算法在最坏情况下所需的最小比较次数为FIND(n), 那么, FIND(n) 。,说明:任何以比较为基础的检索算法, 最坏情况下的比较次数都不可能低于O(log n), 因此, 二分检索是最优的最坏情况算法。,3. 以比较为基础检索的时间下界,思考
6、题: 1. 请证明 E=I+2n 2. 请证明 S(n)=(I/n)+1,2.3 找最大和最小元素,在n个不同元素的集合an中同时找出它的最大和最小元素.,一、问题,比较次数:2(n-1),将语句1的体改写成 if(ai*max) *max=ai; else if(ai*min) *min=ai;,直接搜索的改进方法,三、实现分治的递归算法,集合只有一个元素时 *max=*min=ai;,集合只有两个元素时 if(aiaj) *max=aj; *min=ai; else *max=ai; *min=aj;,集合中有更多元素时 分治: 将原集合分解成两个子集, 分别求两个子集的最大和最小元素,
7、再合并结果。,递归算法,typedef struct ElemType max, min; SOLUTION;,SOLUTION MaxMin(i, j) SOLUTION s, s1, s2; if(i=j) s.max=s.min=ai; return s; if(i=j-1) if(ai=s2.max) ? (s.max=s1.max):( s.max=s2.max); (s1.min=s2.min) ? (s.min=s1.min):( s.min=s2.min); return s; ,时间复杂度,当n是2的幂时, 即对于某个正整数k, n=2k, 有,令t(n)表示MaxMin需要
8、的元素比较次数, 存在下列递推关系,t(n)=2t(n/2)+2 = 2(2t(n/4)+2)+2 = 4t(n/4)+4+2 =2k-1t(2)+ =2k-1+2k-2 =3n/2-2,当元素的比较开销与整数比较开销相当时, 将前两条if语句合并为: if(i=j-1) /* 对应一元素和两元素的情况 */ if(aiaj) s.max=aj; s.min=ai; else s.max=ai; s.min=aj; return s; ,MaxMin需要的比较次数, 存在下列递推关系:,思考题 请分析c(n)递推关系式中为什么是加3而不是加2 ?,给定一个含n个元素的集合an, 按一定次序(本
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 分治 收集 搜集 采集 讲座
限制150内