- 1、本文档共20页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
“數据结构”课程中Floyd算法教学方法研究
“数据结构”课程中Floyd算法教学方法研究
摘要:Floyd算法是“数据结构”课程里的一个经典算法,但其原理却难以掌握,影响到该算法的教学效果。本文从求最短路径的基本思想出发,对Floyd算法的原理进行了剖析,并给出了该算法的正确性证明,有助于学生理解和掌握该算法。br 关键词br本文来自:计算机毕业网 :最短路径;Floyd;教学方法;数据结构br br 1引言br br 求图中两顶点之间的最短路径算法是“数据结构”课程在图论章节里面的重点内容,其在通信网络、电力网络及交通网络等地理信息系统中有着广泛的应用。解决最短路径问题有两个经典的算法,即Dijkstra(迪杰斯特拉)算法和Floyd(弗洛伊德)算法。前者一次可以求出图中一个给定顶点到达其他所有顶点之间的最短路径,时间复杂度为O(n2);而Floyd算法则可以一次求出图中所有任意两个顶点之间的最短路径,时间复杂度为O(n3)。br 虽然可以将图中每个顶点作为起始顶点,逐一调用Dijkstra算法来完成Floyd算法同样的功能,时间复杂度也是O(n3),但Floyd算法从形式上更简洁一些。遗憾的是,虽然许多文献资料对Floyd算法的思想和实现均有论述,然而依然难以理解,影响到了该算法的教学和学习效果。本文从求最短路径的基本原理出发,给出了该算法思路的正确性证明,有助于学生理解和掌握该算法。br br 2Floyd算法的基本思想br br 对于任意给定的图 ,V为顶点集合,E为弧的集合。设该图有 个顶点,不失一般性,令其分别为 。Floyd算法不断的在图中任意一对顶点Vi与Vj( )之间的路径中加入一个新顶点Vk(即k从1变化到n),并计算出只经过迄今为止所引入的顶点的所有可能路径的最短值。依次类推,直到包含了图中所有顶点为止。Floyd算法的步骤如下:br Step1:定义并初始化辅助矩阵 和 ,矩阵元素 与 分别用来保存顶点Vi与Vj之间的最短距离和最短路径(由于最短路径的源点Vi与终点Vj都是已知的,故 只保存路径中途径其它顶点的部分)。矩阵 与 的初始值分别记录所有Vi与Vj之间直接到达(中间不途径其它顶点)时的最短距离与最短路径。当 时,若两个顶点之间没有弧相连,将 置为∞,否则将 置为弧Vi,Vj的权值;当 时,使 。令 (没有途径其它顶点,故为空)。 br Step2:定义变量k,并将其初始值置为1;br br 从上面给出Floyd算法步骤可以看出,该算法过程极为简捷,然而,为何经过这样的运算得到的就是Vi与Vj之间的最短距离,下面我们给出该算法的正确性证明。br br 3Floyd算法的正确性证明br br 路径即在图上从一个顶点到达另外一个顶点所经过的顶点序列,欲求出图中任意两个顶点Vi到Vj( )之间的最短距离,最朴素的想法就是求出Vi到Vj之间所有可能存在的简单路径(最短路径必然是简单路径,故本文中只考虑简单路径),从中选取一个最短的即可。Vi到Vj所有可能的简单路径如表1所示。若直接按照上述顺序进行计算,则计算量极其巨大,Floyd算法实际上采用最短路径累积的方法,大大降低了计算的复杂度。br br 在证明里,我们使用符号 表示Vi与Vj之间途径顶点 时所有可能简单路径的集合以及 ,其中 表示Vi与Vj直接到达。例如 表示 。下面给出Floyd算法的正确性证明:br 首先我们对Vi与Vj之间的路径构成采用结构归纳法[4]证明将顶点Vk引入到Vi与Vj之间并计算最短路径时,已考虑了途径顶点V1,…,Vk以及直接到达的所有可能的情况,即已经考虑了途径集合 中所有可能的路径。br 归纳基础:在算法的Step1里,对辅助矩阵 与 进行初始化,分别记录所有Vi与Vj之间直接到达(途径顶点的集合为空集 ,即经过的路径集合为 )时的最短距离与最短路径,此时考虑的途径路径的集合为 ,显然直接到达时成立(图1)。br br 图1直接到达br 归纳步骤:假设引入顶点Vk( ,当 即为归纳基础)时命题成立,此时 与 保存的是顶点Vi与Vj之间途径集合 时最短路径和最短距离。br 当引入顶点 时,此时从顶点Vi经过路径集合 到达顶点Vj有两种方案(如图2所示):1)从Vi经过路径集合 直接到达顶点Vj;2)从Vi途径路径集合 到达顶点Vk+1,再从顶点Vk+1途径路径集合 到达顶点Vj。根据算法Step3的运算规则,如果方案2)的距离更短,即 ,则同时更新 与 ,即保存经过顶点Vk+1的最短距离和路径;否则保持不变。此时已经考虑的路径集合为br ,br 为了便于下面的说明,令其为路径集合A。下面需要证明路径集合A包含 。br 对于 中的路径 ,只
文档评论(0)