我用谷歌搜索了它,但我没有找到关于这个主题的一些好材料。
在哪里可以找到有关 Chaitin-Briggs 图形着色算法的更多信息?或者有人可以解释它是如何工作的吗?
Chaitin 算法的关键见解称为度数 < R 规则,如下所示。
给定一个图 G,其中包含一个度数小于 R 的节点 N,如果图 G'(其中 G' 是移除了节点 N 的 G)是 R 可着色的,则 G 是 R 可着色的。证明在一个方向上是显而易见的:如果图 G 可以用 R 种颜色着色,则可以在不更改着色的情况下创建图 G'。在另一个方向,假设我们有 G' 的 R 着色。由于 N 的度数小于 R,因此与 N 相邻的节点必须至少有一种颜色未使用。我们可以用这种颜色为 N 着色。
算法如下:
While G cannot be R-colored
While graph G has a node N with degree less than R
Remove N and its associated edges from G and push N on a stack S
End While
If the entire graph has been removed then the graph is R-colorable
While stack S contains a node N
Add N to graph G and assign it a color from the R colors
End While
Else graph G cannot be colored with R colors
Simplify the graph G by choosing an object to spill and remove its node N from G
(spill nodes are chosen based on object’s number of definitions and references)
End While
由于溢出问题,Chaitin-Briggs 算法的复杂度为 O(n2)。仅当简化图 G' 仅具有 R 度或更大度的节点时,图 G 才会无法 R 着色。当一个图很容易 R 着色时,单次迭代的成本是 O(n),因为我们在图上进行了两次旅行,每次都删除或添加一个节点。但是溢出会带来额外的复杂性,因为我们可能需要在 G 变为 R-colorable 之前溢出任意数量的节点。对于我们溢出的每个节点,我们都会通过线性算法进行另一次旅行
你也可以通过这个寄存器分配算法