2

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

在无向加权图中,有 V 个顶点和 E 条边。找到访问 T(T<=V) 个顶点所需的最小权重,从标记为 0 的顶点开始。此外,如果两个访问过的顶点之间存在边,则其权重设置为 0。

这不是一个经典的旅行商问题,因为添加了一个条件,即如果您访问两个顶点,它们之间的边的权重会减小到 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。

4

1 回答 1

2

看起来您的问题本质上是Steiner 树问题,已知它是 NP 难的。

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

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

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

于 2015-03-27T21:35:02.783 回答