我这里有一个图形着色算法的功能,它为许多课程分配颜色。但它随意选择,我希望改进算法并更有效地分配颜色,而不是根据可用颜色随机选择颜色。
在此功能中,BookController
是时间表的数量。
N
解释会很棒。
答案 0 :(得分:4)
首先,让我们定义问题canColor(graph, k)
- 当且仅当您可以使用k种颜色进行graph coloring图表时,它才会回答为真。
canColor
的伪代码:
canColor(graph, k):
if graph is completely colored:
return checkIfColoringValid(graph)
v = first uncolored vertex
for each i from 1 to k (inclusive)
color v with color i
//can add optimization here to trim upfront unsuccesful results
res = canColor(graph,k)
if res == true:
return true
//no answer found
uncolor v (mark it as color[v] = 0)
return false
以上是图表着色的decision problem。
现在,我们需要使用它来找到最佳颜色。
注意,如果canColor(graph,k)== true,那么canColor(graph,k + 1)== true
这意味着,您有一个隐喻的答案数组0,0,..0,1,1,...,1
,一旦有某个k
的解决方案,其后的所有k
值也会有解决方案。这个隐喻数组已经过排序,因此您可以在其上应用binary search(而不是访问数组,每次都计算canColor(graph,k)
的答案),以获得k
的最佳值 - 你可以使用的颜色数量。