基于Dijkstra算法的路由选择.docxVIP

  • 17
  • 0
  • 约4.01千字
  • 约 4页
  • 2021-10-12 发布于湖南
  • 举报
基于Dijkstra算法的路由选择 基于Dijkstra算法的路由选择 姓名: 班级: 学号: 摘要:本文阐述了最短路径问题及其算法,采用迪克斯屈拉算法解决最短路由问题。最短路由的问题利用了图的描述,并把算法用C++语言来实现,这就很好地将所学知识和现实生活结合起来。 关键词:最短路径 Dijkstra算法 C++ 随着现代通信技术的不断发展,通信网的范围也逐渐扩大,通信网已成为人们生活中不可或缺的一部分了。而随着人们之间通信次数的增加,使的通信网的通信量也随之大量增加。这给通信网带了沉重的负担。如何在现有通信网的基础上提高通信效率,网络利用率和网络可靠性,以满足人们日益增长的对网络通信能力的需求已成为对通信网研究的主要内容。迪克斯屈拉算法是最适合解决网络拓扑中两节点间的最短通信距离的问题的方法之一。本文就如何利用迪克斯屈拉算法解决网络中点到点通信的最短距离问题做了说明,以此提高通信网的通信效率。 一、迪克斯屈拉算法 1、算法介绍 迪克斯屈拉算法是由荷兰计算机科学家迪克斯屈拉(Dijkstra)于1959年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题。 其基本原理是:每次新扩展一个距离最短的点,更新与其相邻的点的距离。当所有边权都为正时,由于不会存在一个距离更短的没扩展过的点,所以这个点的距离永远不会再被改变,因而保证了算法的正确性。不过根据这个原理,用Dijkstra求最短路的图不能有负权边,因为扩展到负权边的时候会产生更短的距离,有可能就破坏了已经更新的点距离不会改变的性质。 Dijkstra(迪克斯屈拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法,该算法要求图中不存在负权边。 Procedure Dijkstra(G:所有权都为正数的加权连通简单图) {G带有定点a=v0, v1 ……,vn=z和权w(vi , vj),若{ vi, vj }不是G中的边,则w(vi, vj)=∞} For i:=1 to n L(vi):=∞ L(a): =0 S:=φ {初始化标记,a的标记为0,其余结点标记为∞,S是空集} While z错误!未找到引用源。S begin u:=不属于S的L(u)最小的一个顶点 S:=S错误!未找到引用源。{u} for 所有不属于S的顶点v if L(u)+w(u,v) L(v) then L(v):=L(u)+w(u,v) {这样就给S中添加带最小标记的顶点并且更新不在S中的顶点标记} end {L(z)=从a到z的最短路的长度} 2、根据Dijkstra算法给出的定理 定理1 迪克斯屈拉算法求出连通简单无向加权图中的两个顶点之间最短路的长度。 迪克斯屈拉算法通过一步一步的迭代求出最短路径,假设在第k次迭代中。 在s中的顶点v的标记L(v)是从a到这个顶点v的最短路的长度。不在s中的顶点的标记是(除了这个顶点自身之外)只经过s中顶点的从a到这个顶点的最短路的长度。设u是第k次迭代结束时带最小标记的不在s中的顶点(若该顶点不唯一,可采用带最小标记的任意顶点)。在第k+1次迭代中,u是添加到s中的顶点,则在第k+1次迭代中,u的标记必须是a到u的最短路的长度。否则,k次迭代后,从结点a到某个结点l的路,其路得长度小于Lk(v)。 2 定理2 迪克斯屈拉算法使用O(n)次运算(加法和比较)来求出n阶连通简单无向加权图中两个顶点之间最短路的长度,求加权无向图中最短路的Dijkstra算法可以推广到求加权有向图中最短有向路。 定理3 设有向图G中不含长度非正的有向圈,并且从点1到其余各点都有有限长的有向路,那么G中结点1到其余各点j的最短有向路长度Sj有唯一有限解{Sj}。 定理4 设Sj是加权有向图G中自结点1到结点j的最短有向路的长度,并且对所有的j=1,2,3,……,n,Sj为有限值。若图G中除结点1外的其余各点能重新编写成如下的序号2,3,……,n使得对所有iSi≤Sj 错误!未找到引用源。且w≥0 或者SiSj 且 w=错误!未找到引用源。,即 错误!未找到引用源。E(G),则 错误!未找到引用源。 定理5 设G=是一个边权为正值的有向图,其中V={1,2,3……,n}。则在G中,任意一条最短有向路得长都大于它的真子有向路的长。 Dijkstra算法求出了图中一个特定顶点到其他各定点的最

文档评论(0)

1亿VIP精品文档

相关文档