图形着色算法 - 指定颜色

时间:2015-05-06 07:25:13

标签: c algorithm scheduler graph-coloring

我这里有一个图形着色算法的功能,它为许多课程分配颜色。但它随意选择,我希望改进算法并更有效地分配颜色,而不是根据可用颜色随机选择颜色。

在此功能中,BookController是时间表的数量。

N

解释会很棒。

1 个答案:

答案 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的最佳值 - 你可以使用的颜色数量。