【问题标题】:Algorithm: shortest path between all points算法:所有点之间的最短路径
【发布时间】:2010-03-23 16:30:12
【问题描述】:

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

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

我尝试了几种算法(Dijkstra、Floyd Warshall...),它们都为我提供了起点和终点之间的最短路径,但它们并没有创建一条包含所有点的路线。

排列效果很好,但它们太耗费资源了。

你能建议我研究什么算法来解决这个问题?或者是否有记录在案的方法可以使用上述算法做到这一点?

【问题讨论】:

  • 如果只有 10 个点,那么只有 3,628,800 个排列。那不是很贵。您是否期望做很多这样的事情?
  • 10 分就是一个例子。我们必须编写一个可以取任意点数的脚本。

标签: algorithm artificial-intelligence path shortest-path


【解决方案1】:

看看travelling salesman problem

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

【讨论】:

  • 可以保证线性时间小于2 MST。
  • 旅行推销员看起来像我需要的东西,不同之处在于它不是闭路。将看看启发式解决方案。 Tnx!
【解决方案2】:

这显然是Travelling Salesman problem。专门针对N=10,可以尝试O(N!) naive 算法,也可以使用Dynamic Programming,可以通过交易空间减少到O(n^2 2^n)

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      实际上,我认为这就是您要寻找的:

      Floyd Warshall

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

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

      【讨论】:

      • 其实OP提到了FW,这显然不是他要的。
      • OP可能已经提到了,但这并不意味着他知道路径重建,这是上面评论添加的。
      猜你喜欢
      • 2010-12-03
      • 2016-03-26
      • 1970-01-01
      • 2016-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-29
      • 2021-11-30
      相关资源
      最近更新 更多