【发布时间】:2011-10-07 09:21:43
【问题描述】:
我有一个无向的正边权重图 (V,E),我想要一个覆盖顶点子集 k 的最小生成树 V(施泰纳树问题)。
我没有将生成树的大小限制为 k 个顶点;相反,我确切地知道 哪些 k 个顶点必须包含在 MST 中。
从整个 MST 开始,我可以减少边/节点,直到获得包含所有 k 的最小 MST。
我可以使用 Prim 算法得到整个 MST,并在子集 k 的 MST 没有被破坏的情况下开始删除边/节点;或者,我可以使用 Floyd-Warshall 来获得所有对的最短路径并以某种方式合并这些路径。有没有更好的方法来解决这个问题?
【问题讨论】:
-
如果我删除不需要的顶点,我可能还会丢失连接相距很远的
k顶点的中间边。例如,如果我有:k--o--o--o--k其中o表示不必要的顶点,k表示我需要的顶点,如果我删除了中间的o,则无法在我的k顶点之间构造 MST。 -
所以你对最小生成树感兴趣,它不一定跨越所有顶点,只跨越 k 中的顶点?
-
没错。至少包含所有
k的 MST,然后尽可能少地包含其他内容。 -
您好,您能解决您的问题吗?如果可能的话,你能帮忙处理伪代码/代码吗?我有类似的问题,但图表未加权。
-
这个问题不清楚k是数字还是集合。你能澄清一下吗?
标签: algorithm tree graph-theory graph-algorithm