假设我有10分。我知道每个点之间的距离。
我需要找到通过所有点的最短路线。
我尝试了几种算法(Dijkstra,Floyd Warshall,......),它们都给了我开始和结束之间的最短路径,但它们并没有制作一条包含所有点的路径。
排列工作正常,但资源太昂贵了。
您可以建议我使用哪些算法来研究此问题?或者是否有记录的方法用上述算法做到这一点?
答案 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算法(有时称为 WFI算法[需要澄清],Roy-Floyd算法或者只是 Floyd算法)是一种用于寻找最短值的图分析算法 加权图中的路径(具有正或负边权重)。一个 单个执行算法将找到长度(求和 通过它的所有顶点对之间的最短路径的权重) 不会返回路径本身的详细信息
在“路径重建”小节中,它解释了存储“路径”所需的数据结构(实际上,您只需存储下一个节点,然后根据需要轻松地重建任何路径)。