问题描述
最短路径问题就是在加权图指定了起点和终点的前提下,寻找从起点到终点的路径中权重总和最小的那条路径。
算法简介
贝尔曼 - 福特(Bellman-Ford / Moore-Bellman-Ford )算法由Richard Bellman和Lester Ford Jr.创立,求解单源最短路径问题的一种算法。 它的原理是对图进行 次松弛操作,得到所有可能的最短路径。
Bellman-Ford算法的时间复杂度为
其中是顶点的数量,是图中边的数量。
它的效率低于Dijkstra算法,后者的时间复杂度为或,有一个优先级队列,以贪心法选取未被处理的具有最小权值的节点,然后对其的出边进行松弛操作
但Bellman-Ford可以处理更广泛的图形类型,比如边的权值可以为负数。
该算法被广泛用于各种应用中,如数据中心网络的路由、提高智能微电网(smart microgrids)的性能等.
什么是松弛操作
算法通过对图中的所有边进行多次迭代,逐步更新最短路径权重。
在每次迭代中,算法检查每条边(u, v),如果从源顶点到顶点u的当前最短路径权重加上边(u, v)的权重小于从源顶点到顶点v的当前最短路径权重,那么就更新从源顶点到顶点v的最短路径权重.
这个过程称为松弛操作,它有助于逐步找到从源顶点到所有其他顶点的最短路径。
什么是单源最短路径
单源最短路径问题是指在图中找到从给定源顶点到所有其他顶点的最短路径。 单源最短路径算法的应用场景包括路由选择、网络流量控制、地图导航等。
除了单源最短路径问题外,最短路径问题还可以分为以下几类:
- 双源最短路径:在图中找到从两个给定源顶点到所有其他顶点的最短路径。
- 多源最短路径:在图中找到从多个给定源顶点到所有其他顶点的最短路径。
- 全源最短路径:在图中找到从所有顶点到所有其他顶点的最短路径。常用算法有Floyd-Warshall算法和Johnson算法。
具体选择哪种最短路径问题和算法取决于实际应用场景和需求。
代码实现
procedure BellmanFord(list vertices, list edges, vertex source)
// 读取边和节点的列表,并对distance和predecessor写入最短路径
// 初始化图 O(V)
for each vertex v in vertices:
if v is source then distance[v] := 0
else distance[v] := infinity
predecessor[v] := null
// 对每一条边重复操作 O(V*E)
for i from 1 to size(vertices)-1:
for each edge (u, v) with weight w in edges:
if distance[u] + w < distance[v]:
distance[v] := distance[u] + w
predecessor[v] := u
// 检查是否有负权重的回路
for each edge (u, v) with weight w in edges:
if distance[u] + w < distance[v]:
error "图包含负权重的回路"
时间复杂度分析
将图的顶点数设为 、边数设为,
该算法经过 轮更新操作后就会停止,(也就是说有几个节点就会进行几轮更新操作)
而在每轮更新操作中都需要对各个边进行1 次确认,因此 1 轮更新所花费的时间就是
整体的时间复杂度就是 。
参考资料
- Gupta, Prachi and Vibhakar Pathak. “A Minimum Spanning Tree-based Routing Technique of FAT Tree for Efficient Data Center Networking.” Mathematical Statistician and Engineering Applications (2022): n. pag.
- Singh, Niharika, Irraivan Elamvazuthi, Perumal Nallagownden, N. Badruddin, Firas Ousta and Ajay Jangra. “Smart Microgrid QoS and Network Reliability Performance Improvement using Reinforcement Learning.” 2020 8th International Conference on Intelligent and Advanced Systems (ICIAS) (2021): 1-6.
- Gupta, Prachi and Vibhakar Pathak. “A Minimum Spanning Tree-based Routing Technique of FAT Tree for Efficient Data Center Networking.” Mathematical Statistician and Engineering Applications (2022): n. pag.