【问题标题】:traveling salesman minimum spanning tree variant旅行商最小生成树变体
【发布时间】:2015-03-26 20:48:47
【问题描述】:

我正在尝试解决以下图形练习:

在无向加权图中,有 V 个顶点和 E 个边。从标记为 0 的顶点开始,找到访问 T(T

这不是一个经典的旅行商问题,因为添加了一个条件,如果你访问两个顶点,它们之间的边的权重会减少到 0。

如果 T == V,则使用 Prim 的最小生成树算法解决该问题,但由于您不必访问所有顶点,因此不会总是返回最小权重。

我考虑过找到最小生成树,然后切割不会妨碍我到达所有“目标”顶点的能力的每条边,但这似乎过度且可能不正确。

有什么想法吗?

编辑: 我给你举个例子。假设我们有一个带有 4 个顶点标记为 0、1、2 和 3 的图。我们有以下边(从、到、权重): (0,1,1) (0,2,2) (1,3,4) (2,3,1) 最小生成树将包含边:(0,1,1)、(0,2,2) 和 (2,3,1)。有了它,每个顶点都可以从 0 开始到达。但是,练习的目标是达到 T 个顶点。话虽如此,例如,我们可能只需要到达顶点 2 和 3,从而不需要边 (0,1,1),因此到达目标顶点所需的总权重是 2+1,而不是 1 +2+1。

【问题讨论】:

  • 如果您需要最小的权重总和,Prim 的算法也会为您提供正确的部分总和。
  • 如果你需要最小化使用的最大边,你可以在那个最大值上进行二分搜索。对于给定的最大值,很容易(DFS 或 BFS)找到是否至少有 T 个顶点可以访问。
  • @Gassa 因此,如果我总共有 10 个顶点,并且我只需要访问顶点 1、4 和 7,例如,Prim 的算法会给我所需的最小总和吗?
  • 在 T-1 次迭代后停止 Prim 不是答案。考虑一个图,其中 0 连接到 (1) 一条边长度为 10 的路径 (2) 一条长度为 100 的边,依次连接到一条边长度为 1 的路径。如果 T 足够大,我们希望使用 edge长度为 1,但 Prim 将无限期地探索 10s。
  • @Gassa 我添加了一个应该阐明任务的示例。

标签: algorithm graph traveling-salesman minimum-spanning-tree prims-algorithm


【解决方案1】:

看起来您的问题本质上是Steiner tree problem,已知它是 NP-hard。

确实,您有一个无向加权图 (V, E)。 给定 V 的子集 T,你想找到一棵总权重最小的树,它覆盖了 T 的所有顶点。

这是一个最明显的贪婪想法不起作用的例子。 假设我们的图是一个非常规四面体ABCD 的顶点和边,其中AB=BC=CA=5AD=BD=CD=3。 如果我们想将 A、B 和 C 连接在一起,我们能做的最好的事情是使用边 ADBDCD,总权重为 9。 如果我们决定不使用D,我们必须取两条边的长度分别为5,总权重为10。 但是,集合ABC 的每个两个顶点子集都使用一个权重直接边5ABBCCA)并且在最优解中没有到顶点D 的边。

(哎呀!在三维欧几里得几何中不可能有确切的长度。不过,它将作为示例。)

【讨论】:

  • 我赞成大量澄清;图版本有近似算法吗?
猜你喜欢
  • 2022-12-16
  • 1970-01-01
  • 1970-01-01
  • 2017-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多