最短路径问题的概述

来源:互联网 发布:机器人单片机 编辑:程序博客网 时间:2024/06/16 05:04

最短路径问题,通俗地说,就是寻找一个图(有向图或无向图)两点之间的最短路径。下面我们讨论的都是带权图的最短路径问题,即找出两点之间总权值最小的路径的权值;因此,我们可以把最短路径理解为最小(权)路径。

听起来可能会有些绕口,我们不妨举个实例。一个人若是有急事要开车从一个城市到另一个城市,而我们已知地图上所有的路径及它们的权值(这里的路径权值可以理解为行驶速度、路程长度、费用等综合值;亦即是说,权可以理解为路径的代价),那么我们怎么知道从这个城市行驶到另一个城市的最小总权值呢?

以上一个问题就是一种最短路问题,它属于单一起点单一终点的最短路径问题。除此之外,还有许多最短路径问题,大致可以分为以下几种:

1、求图中一点到其他所有点的最短路径,称为单源最短路问题,相关算法有Dijkstra、Bellman-Ford、SPFA;

2、已知起点、终点求最短路径,它可以转换为1类问题,也就是说求出起点到其它所有点的最短路径,从而求出起点到终点的最短路径,目前来说这种方法求解效率最佳;

3、已知终点,求其他所有点到终点的最短路径,它可以反向转换为1类问题求解;

4、给出多对任意起点终点求最短路径,称为多源最短路问题,它可以转化为若干个1类问题求解,但也有其它简便的算法,如Floyed。

下面定义一些函数与集合,之后介绍的算法都如其含义:

设G=(V,E),其中V是点集,E是点对集(边集),|V|表示V的元素个数即顶点数,ω(u,v)表示点u到点v的边权(若两点有边相连);特别地,当G是无向图时,ω(u,v)=ω(v,u)。为了区分两点间有边或是无边,一般我们会把ω(u,v)初始为特殊值如0,-1或+∞,再在输入图时给有边的两点赋值为它们的边权。我们再设δ(I,j)表示点i到点j的最小总边权(即从i到j,经过的最小边权之和),对于上面的问题,我们可以这样定义:

1、求δ(I,j),其中i是起点,j是终点且j=1,2,..,|V|;

2、求δ(I,j),其中i是起点,j是终点;

3、求δ(I,j),其中i是起点,j是终点且i=1,2,..,|V|;

4、求δ(I,j),其中i是起点,j是终点且i=1,2,..,|V|,j=1,2,..,|V|;

另外,还有一些特殊概念的定义:

1、负权边

负权边指的是图中边权为负数的边,它对一些算法如dijkstra的决策有影响,因此要根据实际问题选择对应算法。

2、负环

最短路径问题有无解的情况,即图中存在负环时。负环又称负权回路,即从一个点u出发,存在一条路径使得δ(u,u)<0(即走过一条路径回到自己时经过的总边权小于0)。

证明:因为图存在负环,所以必定可以找到一条路径使得δ(u,u)<0,那么只要无限地走这个负环,它的总权值总是更优,即趋于越来越小直到-∞。因此存在负环的图最短路径问题无解。

特别地,对于一个无向图,显然只要存在负权边即存在负环。


了解这些概念之后,我们可以去学习一下最短路的相关算法。


原创粉丝点击