最短路径问题的几个算法.docx
《最短路径问题的几个算法.docx》由会员分享,可在线阅读,更多相关《最短路径问题的几个算法.docx(15页珍藏版)》请在三一办公上搜索。
1、最短路径问题的几个算法 最短路径问题) r+ g v% 5 p) W) J 最短路径问题是一个非常能联系实际的问题,某人想从城市A出发游览各 城市一遍,而所用费用最少。试编程序输出结果。 解这类题时同学们往往不得要领,不少同学采用穷举法把所有可能的情况全部列出,再找出其中最短的那条路径;或是采用递归或深度搜索,找出所有路径,再找出最短的那条。这两种方法可见都是费时非常多的解法,如果城市数目多的话则很可能要超时了。 实际上我们知道,递归、深度搜索等算法一般用于求所有解问题,而这几种算法对于求最短路径这类最优解问题显然是不合适的,以下介绍的几种算法就要优越很多。 : V7 ) v g3 首先,对于
2、这类图我们都应该先建立一个邻接矩阵来存放任意两点间的距离数据,以便在程序中方便调用,如下: const dis:array1.5,1.5 of integer =( ( 0, 7, 3,10,15), 0 u; Y0 O i2 L/ i ( 7, 0, 5,13,12), ( 3, 5, 0, 5,10), 8 I- f E: D1 J (10,13, 5, 0,11), (15,12,10,11, 0); 以下是几种解法: 3 G3 c# u e- I7 y 一、 宽度优先搜索 % O9 O4 G3 W, L9 l3 Q9 O 宽度优先搜索并不是一种很优秀的算法,只里只是简单介绍一下它的算法
3、。 具体方法是: 2 c d6 Y) / t9 h3 c/ i 1、 从A点开始依次展开得到AB、AC、AD、AE四个新结点,当然每个新结点要记录下其距离; 2、 再次以AB展开得到ABC、ABD、ABE三个新结点,而由AC结点可展开得到ACB、ACD、ACE三个新结点,自然AD可以展开得到ADB、ADC、ADE,AE可以展开得到AEB、AEC、AED等新结点,对于每个结点也须记录下其距离; 5 n. d+ B5 7 A; v 3、 再把第三层结点全部展开,得到所有的第四层结点:ABCD、ABCE、ABDC、ABDE、BEC、ABEDAEDB、AEDC,每个结点也需记录下其距离; 4、 再把第
4、四层结点全部展开,得到所有的第五层结点:ABCDE、ABCED、AE 1 5 2 0 r: I V* h DBC、AEDCB,每个结点也需记录下其距离; 5、 到此,所有可能的结点均已展开,而第五层结点中最小的那个就是题目的解了。 由上可见,这种算法也是把所有的可能路径都列出来再找最短的那条,显而易见这也是一种很费时的算法。 ) p. ?+ X5 c: B* 5 u4 j7 O 二、 A算法 A算法是在宽度优先搜索算法的基础上,每次并不是把所有可展的结点展开,而是对所有没有展开的结点,利用一个自己确定的估价函数对所有没展开的结点进行估价,从而找出最应该被展开的结点,而把该结点展开,直到找到目标
5、结点为止。 2 _0 Z. d; G* A( E+ & W9 V* 这种算法最关键的问题就是如何确定估价函数,估价函数越准则越快找到答案。A算法实现起来并不难,只不过难在找准估价函数,大家可以自已找资料看看。 三、等代价搜索法 0 J3 J$ W( z% c/ m5 ?: l k) ? K 等代价搜索法也是基于宽度优先搜索上进行了部分优化的一种算法,它与A算法的相似之处都是每次只展开某一个结点,不同之处在于:它不需要去另找专门的估价函数,而是以该结点到A点的距离作为估价值,也就是说,等代价搜索法是A算法的一种简化版本。它的大体思路是: 1、 从A点开始依次展开得到AB、AC、AD、AE四个新结
6、点,把第一层结点A标记为已展开,并且每个新结点要记录下其距离; 0 z G0 p3 V( K X 2、 把未展开过的AB、AC、AD、AE四个结点中距离最小的一个展开,即展开AC结点,得到ACB、ACD、ACE三个结点,并把结点AC标记为已展开; 3、 再从未展开的所有结点中找出距离最小的一个展开,即展开AB结点,得到ABC、ABD、ABE三个结点,并把结点AB标记为已展开; 4、 再次从未展开的所有结点中找出距离最小的一个展开,即展开ACB结点; 5、 每次展开所有未展开的结点中距离最小的那个结点,直到展开的新结点中出现目标情况时,即得到了结果。 由上可见,A算法和等代价搜索法并没有象宽度优
7、先搜索一样展开所有结点,只是根据某一原则每次展开距离A点最近的那个结点,反复下去即可最终得到答案。虽然中途有时也展开了一些并不是答案的结点,但这种展开并不是大规模的,不是全部展开,因而耗时要比宽度优先搜索小得多。 U8 9 Y5 5 b4 U 例2、题目基本同例1、但只要求求A到E点的最短路径。 3 8 u6 7 0 _# _ 题目一改,问题的关键变了,所要求的结果并不是要求每个点都要走一遍,而是不管走哪几个点,只要距离最短即可。再用宽度优先搜索已经没有什么意义了,那么等代价搜索能不能再用在这题上呢? 答案是肯定的,但到底搜索到什么时候才能得到答案呢?这可是个很荆手的问题。 ! i3 + n,
8、 w, m. _0 I+ d3 y, 8 b/ z 是不是搜索到一个结点是以E结束时就停止呢?显然不对。 那么是不是要把所有以E为结束的结点全部搜索出来呢?这简直就是宽度优先搜索了,显然不对。 ( q2 w3 L0 # d4 2 6 s2 M 实际上,应该是搜索到:当我们确定将要展开的某个结点的最后一个字母是E时,这个结点就是我们所要求的答案! 9 ; x: j% |) V8 那么,除了等代价搜索外,有没有其它办法了呢?下面就介绍求最短路径问题的第四种算法: ( Y0 H- h# 5 G 四、Warshall算法 该算法的中心思想是:任意两点i,j间的最短距离会等于从i点出发到达j点的以任一点
9、为中转点的所有可能的方案中,距离最短的一个。即: Dij=min(Dij,Dik+Dkj,),1=k0,求生成树 T = ,H E,使生成树所有边权最小,此生成树称为最小生成树 基本回路 将属于生成树 T 中的边称为树枝,树枝数为n -1,不属于生成树的边称为连枝将任一连枝加到生成树上后都会形成一条回路把这种回路称为基本回路,记为cf(e)。 基本回路是由 T 中的树枝和一条连枝构成的回路 基本割集 设无向图 G 的割集 S ,若 S 中仅包含有T中的一条树枝,则称此割集为基本割集,记为S(e)。 基本割集是集合中的元素只有一条是树枝,其他的为连枝 等长变换 设T=(V,H),为一棵生成树,e
10、 H, e E, e H,当且仅当ecf(e),也就是说e S(e),则T=Te, e也是一棵生成树。当w(e)=w(e)时,这棵生成树叫做等长变换。 等长变换就是从基本回路中选取与树枝等权边,并与此树枝对换后形成的生成树 根据以上定理得出2个结论:若在某个回路C 中有一条唯一的最长边,则任何一棵最小生成树都不含这条边;若在某个边 e 的割集中有一条唯一最短边,则每棵生成树中都必须含这条边由上面结论可以得到唯一性:若图 G 中的生成树T = 是唯一的一棵最小生成树,当且仅当任意一连枝e H, e E 都是其基本回路中唯一最长边,任意一条树边 e 都是其基本割集S(e)中的唯一最短边 由此在最小
11、生成树不唯一的情况下,就可以得到一个约化的原则:假设已得到一棵最小生成树T0。对于T0中每一条树边e H,若 e 是基本割集S(e)中唯一的最短边,则每棵最小生成树中一定包含此边,则把此边取为固定边,并将此边的基本割集去掉。 对于每条连枝e H, e E,若它是基本回路cf(e)中唯一最长边,则每棵生成树中都不会包含此条连枝,则将其消去 约化原则是在最小生成树不唯一的情况下,从已经得到的一棵最小生成树T0中选出其树枝是基本割集中唯一的最短边,则每一棵最小生成树中必含有此边,就取为固定边在基本回路中若有一条唯一最长边,则每棵最小生成树都不含此条边,将其去掉通过这样约化后再求最小生成树,计算量会大
12、大下降 1.2 全部最小生成树 设T0是已求得的一棵最小生成树,在最小生成树不唯一的情况下,存在其他最小生成树 T,称T-T0得到的边集的长度为距离。 为了简单起见,设最小生成树T0的边集为 e1 , e2, e3 en-1,对于T0的任何边集Hk= e1 , e2, e3 ek-1,则每棵最小生成树 T 与T0的距离是一定的,或为1,或为2 ,或为 n -1这样我们就可以按所有的最小生成树与T0的距离来分类。 记Ti1,i2,ik= e1 , e2, e3 ek-1为所有的T0Hk即不含Hk的最小生成树的集合对于其它的最小生成树TTi1,i2,ik而言,Hk=T0T为换出边,Hk=TT0为入
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 路径 问题 几个 算法
链接地址:https://www.31ppt.com/p-3579150.html