Algorithm 具有最小边权重和节点权重的子图>;=瓦尔

Algorithm 具有最小边权重和节点权重的子图>;=瓦尔,algorithm,graph,time-complexity,graph-algorithm,Algorithm,Graph,Time Complexity,Graph Algorithm,我遇到了这个问题——在一个无向图中,每个节点和边都有一个权重。所有权重均为非负。给定一个值S,求边权和最小的连通子图,使其节点权和至少为S 最明显的解决方案是考虑所有可能的子图的蛮力方法。但时间复杂度是指数级的。有没有更好的算法?我的直觉是,我们可以将节点权重转换为边权重,然后应用生成树算法。但我无法清楚地解决它。如何解决这个问题 编辑:看来我对子图的描述不够清楚。所选子图必须是单个连接组件。我希望现在一切都清楚了。我认为这个问题是NP难问题,通过对Steiner树问题的简化。给定一个图G和一组

我遇到了这个问题——在一个无向图中,每个节点和边都有一个权重。所有权重均为非负。给定一个值S,求边权和最小的连通子图,使其节点权和至少为S

最明显的解决方案是考虑所有可能的子图的蛮力方法。但时间复杂度是指数级的。有没有更好的算法?我的直觉是,我们可以将节点权重转换为边权重,然后应用生成树算法。但我无法清楚地解决它。如何解决这个问题


编辑:看来我对子图的描述不够清楚。所选子图必须是单个连接组件。我希望现在一切都清楚了。

我认为这个问题是NP难问题,通过对Steiner树问题的简化。给定一个图G和一组需要跨越的节点S,将S中所有节点的权重设置为一个,将所有其他节点的权重设置为0。节点权重至少为| S |且总边代价最小的子图必须是树(如果有任何循环,从循环中删除边只会降低代价),并且必须连接所有需要跨越的节点。因此它是一棵斯坦纳树。总的来说,这种减少可以在多项式时间内计算,因此您的问题是NP难问题。

权重是否受到约束(例如,所有非负权重)?如果所有的权重都是非负的,那么问题就变得无关紧要了——也许你想将子图约束为仅由一组边所诱导的子图?所有的权重都是非负的,所有的边都可以考虑。我们如何解决这个问题呢?有了这些约束,解决方法很简单:选择所有的节点,而不是边。边缘权重0,节点权重肯定高于S,除非这是不可能的。如果问题不清楚,请道歉。所有选定的节点都必须通过边连接。是否确实要说“强连接组件”而不是“强连接子图”?一个强连接的组件是最大的,并且有有效的算法来查找这些组件。从更新来看,解决方案似乎不需要连接——因此这个问题的解决方案可能是一个林,而不是生成树,因此不是Steiner问题的解决方案。@DanielWagner这个问题仍然是关于连通子图的——也许我遗漏了什么?是的,你是对的——自从我写下我的评论以来,已经有了进一步的澄清。抱歉@templatetypedef有没有解决这个问题的动态编程方法?@Sashank我不知道,尽管有很好的Steiner树近似算法可以帮助解决这个问题。