【问题标题】:Variation of Kruskal's algorithmKruskal 算法的变体
【发布时间】:2016-05-03 21:54:41
【问题描述】:

假设 G 是一个有 n 个顶点的无向图,每对顶点之间都有带权边。你能用以下结构构造一棵树吗:

v_1-v_2-v_3-...-v_n 使得树中的每个节点对应于 G 中的一个顶点,并且每个节点除了叶子之外只有一个子节点。树边的总权重也被最小化了。

如果使用类似于 Kruskal 算法的算法:按升序对原始图中所有边的权重进行排序。从权重最小的边开始,如果添加这条边不违反上述树结构,则将这条边添加到最终的树中,否则,继续下一条。

这个算法能给出最小权重的树吗?如果没有,是否有可能找到一种算法来得到这棵树?

【问题讨论】:

  • @mcdowella 是的,我正在尝试使用 A* 算法解决旅行推销员问题,并且正在构建我的启发式函数。似乎我想在这里提出的是问题本身。 :(

标签: algorithm graph tree kruskals-algorithm


【解决方案1】:

可以,但可能不行。考虑一个具有如下边权重的 4 节点图:

AB:   3
AC:   1
AD: 100
BC:   2
BD: 100
CD:   2

最小树是长度为 7 的 ABCD,但您的算法将始终从(长度为 1)边 AC 开始,这不是所需的最小树的一部分。

【讨论】:

  • 我认为你是对的。是否有任何算法可以始终返回所需的树?
  • @ZigZagZebra:当然可以,但是需要指数级的时间,因为这个问题(哈密顿路径)是 NP 难的。
猜你喜欢
  • 1970-01-01
  • 2017-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-04
  • 1970-01-01
  • 2015-06-16
相关资源
最近更新 更多