我有一个断开的二分无向图。我想完全断开图表。只有我可以执行的操作是删除节点。删除节点将自动删除其边缘。任务是最小化要删除的节点数。图中的每个节点最多有4个边。
通过完全断开图表,我的意思是不应该通过链接连接两个节点。基本上是一个空边集。
答案 0 :(得分:7)
我认为,你不能证明你的算法是最优的,因为事实上它并不是最优的。
要完全断开图表以最大限度地减少要删除的节点数,您必须删除属于图表最小顶点覆盖的所有节点。搜索最小顶点覆盖通常是NP完全的,但对于二分图,有一个多项式时间解决方案。
在图表中找到最大匹配(可能与Hopcroft–Karp algorithm)。然后使用König's theorem获取最小顶点覆盖:
考虑一个二分图,其中顶点被划分为左(L)和右(R)集。假设存在最大匹配,将边缘划分为匹配(E_m)中使用的边缘和不匹配(E_0)的边缘。令T由来自L的所有不匹配顶点以及通过沿着E_0的边缘从左到右沿着从E_m的边缘向右到左的所有顶点组成。这实际上意味着对于L中的每个不匹配的顶点,我们将在E_0和E_m的边之间交替的路径中出现的所有顶点添加到T中。
然后(L \ T)OR(R AND T)是最小顶点覆盖。
答案 1 :(得分:3)
这是您建议的算法的反例。
最佳解决方案是删除节点A和B,即使它们的颜色不同。
答案 2 :(得分:0)
我已经考虑过它的算法,但我无法证明它是否是最优的。
我的算法:在每个断开连接的子图上,我运行一个BFS并相应地对其进行着色。然后我确定用每种颜色着色的节点数量,并取两者中的最小值并存储。我重复每个子图的程序,然后加起来得到所需的最小值。如果正确的话,请帮助我证明算法。
编辑:上述算法不是最优的。已接受的答案已经过验证是正确的。
答案 3 :(得分:0)
由于所有边缘都是从一个集合到另一个集合,因此使用BFS和使用2种颜色着色来找到这两个集合。然后删除较小集中的节点。
由于它们之间没有边缘,所以其余节点也会断开连接。
[作为预处理步骤,您可以先省去0边的节点。]