算法第五章幻灯片.ppt
《算法第五章幻灯片.ppt》由会员分享,可在线阅读,更多相关《算法第五章幻灯片.ppt(91页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、算法第五章课件第1页,共91页,编辑于2022年,星期一什么是减治法什么是减治法n减治技术利用了一种关系:一个问题给减治技术利用了一种关系:一个问题给定实例的解和同样问题较小实例的解之定实例的解和同样问题较小实例的解之间的关系。一旦建立了这样一种关系,间的关系。一旦建立了这样一种关系,我们既可以从顶至下(递归地),也可我们既可以从顶至下(递归地),也可以从底至上(非递归地)来运用这种关以从底至上(非递归地)来运用这种关系。系。第2页,共91页,编辑于2022年,星期一三种主要的类型三种主要的类型n减去一个常量减去一个常量n减去一个常量因子减去一个常量因子n减去的规模是可变的减去的规模是可变的第
2、3页,共91页,编辑于2022年,星期一1.减常量减常量n每次算法迭代时,总是从实例规模中减去一个规模相同的每次算法迭代时,总是从实例规模中减去一个规模相同的常量的值常量的值n见图见图 5.1 P119n例:计算例:计算an的值的值 f(n-1)*a if n1 f(n)=a if n=1n从顶至下从顶至下 递归(利用上面公式)递归(利用上面公式)从底至上从底至上 迭代(迭代(a自乘自乘n-1次)次)第4页,共91页,编辑于2022年,星期一2.减常因子减常因子n每次算法迭代时,总是从实例规模中减每次算法迭代时,总是从实例规模中减去一个相同的常量因子去一个相同的常量因子n见图见图 5.2 P1
3、20n例例 (an/2)2 如果如果n是正偶数是正偶数 an=(a(n-1)/2)2*a 如果如果n是大于是大于1的奇数的奇数 a 如果如果 n=1第5页,共91页,编辑于2022年,星期一3.减可变规模减可变规模n每次算法迭代时,规模减小的模式是不每次算法迭代时,规模减小的模式是不同的同的n例例 欧几里得算法欧几里得算法 基于以下公式:基于以下公式:gcd(m,n)=gcd(n,m mod n)第6页,共91页,编辑于2022年,星期一5.1 插入排序插入排序n插入排序插入排序n思路:假设思路:假设n-1个数排序的问题已经解决,个数排序的问题已经解决,我们只需将第我们只需将第n个数插入到合适
4、的位置即个数插入到合适的位置即可可n关键:查找合适的位置关键:查找合适的位置第7页,共91页,编辑于2022年,星期一迭代过程迭代过程nA0Aj v do Aj+1 Aj j j-1 Aj+1 v第9页,共91页,编辑于2022年,星期一例n 89|45 68 90 29 34 17 45 89|68 90 29 34 17 45 68 89|90 29 34 17 45 68 89 90|29 34 17 29 45 68 89 90|34 17 29 34 45 68 89 90|17 17 29 34 45 68 89 90 第10页,共91页,编辑于2022年,星期一算法效率分析算法效
5、率分析n算法的基本操作是键值比较:算法的基本操作是键值比较:Ajvn比较次数取决于特定的输入比较次数取决于特定的输入nCworst(n)=(n-1)n/2 (n2)(一个严格递减的数组一个严格递减的数组)nCbest(n)=n-1 (n)(一个按照升序排列的数组一个按照升序排列的数组)nCavg(n)n2/4 (n2)第11页,共91页,编辑于2022年,星期一5.2 深度优先查找和广度优先查找深度优先查找和广度优先查找第12页,共91页,编辑于2022年,星期一 许多图的算法要求用一种系统的方式来对图的顶点许多图的算法要求用一种系统的方式来对图的顶点和边进行处理和边进行处理.有两种主要的算法
6、可以进行这种遍有两种主要的算法可以进行这种遍历历:(1)深度优先查找深度优先查找(DFS)(2)广度优先查找广度优先查找(BFS).图问题的一些重要算法图问题的一些重要算法,可以看作是减一技术的具体可以看作是减一技术的具体应用应用.第13页,共91页,编辑于2022年,星期一1.深度优先查找深度优先查找n基本思想基本思想:首先访问指定的起始顶点首先访问指定的起始顶点vi,然后在与然后在与vi邻接的未邻接的未被访问过的顶点中任意选择一个(比如被访问过的顶点中任意选择一个(比如vj)进行访问,进行访问,再在与再在与vj邻接的未被访问过的顶点中任意选择一个邻接的未被访问过的顶点中任意选择一个访问。如
7、此继续,若到达某顶点不存在未被访问过访问。如此继续,若到达某顶点不存在未被访问过的邻接顶点时(即成为死端),则退回到最近被访的邻接顶点时(即成为死端),则退回到最近被访问过的那个顶点;若它还有未被访问过的邻接顶点,问过的那个顶点;若它还有未被访问过的邻接顶点,则选择一个进行访问。重复上述访问过程,直至全则选择一个进行访问。重复上述访问过程,直至全部顶点都被访问为止。部顶点都被访问为止。第14页,共91页,编辑于2022年,星期一使用栈 在第一次访问一个顶点的时候,我在第一次访问一个顶点的时候,我们把该顶点入栈;当她成为一个死端的们把该顶点入栈;当她成为一个死端的时候,我们把它出栈。时候,我们把
8、它出栈。第15页,共91页,编辑于2022年,星期一n深度优先查找森林深度优先查找森林n树向边树向边 从某个顶点出发,遇到一个与它相邻的未访问的顶从某个顶点出发,遇到一个与它相邻的未访问的顶点,连接这样两个顶点的边称为点,连接这样两个顶点的边称为树向边树向边。n回边回边 遍历过程遇到一条指向已访问顶点的边,并且这个顶遍历过程遇到一条指向已访问顶点的边,并且这个顶点不是它的直接前趋(即它在树中的父母),这种边称点不是它的直接前趋(即它在树中的父母),这种边称为回边。为回边。第16页,共91页,编辑于2022年,星期一图5.5DFS遍历 P126fgcadbeijh第17页,共91页,编辑于202
9、2年,星期一算法效率分析算法效率分析n邻接矩阵邻接矩阵 (|V|2)n邻接链表邻接链表(|V|+|E|)第18页,共91页,编辑于2022年,星期一DFS重要应用nDFS生成的两种顶点序列生成的两种顶点序列:第一次访问顶点的次序第一次访问顶点的次序(入栈入栈)和顶点成为死端的次序和顶点成为死端的次序(出栈出栈).n检查图的连通性和无环性检查图的连通性和无环性 (1)从任意节点开始)从任意节点开始DFS遍历,在该算法停下来以后,检查一下是否所有的顶遍历,在该算法停下来以后,检查一下是否所有的顶点都被访问过了。若都被访问过了,则这个图是连通的,否则图是不连通的。点都被访问过了。若都被访问过了,则这
10、个图是连通的,否则图是不连通的。(2)若)若DFS森林不包含回边,则这个图是无环的,否则图是有环的。森林不包含回边,则这个图是无环的,否则图是有环的。n求图的关节点求图的关节点n如果从图中移走一个顶点和所有它附带的边之后如果从图中移走一个顶点和所有它附带的边之后,图被分为若干个不相图被分为若干个不相交的部分交的部分,我们说这样的顶点是图的我们说这样的顶点是图的关节点关节点第19页,共91页,编辑于2022年,星期一2.广度优先查找广度优先查找n基本思想是:首先访问指定的起始顶点基本思想是:首先访问指定的起始顶点vi,然后依然后依次访问与次访问与vi邻接的所有顶点邻接的所有顶点vj,vj2,vj
11、p,再依次分再依次分别访问与别访问与 vj,vj2,vjp相邻接的所有未被访问过的相邻接的所有未被访问过的顶点。重复这一过程,直到所有顶点均被访问为止。顶点。重复这一过程,直到所有顶点均被访问为止。第20页,共91页,编辑于2022年,星期一使用队 该队列先从遍历的初始顶点开始该队列先从遍历的初始顶点开始,将将该顶点标识为已访问该顶点标识为已访问.在每次迭代的时候在每次迭代的时候,该算法找出所有和队头顶点邻接的未访该算法找出所有和队头顶点邻接的未访问顶点问顶点,把它们标记为已访问把它们标记为已访问,再把它们入再把它们入队队,然后然后,将队头顶点从队列中移去将队头顶点从队列中移去.第21页,共9
12、1页,编辑于2022年,星期一n广度优先查找森林广度优先查找森林n树向边树向边 连接未访问顶点的边连接未访问顶点的边n交叉边交叉边 连接已访问顶点的边连接已访问顶点的边第22页,共91页,编辑于2022年,星期一图5.6BFS遍历 P128fgcadbeijh第23页,共91页,编辑于2022年,星期一算法效率分析算法效率分析n邻接矩阵邻接矩阵 (|V|2)n邻接链表邻接链表(|V|+|E|)第24页,共91页,编辑于2022年,星期一BFS的应用的应用n(1)检查图的连通性和无环性检查图的连通性和无环性n做法本质上和做法本质上和DFS是一样的是一样的n(2)求两个给定顶点间边的数量最少的路求
13、两个给定顶点间边的数量最少的路径径.n从两个给定的顶点中的一个开始从两个给定的顶点中的一个开始BFS遍历遍历,一一旦访问到了另一个顶点就结束旦访问到了另一个顶点就结束.从从BFS树的根树的根到第二个顶点间的最简单路径就是我们所求到第二个顶点间的最简单路径就是我们所求的路径的路径.第25页,共91页,编辑于2022年,星期一例:求图5.7中a,g之间的最少边路径fabcghedaefbcgd第26页,共91页,编辑于2022年,星期一3.DFS 和 BFS主要性质DFSBFS数据结构栈队列顶点顺序的种类两种顺序一种顺序边的类型(无向图)树向边和回边树向边和交叉边应用连通性、无环性、关节点连通性、
14、无环性、最少边路径邻接矩阵的效率(|V|2)(|V|2)邻接链表的效率(|V|+|E|)(|V|+|E|)第27页,共91页,编辑于2022年,星期一5.3 拓扑排序拓扑排序第28页,共91页,编辑于2022年,星期一1.有向图有向图n一个对所有的边都指定方向的图一个对所有的边都指定方向的图.第29页,共91页,编辑于2022年,星期一两种有向图的表示方法两种有向图的表示方法 (1)邻接矩阵 0 1 1 0 0 1 0 1 0 0 A=0 0 0 0 0 0 0 1 0 1 (2)邻接表 cabdeabcdebccaec第30页,共91页,编辑于2022年,星期一2.有向图的遍历有向图的遍历n
15、 对于有向图来说,DFS和BFS是主要的遍历算法,但相应森林的结构可能会更复杂.其可能具有的全部类型的边:(1)树向边:连接未访问顶点的边(2)回边:从顶点到祖先的边(3)前向边:从顶点到树中非子女子孙的边 (4)交叉边:不属于前三种的边第31页,共91页,编辑于2022年,星期一例:n树向边:树向边:ab,bc,den回边:回边:ban前向边:前向边:acn交叉边:交叉边:dcabdecacbed第32页,共91页,编辑于2022年,星期一3.无环有向图无环有向图n有向回路有向回路:DFS森林的一条回边的存在意森林的一条回边的存在意味着该有向图具有一个有向的回路味着该有向图具有一个有向的回路
16、.n无环有向图无环有向图:如果一个有向图的如果一个有向图的DFS森林森林没有回边没有回边,该有向图是一个无环有向图该有向图是一个无环有向图.第33页,共91页,编辑于2022年,星期一4.例:课程安排n五门必修课五门必修课C1,C2,C3,C4,C5其中其中,C1和和C2没有任何先决条件没有任何先决条件 修完修完C1和和C2才能修才能修C3 修完修完C3才能修才能修C4 修完修完C3和和C4才能修才能修C5应按照什么顺序来学习这五门课程应按照什么顺序来学习这五门课程.第34页,共91页,编辑于2022年,星期一n该问题可以用图来建模该问题可以用图来建模n该问题转换成为该问题转换成为拓扑排序拓扑
17、排序:按照次序列出有向图的按照次序列出有向图的顶点顶点,使得对于图中每一条边来说使得对于图中每一条边来说,边的起始顶点总是边的起始顶点总是排在边的结束顶点之前排在边的结束顶点之前.C1C2C3C5C4第35页,共91页,编辑于2022年,星期一n注注:要让拓扑排序有解要让拓扑排序有解,问题中的图必须是问题中的图必须是一个无环有向图一个无环有向图.第36页,共91页,编辑于2022年,星期一5.两种算法两种算法n(1)深度优先查找的一个简单应用深度优先查找的一个简单应用 n(2)基于减治技术的一个直接实现基于减治技术的一个直接实现第37页,共91页,编辑于2022年,星期一(1)深度优先查找的一
18、个简单应用深度优先查找的一个简单应用n执行一次执行一次DFS,并记住顶点变成死端并记住顶点变成死端(即退即退出遍历栈出遍历栈)的顺序的顺序.将该次序反过来就得到将该次序反过来就得到了拓扑排序的一个解了拓扑排序的一个解.n例见图例见图5.10 C5 1 出栈次序 C4 2 C5,C4,C3,C1,C2 C3 3 拓扑排序表 C1 4 C2 5 C2,C1,C3,C4,C5 C1C2C3C5C4第38页,共91页,编辑于2022年,星期一(2)基于减治技术的一个直接实现基于减治技术的一个直接实现n不断地做这样一件事不断地做这样一件事,在余下的有向图中求出一个在余下的有向图中求出一个源源,它是一个没
19、有输入边的顶点它是一个没有输入边的顶点,然后把它和所有从它然后把它和所有从它出发的边都删除出发的边都删除.(如果有多个这样的源如果有多个这样的源,可任意选择可任意选择一个一个.如果这样的源点不存在如果这样的源点不存在,算法停止算法停止.)顶点被删除顶点被删除的次序就是拓扑排序问题的一个解的次序就是拓扑排序问题的一个解.n例:见图例:见图5.11 P133n注意注意:拓扑排序问题可能会有若干个不同的可选解:拓扑排序问题可能会有若干个不同的可选解第39页,共91页,编辑于2022年,星期一5.4 生成组合对象的算法生成组合对象的算法第40页,共91页,编辑于2022年,星期一1.生成排列生成排列n
20、问题描述问题描述 假设需要对元素进行排列的集合是从假设需要对元素进行排列的集合是从1到到n的简单整的简单整数集合,使其更一般性,可以把其解释为数集合,使其更一般性,可以把其解释为n个元素集合个元素集合a1,an中元素的下标,求所有的排中元素的下标,求所有的排列。列。第41页,共91页,编辑于2022年,星期一三种主要的方法三种主要的方法n最小变化算法(利用减一技术)nJohnson-Trotter算法(n值较小时)n按字典序排列算法第42页,共91页,编辑于2022年,星期一(1)最小变化算法n思路:假设已经解决了规模为思路:假设已经解决了规模为n-1的排列,共有的排列,共有(n-1)!个排列
21、,我们只需把个排列,我们只需把n插入到插入到n-1个元素的每一种个元素的每一种排列中的排列中的n个可能位置,即可解决问题,共个可能位置,即可解决问题,共n(n-1)!=n!个排列。个排列。n把把n插入的方法:一开始从右到左把插入的方法:一开始从右到左把n插入到插入到12(n-1)的位置中,然后每处理一个)的位置中,然后每处理一个新排列时,再调换方向。新排列时,再调换方向。n见图见图5.12第43页,共91页,编辑于2022年,星期一(2)Johnson-Trotter算法n思路:我们给一个排列中的每个元素思路:我们给一个排列中的每个元素k赋予一个方赋予一个方向,若元素向,若元素k的箭头指向一个
22、相邻的较小元素,则的箭头指向一个相邻的较小元素,则k在这个以箭头标记的排列中是在这个以箭头标记的排列中是移动的移动的。n算法和例题见书算法和例题见书P135第44页,共91页,编辑于2022年,星期一(3)字典序)字典序n思路:从右到左扫描一个当前的排列,寻找第一对思路:从右到左扫描一个当前的排列,寻找第一对连续的元素连续的元素ai和和ai+1,并且,并且aian),然后在尾部寻找大于,然后在尾部寻找大于ai的最的最小的数字,并将其放在位置小的数字,并将其放在位置i上;最后将上;最后将ai和尾部剩下的元素按升序填充到和尾部剩下的元素按升序填充到i+1到到n的位置上即可。的位置上即可。n计算计算
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 第五 幻灯片
限制150内