OSP中最短路径算法.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
OSPF 中的最短路径算法 中心 旭盛 生活中的网 拓扑,可以抽象成由 点(路由器)和 (路由器之 的 路)构成 的有向 通 , 路的代价可以抽象成 的 函数。 之所以称 有向 , 是因 同一条 路( )不同方向的 可能不一 。 我 知道, 于有向 通 , 以任意一个 点 起点, 利用最短路径算法可以 算出到 其他 点的最短路径。 那么, 于能抽象成有向 通 的网 拓扑来 , 也可以利用最短路 径算法先 算出以任意一台路由器 起点, 到达其他路由器的最短路径, 然后根据各路由器的网 接情况可以得到到各个网 的路由路径。 OSPF中用到的 Dijkstra 算法和 RIP中用到的距离向量算法一 ,都是相当 典的最短路径算法。本文将 Dijkstra 算法 行系 的描述,并 出一个 的 明。 1 Dijkstra 算法介绍 在数学上, 以某个 点 起点, 算到其他 点的最短路径的算法,称 “ 源最短路 径” 算法。求“ 源最短路径”的 在数学上可以精确描述如下: “ 源最短路径” : 已知一个有 n个 点 (V0..n) 构成的有向 通 G=( V , E), 以及 中 的 函数 C (E) ,其中 V 代表 点集合, E表示所有 的集合, 并假 所有 非 , 求由 G中指定 点 V0 到其他各个 点的最短路径。 Dijkstra 算法是很 典的求解上述 的算法,其基本想法是 一种最短路径 的构 造方法,按非降次序逐条构造从 V0 到各个 点的最短路径,第一步找到和 V0 相距最短的 点以及到 个 点的路径,第二步找到和 V0 相距次短的 点以及到 个 点的路径,如此 反复,最后找到 V0 到所有 点的最短路径,构造出整棵最短路径 。 上述构造方法的一个直 考 是:和 V0 相距最短的 点 在和 V0 直接相 的 点 中,和 V0 相距次短的 点要么在和 V0 直接相 的 点中,要么在和 些相 点相 的 点中,如此逐步 散考 , 就可以找到和 V0 相距最短、次短、 ?? .第 n短的 点以及 的路径, 而且因 是 通 , 最后肯定所有 点都能全部考 到, 也就能完成整棵最短路 径 的构造。 事 上,上述直 考 是 的, Dijkstra 算法是 上述 程的一个提 和 化:和 V0 相 1 / 8 距最短的节点是和  V0 直接相连的节点没错;相距次短的节点范围可以缩小为,和  V0 直接相 邻的节点, 加上跟刚选中的最短节点直接相邻的节点;  相距第三短的节点的范围可以类推得 到,即在上一步考察的节点的基础上,加上和次短节点直接相邻的节点。如此逐步构造,可 以按非降次序找到到所有节点的最短路径。 为了从数学上精确描述上述构造过程,引入了集合的概念对节点和路径进行分类。 我们把节点分成两个集合: A:已经选入最短路径树的节点的集合。 B:剩余的其他节点的集合。 对于路径,我们分成三个集合: :已经选入最短路径树的路径的集合 :候选路径集合:下一条加入最短路径树的路径将从这个集合中选入。 :剩余的其他路径的集合(被废弃的路径或者还未考虑的路径)。 为了更好的理解,有必要对这里的路径定义进行一下强调:路径是指以 V0 为起点,其 他节点为终点的由一条或多条边组成的一个有序集。 边,可以理解为路径中的一段, 只有到 和V0 直接相邻的节点的路径才直接对应一条边。从 V0 到所有节点,都可能存在一条或多条 路径,非最短路径在计算过程中将会被废弃,放入集合 III 。 从前面的描述中可以明显看出, Dijkstra 算法是一个递归构造过程,因为任何递归都必 须有明确的初始状态,所以我们有必要先得到上述 Dijkstra 算法中定义的集合的初始值: 以V0 为起点计算最短路径的话,初始状态时显然有且只有 V0 在集合 A中,所以集 合A 的初始值为 V0 。集合 B的初始值为剩余节点。 前面提到过,下一个加入集合 A 的节点,一定是和 V0 直接有边相连的节点,因此, 加入最短路径树的第一条路径也必然在这些和 V0 直接相连的边所代表的路径中产 生,所以集合 II 的初始值就是和 V0 直接相连的边构成的路径。另外, 初始状态最短 路径树为空,所以集合 I 的初始值为空。集合 I、 II 明确了的话,集合 III 自然明确。 下面我们开始展开递归构造最短路径树的过程: 第一步:从集合 II 中选择一条最短的路径,放入最短路径树,相应的,这条路径的 终点对应的节点(这里记为 X)应该从集合 B移入集合 A 。 第二步:考察所有从 X 出发的边的终点,考虑其中不属于集合 A的节点,这里记为 Y ,计算从 V0 出发经 X 到达 Y 的路径值,计算方法为:最短路径树中 V0 到节

文档评论(0)

182****5045 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档