在争用下预处理最短路径

时间:2016-07-04 05:50:03

标签: algorithm graph path shortest-path proof

很容易证明,如果P是u和v之间的最短路径,那么每个子路径也是最短路径。 给定连接的Graph,我想预处理Matrix中每对节点之间的最短路径,这样:

  1. 路径[u,v] =路径[v,u]
  2. 如果路径[u,v]中的x,y则路径[x,y]是路径[u,v]的子路径。
  3. 我无法弄清楚算法或证明,实际上我不知道这是否可行。 任何想法都是受欢迎的。谢谢。

1 个答案:

答案 0 :(得分:0)

如果您正在使用无向图,或者如果保证弧的重量(a,b)等于所有弧的弧的重量(b,a),则只能得到(1)你的图表。

您描述的问题听起来像是全对最短路径问题:对于连接图中的每对节点,找到该对中节点之间的最短路径。 Floyd-Warshall算法可用于查找路径的长度,并且可以直接从那里重建最短路径。

该算法进一步要求不存在负循环(否则可以通过再次运行该循环总是获得更短的路径)但该要求似乎是合理的。

为了保证属性(2),您需要确保在重建路径时重建“规范”路径,只要有多条最短路径可能。为此,在顶点上施加排序并始终按升序测试候选节点,始终优先选择保持最短路径属性的最低排序节点。

维基百科的写作相当不错。