图论及其算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《图论及其算法》
--最短路问题
学院:通信学院
姓名:周旋
学号: S110131133 指导老师:陈六新
摘要
图论是数学的一个分支,它以图为研究对象。图论中的图是由若干给定的点及连接两点的线所构成的图形,这些图形通常用来描述某些事物之间的特定关系,用点代表事物,用连接两点的线表示相应两个事物间具有的关系。通过对《图论及其应用》中最短路问题的深入学习,本文利用Dijkstra算法来解决日常生活中寻找最短路的问题。同时也是对本学期学习知识的巩固。
关键词:最短路径 Dijkstra算法迭代
Abstract
Graph theory is a branch of mathematics, it studies the object of picture. Graph theory graph is given by the number of points and lines connecting the two points of the graphic form. These graphics are often used to describe a specific relationship between certain things. And with the point on behalf of things, with the line connecting the two points that have a corresponding relationship between two things. Through the "Graph Theory and Its Applications," in-depth study of the shortest path problem.
In this paper, we use The Dijkstra's algorithm not only to solve everyday life to find the shortest path problem, but also for the consolidation of the semester to learn the knowledge.
Keyword: shortest path Dijkstra's algorithm Iteration
引言
边上有数的图成为加权图(weighted graph)。若边e标记数k,称边e的权(weight)为k。在加权图中,链(迹、路)的长度为链(迹、路)上所有边的权值的和。在加权图中,我们经常需要找出两个指定点之间的最短路(如有最小长度的路),通常称其为最短路问题(shortest path problem),解决最短路问题存在几个不同的算法。我们要介绍的是迪克斯拉屈算法,这是荷兰计算机科学教授Edsger W.Dijkstra(1930- )在1959年发现的一个算法。他在1972年获得美国计算机协会授予的图灵奖,这是计算机科学中最具声望的奖项之一。
第一章迪克斯屈拉算法
1.1算法介绍
Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。注意该算法要求图中不存在负权边。
Procedure Dijkstra(G:所有权都为正数的加权连通简单图)
{G带有定点a=v0, v1 ……,v n=z和权w(v i , v j),若{ v i, v j }不是G中的边,则w(v i, v j)=∞}
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的最短路的长度}
1.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 迪克斯屈拉算法使用O (n2)次运算(加法和比较)来求出n 阶连通简单无向加权图中两个顶点之间最短路的长度求加权无向图中最短路的Dijkstra 算法可以推广到求加权有向图中最短有向路。
定理3 设有向图G 中不含长度非正的有向圈,并且从点1到其余各点都有有限长的有向路。
定理4 设Sj 是加权有向图G 中自结点1到结点j 的最短有向路的长度,并且对所有的j=1,2,3,……,n ,Sj 为有限值。若图G 中除结点1外的其余各点能重新编写成如下的序号2,3,……,n 使得对所有i S S £且w(j,i) 或者i S S ³且w 定理5 设G= Dijkstra 算法求出了图中一个特定顶点到其他各定点的最短路,可以利用Dijkstra 算法解决实际生活中的一些问题。