DFS 贪心色数
DFS Greedy Chromatic Number
我在学校学到计算任意图的色数是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 种颜色可用,做出错误的选择会在以后出现不确定时间的问题。
假设您有顶点 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 种。
这是一个具体的反例:petersen graph。你的算法计算出 4,不管你从哪里开始(我认为),但图表的色指数是 3.
petersen 图是许多图问题贪婪尝试的经典反例,也是图论中的猜想。
我在学校学到计算任意图的色数是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 种颜色可用,做出错误的选择会在以后出现不确定时间的问题。
假设您有顶点 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 种。
这是一个具体的反例:petersen graph。你的算法计算出 4,不管你从哪里开始(我认为),但图表的色指数是 3.
petersen 图是许多图问题贪婪尝试的经典反例,也是图论中的猜想。