Algorithm 有向加权图中的最短路径

Algorithm 有向加权图中的最短路径,algorithm,graph,Algorithm,Graph,假设有一个图(V,E)是有向和加权的 图中每条边的权重为1、2或3 找到最短路径的快速有效算法是什么?提前谢谢 Dijkstra的算法可能仍然具有接近最优的性能,并且具有相当简单的优点 但是,对于具有小整数权重的图,可以使用Dijkstra中使用的(fibonacci)堆的更复杂版本,该版本具有更好的渐近性能。具体地说,由Mikkel Thorup解决了在 O(e e + + v v log log c)中的单源最短路径 E < /COD>是一组边, V< /代码>是顶点集, C < /代码>是

假设有一个图(V,E)是有向和加权的

图中每条边的权重为1、2或3


找到最短路径的快速有效算法是什么?提前谢谢

Dijkstra的算法可能仍然具有接近最优的性能,并且具有相当简单的优点

但是,对于具有小整数权重的图,可以使用Dijkstra中使用的(fibonacci)堆的更复杂版本,该版本具有更好的渐近性能。具体地说,由Mikkel Thorup解决了在 O(e e + + v v log log c)中的单源最短路径<代码> E < /COD>是一组边,<代码> V< /代码>是顶点集,<代码> C < /代码>是最大权重。在您的例子中,
C
是常数,这将渐近复杂性转化为
O(|E|+|V|)


请注意,这主要是理论上的问题,与更简单的算法相比,不太可能产生任何显著的加速。

Dijkstra的算法可能仍然具有接近最优的性能,并且具有相当简单的优势

但是,对于具有小整数权重的图,可以使用Dijkstra中使用的(fibonacci)堆的更复杂版本,该版本具有更好的渐近性能。具体地说,由Mikkel Thorup解决了在 O(e e + + v v log log c)中的单源最短路径<代码> E < /COD>是一组边,<代码> V< /代码>是顶点集,<代码> C < /代码>是最大权重。在您的例子中,
C
是常数,这将渐近复杂性转化为
O(|E|+|V|)


请注意,这主要是理论上的问题,与更简单的算法相比,不太可能产生任何显著的加速。

有一个算法列表:

  • …等等
您可以在下面的列表中找到一个列表

您可以测试并使用此在线可视化


这是一个非常有趣的寻路可视化工具,可以看到一些算法是如何探索研究空间以达到目标的,这将使您对算法之间的差异有一个大致的了解注意:寻路并不意味着最短路径;这取决于所使用的算法。

有以下算法列表:

  • …等等
您可以在下面的列表中找到一个列表

您可以测试并使用此在线可视化


这是一个非常有趣的寻路可视化工具,可以看到一些算法是如何探索研究空间以达到目标的,这将使您对算法之间的差异有一个大致的了解注意:寻路并不意味着最短路径;这取决于所使用的算法。

权重没有区别。未加权图的最短路径算法(因此所有权重均为1)与加权图的最短路径算法基本相同。权重是什么没有区别。未加权图的最短路径算法(因此所有权重均为1)与加权图的最短路径算法基本相同。