algorithm - 无向图中访问顶点集的最短路径

标签 algorithm graph graph-theory graph-algorithm

我在室内地图中有一个位置的无向图。 当给定一组顶点时,我想找到覆盖所有这些顶点的最短路径。 图包含 52 个顶点和 150 - 250 条边。

什么是我可以用来找到最短路径的最佳算法。 请不要混淆这是一个旅行商问题。它不必覆盖所有节点。仅覆盖给定的节点集。

最佳答案

正如我所说,这是一个难题,所以不要指望多项式时间算法。

但是如果您正在寻找一种算法,您可以在可接受的时间内针对您提到的问题实例进行计算,那么这可能会奏效:

Let G(V,E) be the original graph, let N be the set of nodes that must be visited.

1. Compute the shortest-path matrix M for the entire graph (|V|x|V| matrix that contains
   the length of the shortest path between each two nodes).
2. Generate a new graph G`, containing N alone, with the distances between each 
   two nodes taken from the shortest-path matrix M.
3. Solve the Minimum Weight Hamiltonian Path Problem on G`.

请注意,这里“最难”的部分是第三部分,它需要指数时间。但是如果组 N 不是太大,你就可以解决它:

  • Bruteforce 算法可让您在几秒钟内解决 N 包含大约 11 个节点的问题(O(|N|!) 复杂度)
  • 动态编程可让您在几秒钟内解决 N 包含大约 20 个节点的问题(O(2^|N|*|N|^2) 复杂度。

你基本上可以将任何求解最小权重哈密顿路径问题的算法应用到第三部分,这些算法通常等同于TSP算法(这些问题之间的唯一区别是在TSP中你访问后返回源节点所有其他节点)。

关于algorithm - 无向图中访问顶点集的最短路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19877225/

相关文章:

algorithm - 双正方形 : counting numbers which are sums of two perfect squares

java - 点不对齐

java - 找到使权重总和最小的配对?

c++ - 迭代最大匹配

c - 感知器学习算法不收敛到 0

algorithm - 具有平行边和自循环的 Dijkstra

c++ - 旋转后字典序最小的字符串

algorithm - 图问题的函数/流编程 "Reconstruct Itinerary"

ios - 核心图标题搜索路径,递归是什么意思?

高效的图遍历算法