【问题标题】:Shortest path visiting set of vertices in an un directed graph无向图中访问顶点集的最短路径
【发布时间】:2013-11-09 14:41:05
【问题描述】:

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

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

【问题讨论】:

  • 这只是针对较小节点集的一种 TSP 形式。它甚至可能比 TSP 更复杂。
  • 好吧,如果你正在寻找一个通用算法,那么考虑到当需要所有个节点时,这个算法将不得不处理这个问题。这相当于最小权重哈密顿路径问题(不是 TSP),这是一个难题。
  • @RonTeller,是否有“最小权重哈密顿路径问题”的算法?
  • @DirenDantanarayana 这是一个 NP-hard 问题,因此没有任何效率。
  • 我不是在寻找高效的。我只想要算法。效率不是问题。 :)

标签: algorithm graph graph-theory graph-algorithm


【解决方案1】:

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

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

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的组不是太大,你就可以解决它:

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

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

【讨论】:

  • 正如我在之前的评论中提到的,效率不是一个大问题。我假设 N 将始终包含少于 10 个节点。我对图论术语不是很熟悉。但是如果我有一个算法,我可以将算法转换为工作代码。我只想要算法,以便我可以使用它来设计代码。 :)
猜你喜欢
  • 1970-01-01
  • 2015-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-14
相关资源
最近更新 更多