我正在阅读顶点着色算法。我看到文档解释了如何使用BFS解决问题(暗示问题可以在O(| V | + | E |)中解决。但我也看到它提到这是一个NP难问题。
这两者如何结合在一起?请你点亮一下吗?
这是我遇到的算法,对我来说看起来像是一般情况多项式解决方案:
将每种颜色用数字标识。从节点开始,并为其指定最少编号的颜色。使用BFS访问每个邻居。访问节点时,检查每个邻居的颜色,并为颜色分配最少的数字,该颜色未分配给任何邻居。
据说BFS方法仅适用于2种颜色。我可以看出为什么上述技术不适用于超过2种颜色
答案 0 :(得分:1)
通常,当我想到面包优先搜索(BFS)时,我认为它适用于树,但顶点着色是图形问题,而不是树问题。我想你可以通过采用在移动到不同节点之前标记与当前节点相邻的所有节点的规则将BFS应用于图形。
首先,看一下使用最小数字排序(称为顺序排序)的简单标签不起作用的基本示例:
如果我们以顺时针顺序(A到J)标记节点,我们最终得到4色,而实际上这个图有2色。现在,您的规则,优先标记相邻节点将起作用,因为它是双着色。但是,有三种颜色,您的规则将无法使用,例如:
在这个例子中,我们选择 A 作为“树”的根,并首先做它的孩子,B和C.然后,我们选择子 B ,因为它的字母顺序低于 C ,并且完成所有 B 的孩子。我们最终得到了4色,实际上图形可以是3色。
答案 1 :(得分:0)
使用BFS可以实现顶点着色或近似的特殊情况。一般问题是NP-Complete,而BFS无法解决它的每一个案例。我想尝试提供一个反例,但你对算法的描述缺乏 - 着色策略不明确。
例如,BFS可实现的简单着色为c(v) = d(source,v)
(此处c(v)
为颜色,d(source,v)
是从源到顶点的距离(由BFS检索) )。
很容易看出这对A--B--C--D
不是最佳的,你可以用2种颜色对它进行着色,但这个解决方案使用了4种颜色。
答案 2 :(得分:0)
使用BFS的算法解决了一个放松的顶点着色问题,其中颜色的数量不固定,它有时可以作为一般NP完全问题的近似解决方案,使用k颜色或找到最小集合为图形着色可用于为图形着色的颜色