用Vizing算法优化边缘着色

时间:2017-11-15 16:36:14

标签: algorithm graph-theory theory graph-coloring

我正在尝试创建一个在图形上运行最佳边缘着色的程序。关于节点和边缘,这个简单(非多边)图形的大小可变。我在理解如何实现算法以及它的作用方面遇到了一些麻烦。我对Vizing算法的理解大多来自this来源,这非常有帮助。

据我所知,该算法分为两个主要部分:ColorGraphColorEdge函数。在上面的源代码中,Jeffrey M. Gilbert将颜色图函数的伪代码呈现如下:

ColorMultiGraph(G, k)
    Initialize G' to be
        V(G') = V(g)
        E(G') = {}
    Initialize Φ' to be an (empty) coloring E(G') with k>=0 Colors
    EdgesLeft = E(G)
    While EdgesLeft != {} Do
        Select e from EdgesLeft
        Φ' = ColorEdge(e,G', Φ')
        E(G') = E(G') U {e}
        EdgesLeft = EdgesLeft - {e}
    End While 
    Return Φ'

我或多或少地了解这个伪代码发生了什么,尤其是在链接文本中相关部分的帮助下。我不明白,希望能找到一些帮助,是ColorEdge函数。

粗略地说,它讨论了代表给定节点上缺少彩色边缘的孔。您从给定的未着色边缘列表中选择了边e,并比较端点上的孔以确定边缘是否可以着色。这很容易理解。令我困惑的是两者之间无法匹配的情况。

您应该使用Vizing风扇序列来更改要着色的节点上的孔。我已经阅读了几次该部分,我并不真正理解它是如何工作的,特别是与传递给函数的G'和Φ'变量一起使用时。

有人可以解释一下这部分算法到底发生了什么?我不知道如何继续它,因为我通常不明白不同部分之间发生了什么。

0 个答案:

没有答案