使用1种颜色

时间:2015-05-12 08:11:00

标签: algorithm graph graph-algorithm

我刚刚开始阅读图论,正在阅读有关图着色的内容。这个问题突然出现在我的脑海中:

我们必须使用1种颜色为无向图(不完全)着色,以便最大化彩色节点的数量。我们需要找到这个最大数量。我能够为非循环图制定方法:

我的方法:首先,我们将图形划分为独立的组件,并为每个组件执行此操作。我们制作一个dfs树,并在遍历它时生成2个dp数组,以便root来到最后:

dp[0][u]=sum(dp[1][visited children])

dp[1][u]=sum(dp[0][visited children])

ans=max(dp[1][root],dp[0][root])

dp[0][i] , dp[1][i] are initialized to 0,1 respectively.

这里0代表无色,1代表有色。

但这不适用于循环图,因为我假设没有访问过的孩子。

有人可以指导我如何为循环图解决这个问题(而不是蛮力)吗?是否有可能修改我的方法或我们是否需要提出不同的方法?一种贪婪的方法,如着色边缘最少的节点是否有效?

1 个答案:

答案 0 :(得分:4)

这个问题也是NP-Hard,被称为maximum independent set problem

如果S<=V中的每两个顶点u,v都没有边{{1>,则图表中的集S被称为独立集 }}

(u,v)的最大尺寸(您正在寻找的数字)被称为图表的独立编号,不幸的是发现它是NP-Hard。

因此,除非P = NP,否则您的算法会因一般用途图而失败。

证明它非常简单,给定图表S,当且仅当G=(V,E)G'=(V,E')时才创建(u,v) E'所在的互补图(u,v)不在E

现在,给定一个图G,当且仅当k中有一个独立的大小k时,才会有一个大小为G'的集团,使用相同的顶点(因为if(u,v)是两个顶点的独立集合,(u,v)中没有边E',根据定义,E中有一条边。重复所有独立集合中的顶点,你在G)中得到了一个集团。

由于clique problem是NP-Hard,这使得这个很好。