DFS贪心色数

时间:2016-04-14 18:14:47

标签: algorithm graph depth-first-search greedy

在我的学校,我了解到计算任意图的色数是NP-Complete。 我理解为什么greddy算法不起作用,但是DFS / Greedy算法呢? 主要思想是为所有尚未着色的顶点做一个DFS,对所有邻居采用最小颜色索引。

我无法弄清楚一个反例,这个问题让我大吃一惊。 谢谢你的所有答案。

伪代码

Chromatic(Vertex x){
    for each neighbour y of vertex x
        if color(y) = -1
           color(y) <- minimum color over all the neighbours of y
           if(y>=numColor) numColors++;
           Chromatic(y);
}
Main(){
  Set the color of all vertex equal -1
  Take an arbitrary vertex u and set color(u) = 0
  numColors = 1;
  Chromatic(u);
  print numColors;
}

2 个答案:

答案 0 :(得分:3)

这是一个具体的反例:petersen graph。你的算法计算4,无论你从哪里开始(我认为),但图表的色度指数是3。

enter image description here

对于图形问题的许多贪婪尝试,以及图论中的猜想,petersen图是一个经典的反例。

答案 1 :(得分:1)

答案是,有时候你会有一个有2种颜色的顶点,而选择错误会导致问题在以后的某个时间内不确定。

假设您有顶点1到9.围绕一个圆圈绘制它们。然后添加边以使以下成立。

1,2,3形成一个三角形。 3连接到4。 4,5,6做一个三角形。 5,6,7制成三角形。 6,7,8做一个三角形。 7,8,9做一个三角形。 8,9,1做一个三角形。 9,1,2做一个三角形。

这种颜色很容易用3种颜色着色。但深度优先贪婪算法可以选择2种颜色,它可以给顶点4.做出错误的选择,你最终需要4种颜色,而不是3种颜色。