【发布时间】:2016-02-23 15:11:29
【问题描述】:
我遇到了这个问题 - 在无向图中,每个节点和边都有一个权重。所有的权重都是非负的。给定一个值S,找到边权重之和最小的连通子图,使得其节点权重之和至少为S。
最明显的解决方案是考虑所有可能的子图的蛮力方法。但是时间复杂度是指数级的。有没有更好的算法呢?我的直觉是我们可以将节点权重转换为边权重,然后应用生成树算法。但我无法清楚地解决它。如何解决这个问题?
编辑:看起来我对子图的描述不够清楚。选定的子图必须是单个连接的组件。我希望现在很清楚。
【问题讨论】:
-
权重是否受到限制(例如所有非负数)?如果所有的权重都是非负的,那么问题就变得微不足道了——也许您想将子图限制为仅由一组边诱导的子图?
-
所有的权重都是非负的,所有的边都可以考虑。我们如何解决这个问题?
-
有了这些约束,解决方案很简单:选择所有节点而不选择任何边。边权重 0,节点权重肯定高于 S,除非不可能。
-
对不起,如果问题不清楚。所有选择的节点必须通过边连接。
-
您确定要说“强连通分量”而不是“强连通子图”吗?强连通分量是最大的,并且有有效的算法可以找到这些。
标签: algorithm graph time-complexity graph-algorithm