本节内容来源于Network Flows Theory, Algorithms, and Applications4.1节-4.4节,主要介绍最短路径问题(shortest path problems)和最短路径树(trees of shortest path)。
作为网络流问题中最基础、最核心的问题之一,最短路径问题经常作为其它诸多问题的子问题,对这一问题的研究将会引入许多关键的想法。
1. 符号定义
我们考虑一个有向网络G=(N,A),每条弧arc(i,j)∈A对应一个弧长(arc length)或者弧成本(arc cost),这个网络还有一个源节点(source)。最短路径问题就是确定从一个源节点s到任意一个非源节点i的最短有向路径长度;也可以看作发送1个单位(1 unit)的流,使得总花费最少。由此产生了上述线性规划公式。
我们做4个假设:
1)所有的弧长都是整数;
2)该网络包含从源s到其它任何节点的路径;
3)该网络不包含负环(如负长度的有向环);
4)该网络是有向的。
实际上,对于假设1,如果该网络中的弧长是有理数,都可以通过乘以某一个数变成整数;如果是无理数,则需要通过变换才能储存在计算机中。对于假设2,如果该网络不包含从源s到某一节点的某一条路径,则可以通过增加一个虚拟弧(s,i),赋之以适当的成本,来满足该假设。对于假设3,如果网络不满足该假设,则将会出现无界解,因为我们可以沿该路发送任意多的流。对于假设4,如果网络是无向的,且所有弧长是非负的,可以通过2.4中讲述的方法转换为有向流。
2. 最短路径问题的分类
1)当弧长非负时,找到从一个节点到其它所有节点的最短路径
2)当弧长任意时,找到从一个节点到其它所有节点的最短路径
3)找到从任意节点到其它任意节点的最短路径
4)各种各样的扩展应用
其中1)和2)被称为单源最短路径问题(single-source shortest path problem),3)被称为所有对的最短路径问题(all-pairs shortest path problem)。
3. 两种算法
1)标签设置算法(label-setting algorithms)
2)标签校正算法(label-correcting algorithms)
这两种算法都是迭代的,每一步会给节点分配一个距离标签,即最短距离的估计值(上界,因为后续可能有更短路径)。标签设置算法在每一步设置永久(permanent)标签,而标签校正算法则设置的标签都是临时的(temporary)。标签设置算法适用于定义在无环网络中具有任意弧长的最短路径问题以及具有非负弧长的最短路径问题;而标签校正算法应用的范围更广,可以解决任意类型的问题,包括负弧长。本章中(第4章)我们主要研究标签设置算法。
4. 最短路径树(trees of shortest path)
在最短路径问题中,我们想要考虑从源节点s到其它n-1个节点的最短路径。我们存储这n-1个最短路径只需要(n-1)存储空间。因为我们总可以找到一棵最短路径树,使得源节点s到每一个节点的最短路径都是这棵最短路径树上标注的唯一路径。最短路径树依赖于以下属性:
1)如果一条路径s=i1-i2-i3-...-ih=k是一条从s到k的最短路径,那么对于任意的q=2,3,...,h-1,子路径s=i1-i2-...-iq就是从s到节点q的最短路径。
2)向量d代表最短路径距离。那么一个从源节点s到k的有向路径P是最短路径当且仅当对于任意弧(i,j)∈P都有d(j)=d(i)+cij。
最短路径树实际上是一种宽度优先搜索树。最短路径算法在无环网络中解决这一问题的时间是O(m)。