答案 0 :(得分:15)
在任何图中,独立集的补集是vertex cover,反之亦然,因此您的问题等同于在图中找到最小权重顶点覆盖。后者可以使用最大流技术解决:
引入超级源S和超级接收器T.将二分图左侧的节点通过其权重作为容量的边连接到S.对右侧做同样的事情并且下沉T.为原始图形的边缘分配无限容量。
现在在构建的网络中找到最小的S-T切割。切割的值是最小顶点覆盖的权重。要想知道为什么这是真的,请考虑切边:它们不能是原始边缘,因为它们具有无限的容量。如果切割左侧边缘,则这对应于将相应的左侧节点带入顶点覆盖。如果我们不切割左侧边缘,我们需要从右侧的相邻顶点切割所有右侧边缘。
因此,要实际重建顶点覆盖,只需收集与切割边相邻的所有顶点,或者左侧节点不可从S到达,并且右侧节点可到达来自S。
答案 1 :(得分:-1)
在我看来,这个问题很好。一方面,双分图已经由两个独立的集合组成。任何独立的集合必须是这些集合的子集,对于正权重,它们通常必须具有较低的权重?
将二分图拆分为经过验证的子集也是微不足道的,并且对于大多数实际用途,二分图将很少有这些断开连接的子集,因此您可以将它们添加起来。由于您可以在线性时间内找到所有独立子集,并且您可以在线性时间内找到它们的权重,因此很明显您可以在节点+边缘的线性时间内执行此操作,
这使我怀疑somehoe我误解了你的问题。
基本上,从二分图开始,选择一个节点,找到与其连接的所有节点。如果这不是整个图表,则找到一个断开连接的子集,冲洗并重复。您可以随意添加,因此整个思考需要每个节点的恒定时间操作,并且边缘= N + E中的线性时间。