算法:所有点之间的最短路径

时间:2010-03-23 16:30:12

标签: algorithm artificial-intelligence path shortest-path

假设我有10分。我知道每个点之间的距离。

我需要找到通过所有点的最短路线。

我尝试了几种算法(Dijkstra,Floyd Warshall,......),它们都给了我开始和结束之间的最短路径,但它们并没有制作一条包含所有点的路径。

排列工作正常,但资源太昂贵了。

您可以建议我使用哪些算法来研究此问题?或者是否有记录的方法用上述算法做到这一点?

4 个答案:

答案 0 :(得分:25)

查看travelling salesman problem

您可能想要查看一些heuristic solutions。他们可能无法为您提供100%的确切结果,但通常他们可以在合理的时间内提出足够好的解决方案(距离最佳解决方案2%到3%)。

答案 1 :(得分:6)

这显然是Travelling Salesman problem。特别是对于N=10,您可以尝试使用O(N!)天真算法,也可以使用Dynamic Programming,通过交易空间将其减少到O(n^2 2^n)

除此之外,由于这是一个NP难题,你只能希望得到一个近似或启发式,给出通常的警告。

答案 2 :(得分:2)

正如其他人所说,这是TSP的一个实例。我认为,乔治亚理工学院开发的Concord是目前最先进的解决方案。它可以在几秒钟内处理超过10,000点。它还有一个易于使用的API。

答案 3 :(得分:0)

我认为这就是你正在寻找的,实际上:

Floyd Warshall

  

在计算机科学中,Floyd-Warshall算法(有时称为   WFI算法[需要澄清],Roy-Floyd算法或者只是   Floyd算法)是一种用于寻找最短值的图分析算法   加权图中的路径(具有正或负边权重)。一个   单个执行算法将找到长度(求和   通过它的所有顶点对之间的最短路径的权重)   不会返回路径本身的详细信息

在“路径重建”小节中,它解释了存储“路径”所需的数据结构(实际上,您只需存储下一个节点,然后根据需要轻松地重建任何路径)。