在我的学校,我了解到计算任意图的色数是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;
}
答案 0 :(得分:3)
这是一个具体的反例:petersen graph。你的算法计算4,无论你从哪里开始(我认为),但图表的色度指数是3。
对于图形问题的许多贪婪尝试,以及图论中的猜想,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种颜色。