收藏 分享(赏)

第12章--分治与平衡.ppt

上传人:weiwoduzun 文档编号:5714843 上传时间:2019-03-14 格式:PPT 页数:15 大小:235.54KB
下载 相关 举报
第12章--分治与平衡.ppt_第1页
第1页 / 共15页
第12章--分治与平衡.ppt_第2页
第2页 / 共15页
第12章--分治与平衡.ppt_第3页
第3页 / 共15页
第12章--分治与平衡.ppt_第4页
第4页 / 共15页
第12章--分治与平衡.ppt_第5页
第5页 / 共15页
点击查看更多>>
资源描述

1、第12章 分治与平衡,12.1 分治算法 12.2 合并排序 12.3 快速排序 12.4 整数乘法和矩阵乘法 12.5 马的周游路线问题 小结,2. 分治法的适用条件采用分治法解决的问题一般具有的特征如下: (1)问题的规模缩小到一定的规模就可以较容易地解决。 (2)问题可以分解为若干个规模较小的模式相同的子问题,即该问题具有最优子结 构性质。 (3)合并问题分解出的子问题的解可以得到问题的解。 (4)问题所分解出的各个子问题之间是独立的,即子问题之间不存在公共的子问 题。 3. 分治法的基本步骤应用分治法一般有三个步骤: (1)分解:将原问题分解为若干个规模较小的子问题,这些子问题与原问

2、题形式相同,且相互独立。 (2)解决:若子问题易于求解则求出子问题的解,否则递归地解各个子问 题。 (3)合并:合并子问题的解求出原问题的解。,4. 分治法的复杂性分析如果分治法Divide-and-Conquer(P)解规模为|P|=n,那么用t(n)表示该 问题P所需的计算时间,则:用在算法复杂性中递归方程解的渐进阶的解法所介绍的迭代法来求解递 归方程,可以求得(12-1)的解:另一个需要提到的问题是,在分析分治法的计算效率时,通常得到的 是递归不等式:,12.2 合并排序,应用分治法的排序算法通常用以下的步骤来进行:若 num 为1,算法终止;否则,将这一元素集合分解成两个或更 多个子集

3、合,对每一个子集合分别排序,然后将排好序的子集 合并为一个集合 如果用元素的比较次数来计算它的时间复杂性,将满足递归式:上式的解是t(n)= (num-1),它是O(num)阶的,分治-合并排序法算法如下所示: void Merge(SeqList R,int low,int m,int high) /将两个有序的子文件Rlowm)和Rm+1high归并成一个有序的/子文件Rlowhighint i=low,j=m+1,p=0; /置初始值 RecType *R1; /R1是局部向量,若p定义为此类型指针速度更快R1=(ReeType *)malloc(high-low+1)*sizeof(R

4、ecType);if(! R1) /申请空间失败7Error(“Insufficient memory available!“);while(i=m /归并最后两个子文件/注意:若in且i+length-1n时,则剩余一个子文件轮空,无须归并 /MergePass,12.1 分治算法,1. 分治法的基本思想在一个对n个元素进行选择排序的算法中,对两个元素进行交换就是 一个基本操作,而基本操作的执行次数一般与问题的规模相关。因此问题 的规模较小,计算机求解问题的时间较短;问题的规模越大,计算机求解 问题的时间也就越长 采用分治法解决一个规模很大的问题,可以按照以下步骤进行: (1)将原问题分解成

5、规模较小的子问题,这些子问题最好有相同的规模。 (2)分别求解这些子问题,一般使用递归方法,但在问题规模较小时,可 以使用其他的方法。 (3)将子问题的答案合并,求出原问题的解。,12.3 快速排序,在一个具有n个元素的序列的所有排列以相等的概率作为 输入的条件下,对n个元素排序的任何一棵判定树的期望深度 不小于log2n! 以下是快速排序法的实现: void QuickSort(SeqList List,int l,int h) /对Listlh快速排序int pivot; /划分后的基准记录的位置if(lh)/仅当区间长度大于1时才须排序pivot=Partition(List,l,h);

6、 /对Listlh做划分QuickSort(List,l,pivot-1); /对左区间递归排序QuickSort(List,pivot+1,h); /对右区间递归排序 /QuickSort,把有九个元素的集合S=1, 5, 3, 7, 6, 8, 9, 4, 2,进行快速排序,其过程 如图12-1所示。,给出几种寻找pivot的方法: (1)选择Listl.h的第一个元素Listl的值作为pivot。 (2)选择Listl.h的最后一个元素Listh的值作为pivot。 (3)选择Listl.h中间位置的元素Listm的值作为pivot。 (4)选择Listl.h的某一个随机位置上的值Lis

7、trandom(h-l)+l 的值作为pivot。 按照第4种方法随机选择pivot的快速排序法又称为随机化 版本的快速排序法,在下面的复杂性分析中将看到该方法具有 平均情况下最好的性能,在实际应用中该方法的性能也是最好 的。,12.4 整数乘法和矩阵乘法,12.4.1 整数乘法对于两整数相乘的问题(假定每个乘数都是m位二进制数),按传 统方法,需O(m2)次二进位运算。有个改进的算法做两个m位数的乘法,只 需要O()次二进位运算,从而改进了乘法的数量级。设A和B是两个m位 数,且仍假定m是2的整次幂。如果把A和B都分为两段,每段的长为m/2 位,B的高m/2位段称为H1,低m/2位段称为L1

8、;B的高m/2位段称为H2, 低m/2位段称为L2,12.4.2 strassen矩阵乘法,矩阵乘法在数值计算中有广泛的应用,它也是线性代数中最常见的运 算之一。若X和Y是2个mm的矩阵,则它们的乘积Z=XY同样是一个mm 的矩阵。X和Y的乘积矩阵Z中的元素Zi, j定义为Strassen矩阵乘积分治算法中,用了7次对于m/2阶矩阵乘积的递归 调用和18次m/2阶矩阵的加减运算 按照解递归方程的套用公式法,其解为。由此可见,Strassen矩阵乘 法的计算时间复杂性比普通矩阵乘法有阶的改进,12.5 马的周游路线问题,考虑国际象棋棋盘上某个位置的一只马,它是否可能只走63步,正好 走过直点外的

9、其他63个位置各一次呢?如果有这样一种走法,则称所走的 这条路线为一条“马的周游路线”。若能找到一条这样的路线,也只能认为从 某个位置开始到某个终点之间,存在一条“马的周游路线”。充其量可以根据 这一问题的对称性,断定与起迄点处于同样地位的那些点之间存在一条周 游路线 只要了解这一算法的实质,编写程序是不困难的。这个算法的基本思想 是: (1)一个连通图G=(V, E)中,如果存在k个互不相交的子圈或子道路的集 合C=C1, C2, , Ck,k2 其中每个Ci或者是一个圈,或者是一条道路。令Ci=(Vi,Ei),ViV,EiE; 且当ij,1i,jk时,满足:ViVi= ;EiEj= ;V1

10、V2Vk=V则称C为图G的顶点覆盖子圈道路集,求nn棋盘马步图一条哈密顿圈的一个最优算法: 当n10且为偶数时,用上面提出的“分治-回溯-合并”算法容易 求得nn棋盘马步图的一个哈密顿圈,算法步骤是: (1)设r=n/2,将nn棋盘等分成4个rr棋盘。 (2)对rr棋盘,用“分治-回溯-合并”算法分别求出关键哈密 顿路径。 (3)按图12-2所示的方法连接成哈密顿圈容易得出,其时间复杂度是O(n2)。因此,对于输入规模而言,它是求 nn棋盘上马步的最优算法,算法的流程图如图下所示,小结,分治法是一个比较熟悉的解决问题的方法。它的基本策略是对于一个 规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解 决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问 题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题 的解。它有以下这几种应用,分别是合并排序、快速排序、整数乘法和矩阵乘 法、strassen矩阵乘法、马的周游路线问题等,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报