我正在寻找一种好的算法来在给定的网络图上执行2着色(即,以两种颜色之一绘制网络中的每个节点,使得没有由边缘直接连接的节点对具有相同的颜色) 。如果发生冲突,算法应从网络中删除节点,但最小化已删除节点的数量。有谁知道这样的算法是否可用(Python或R中的实现将是一个很好的奖励)。
谢谢!
答案 0 :(得分:1)
在每次迭代中在活动颜色之间交替的任何节点上启动BFS。尚未访问的颜色节点。重复每个连接的组件。
如果您到达已访问过的节点u
,并且该节点的颜色当前未处于活动状态,则该图表不是2色。
无法有效实现最佳节点删除。考虑一个至少有3个辐条作为子图的轮子,即。连接到偶数长度> = 4的循环的每个节点的集线器节点。为了允许2着色而要移除的最小节点数是1,并且正好有1个解决方案来实现此目的:移除集线器。 / p>
因此车轮检测是优化稀疏化的先决条件。
然而,this paper证明车轮检测是np完全的。