第5章减治法(完).ppt
《第5章减治法(完).ppt》由会员分享,可在线阅读,更多相关《第5章减治法(完).ppt(73页珍藏版)》请在三一办公上搜索。
1、第5章 减治法,2023/9/6,第5章 减治法,Page 2,第5章 减治法,5.1 减治法的设计思想,5.2 查找问题中的减治法,5.3 排序问题中的减治法,5.4 组合问题中的减治法,2023/9/6,第5章 减治法,Page 3,规模为n的原问题的解与较小规模(通常是n/2)的子问题的解之间具有关系:(1)原问题的解只存在于其中一个较小规模的子问题中;(2)原问题的解与其中一个较小规模的解之间存在某种对应关系。由于原问题的解与较小规模的子问题的解之间存在这种关系,所以,只需求解其中一个较小规模的子问题就可以得到原问题的解。,5.1 减治法的设计思想,2023/9/6,第5章 减治法,P
2、age 4,5.1 减治法的设计思想,2023/9/6,第5章 减治法,Page 5,例:计算an的值,应用减治技术得到如下计算方法:,应用分治法得到an的计算方法是:,O(log2n),O(nlog2n),5.1 减治法的设计思想,2023/9/6,第5章 减治法,Page 6,所以,通常来说,应用减治法处理问题的效率是很高的,一般是O(log2n)数量级。,减治法只对一个子问题求解,并且不需要进行解的合并。应用减治法(例如减半法)得到的算法通常具有如下递推式:,5.1 减治法的设计思想,对比分治法:,2023/9/6,第5章 减治法,Page 7,5.1 减治法的设计思想,一个简单的例子两
3、个序列的中位数,问题描述:一个长度为n(n1)的升序序列S,处在第n/2个位置的数称为序列S的中位数。两个序列的中位数是他们所有元素的升序序列的中位数。现有两个等长升序序列A和B,试设计一个在时间和空间两方面都尽可能高效的算法,找出两个序列的中位数。,A=11,13,15,17,19,B=2,4,10,15,20,则中位数为13,2023/9/6,第5章 减治法,Page 8,5.1 减治法的设计思想,想法:分别求出两个序列的中位数,记为a和b;比较a和b,有下列三种情况:a=b:则a即为两个序列的中位数;a b:则中位数只能出现在b和a之间,在序列A中舍弃a之后的元素得到序列A1,在序列B中
4、舍弃b之前的元素得到序列B1;在A1和B1中分别求出中位数,重复上述过程,直到两个序列中只有一个元素,则较小者即为所求。,2023/9/6,第5章 减治法,Page 9,5.1 减治法的设计思想,对于两个给定的序列A=11,13,15,17,19,B=2,4,10,15,20,求序列A和B的中位数的过程。,2023/9/6,第5章 减治法,Page 10,5.1 减治法的设计思想,1.循环直到序列A和序列B均只有一个元素 1.1 a=序列A的中位数;1.2 b=序列B的中位数;1.3 比较a和b,执行下面三种情况之一:1.3.1 若a=b,则返回a,算法结束;1.3.2 若ab,则在序列A中舍
5、弃a之后的元素,在序列B中舍弃b之前的元素,转步骤1;2.序列A和序列B均只有一个元素,返回较小者;,2023/9/6,第5章 减治法,Page 11,5.2.1 折半查找,5.2.2 二叉查找树5.2.3 选择问题,5.2 查找问题中的减治法,2023/9/6,第5章 减治法,Page 12,基本思想:在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键码相等,则查找成功;若给定值小于中间记录的关键码,则在中间记录的左半区继续查找;若给定值大于中间记录的关键码,则在中间记录的右半区继续查找。不断重复上述过程,直到查找成功,或所查找的区域无记录,查找失败。,5.2.1 折半查找,202
6、3/9/6,第5章 减治法,Page 13,例:查找值为14的记录的过程:,0 1 2 3 4 5 6 7 8 9 10 11 12 13,7 14 18 21 23 29 31 35 38 42 46 49 52,3114,1814,714,14=14,查找成功!,2023/9/6,第5章 减治法,Page 14,2023/9/6,第5章 减治法,Page 15,判定树描述折半查找的判定过程。长度为n的判定树的构造方法为:(1)当n=0时,判定树为空;(2)当n0时,判定树的根结点是有序表中序号为mid=(n+1)/2(取地板)的记录,根结点的左子树是与有序表r1 rmid-1相对应的判定树
7、,根结点的右子树是与rmid+1 rn相对应的判定树。,2023/9/6,第5章 减治法,Page 16,具有11个结点的判定树,在表中查找任一记录的过程,即是判定树中从根结点到该记录结点的路径,和给定值的比较次数等于该记录结点在树中的层数。具有n个结点的判定树的深度为,所以,查找成功时进行的比较次数最多为,2023/9/6,第5章 减治法,Page 17,以深度为k的满二叉树(n=2k-1)为例,假设表中每个记录的查找概率相等,即pi=1/n,而树的第i层上有2i-1个结点,则折半查找的平均查找长度为:,所以,折半查找的时间复杂度为:O(log2n),2023/9/6,第5章 减治法,Pag
8、e 18,二叉查找树,又称二叉排序树,是具有下列性质的二叉树:(1)若它的左子树不空,则左子树上所有结点的值均小于根结点的值;(2)若它的右子树不空,则右子树上所有结点的值均大于根结点的值;(3)它的左右子树也都是二叉排序树。,5.2.2 二叉查找树,2023/9/6,第5章 减治法,Page 19,2023/9/6,第5章 减治法,Page 20,由二叉排序树的定义,在二叉排序树root中查找给定值k的过程是:若root是空树,则查找失败;若k根结点的值,则查找成功;否则,若k根结点的值,则在root的左子树上查找;否则,在root的右子树上查找;上述过程一直持续到k被找到或者待查找的子树为
9、空,如果待查找的子树为空,则查找失败。二叉排序树的查找效率就在于只需要查找两个子树之一。,5.2.2 二叉查找树,2023/9/6,第5章 减治法,Page 21,二叉排序树的结点结构为:struct BiNode int data;/结点的值,假设查找集合的元素为整型 BiNode*lchild,*rchild;/指向左、右子树的指针;,2023/9/6,第5章 减治法,Page 22,在二叉排序树上查找关键码等于给定值的结点的过程,恰好走了一条从根结点到该结点的路径,和给定值的比较次数等于给定值的结点在二叉排序树中的层数,比较次数最少为1次(即整个二叉排序树的根结点就是待查结点),最多不超
10、过树的深度。具有n个结点的二叉树的深度至少是,至多是n,所以,二叉排序树的查找性能在O(log2n)和O(n)之间。,2023/9/6,第5章 减治法,Page 23,设无序序列 T=(r1,r2,rn),T 的第k(1kn)小元素定义为T按升序排列后在第k个位置上的元素。给定一个序列T和一个整数k,寻找 T 的第k小元素的问题称为选择问题。特别地,将寻找第n/2小元素的问题称为中值问题。,5.2.3 选择问题,2023/9/6,第5章 减治法,Page 24,(1)若k=s,则rs就是第k小元素;(2)若ks,则第k小元素一定在序列rs+1 rj中;,考虑快速排序中的划分过程,一般情况下,设
11、待划分的序列为ri rj,选定一个轴值将序列ri rj进行划分,使得比轴值小的元素都位于轴值的左侧,比轴值大的元素都位于轴值的右侧,假定轴值的最终位置是s,则:,2023/9/6,第5章 减治法,Page 25,选择问题的例子:,2023/9/6,第5章 减治法,Page 26,2023/9/6,第5章 减治法,Page 27,最好情况:每次划分的轴值恰好是序列的中值,则可以保证处理的区间比上一次减半,由于在一次划分后,只需处理一个子序列,所以,比较次数的递推式是:,最坏情况:每次划分的轴值恰好是序列中的最大值或最小值,则处理区间只能比上一次减少1个,所以,比较次数的递推式是:,平均情况:假设
12、每次划分的轴值是划分序列中的一个随机位置的元素,则处理区间按照一种随机的方式减少,可以证明,算法的平均时间是O(n)。,2023/9/6,第5章 减治法,Page 28,5.3.1 堆排序,5.3.2 插入排序,5.3 排序问题中的减治法,2023/9/6,第5章 减治法,Page 29,堆的定义堆是一棵完全二叉树,任一结点关键字小于等于(或大于等于)其孩子结点的关键字。n个关键字序列K1,K2,Kn称为堆,当且仅当该序列满足:KiK2i且KiK2i+1(1in/2)或者KiK2i且KiK2i+1(1in/2),小根堆,大根堆,5.3.1 堆排序,2023/9/6,第5章 减治法,Page 3
13、0,小根堆,大根堆,不是堆,不是堆,堆中任一棵子树也是堆,2023/9/6,第5章 减治法,Page 31,堆和序列的关系,将堆用顺序存储结构来存储,则堆对应一组序列。,思考:树中的结点与数组下标有什么关系?,若父结点下标为i,则左孩子为2i,右孩子为2i+1;若某结点下标为i,则其父亲下标为i/2。,2023/9/6,第5章 减治法,Page 32,以结点的编号作为下标,将堆用顺序存储结构(即数组)来存储,则堆对应于一组序列。,5.3.1 堆排序,2023/9/6,第5章 减治法,Page 33,堆排序的基本思想是:首先将待排序的记录序列构造成一个堆,此时,选出了堆中所有记录的最大者即堆顶记
14、录,然后将它从堆中移走(通常将堆顶记录和堆中最后一个记录交换),并将剩余的记录再调整成堆,这样又找出了次大的记录,以此类推,直到堆中只有一个记录为止。,5.3.1 堆排序,2023/9/6,第5章 减治法,Page 34,为保证时间性能,就要利用已有结果,每次输出堆顶后,剩下元素不是完全重建,应该在原堆上通过某些调整得到;为保证空间性能,输出的堆顶应利用原有空间,可将它与无序区最后记录交换位置。排序过程中有序区在原记录区的尾部逐步形成并向前扩大,和直接选择排序相反。,两个问题:(1)最初如何由一个无序序列建成一个堆?(2)在输出堆顶元素后,如何调整剩余元素成为一个新的堆?,1、初始堆的建立,2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 章减治法
链接地址:https://www.31ppt.com/p-5936762.html