【问题标题】:graph coloring using BFS - greedy coloring?使用 BFS 进行图形着色 - 贪婪着色?
【发布时间】:2013-05-25 20:01:00
【问题描述】:

考虑是否可以使用 BFS 实现图形着色,我想出了下面伪代码的方法。

虽然它看起来像一个贪心算法,但我不确定它的正确性。有没有高手cmet?

colors[MAX_COLORS];
colorsUsedSoFar[] = NIL;
like BFS, color first node u with colors[0] i.e color[u] = colors[0];
colorsUsedSoFar[] += colors[0];

for each node v adjacent to u{
  (if v not already colored){
     color[v] = color from the colorsUsedSoFar[] but NotUsedByItsAdjacents
     If all the colors in colorsUsedSoFar[] are used by adjacents, assign a new color to v)
  }
}

“像 BFS”是指使用队列并处理直到队列耗尽。

【问题讨论】:

  • "but NotUsedByItsAdjacents" 显然使它“正确”,因为这是您要遵守的要求。除非您的意思是使用的最佳/最少颜色,否则它与Wikipedia 不同。

标签: algorithm graph-algorithm graph-coloring


【解决方案1】:

这是greedy coloring algorithm 的示例。

广度优先搜索 (BFS) 将为您隐式选择排序。

所以算法是正确的,但并不总是给出最佳颜色(即使用的颜色最少)。

一种更常见的排序是按顶点的度数对顶点进行排序,称为Welsh–Powell algorithm

【讨论】:

  • 您的选择,但我可能会添加来自维基百科的图片和评论以及链接。人们应该尝试让帖子独立(没有必需外部链接(有帮助,当然,但不是必需的))。
  • 您关于着色不是最佳的说法有点含糊;虽然总的来说这是正确的,但对于每种最佳着色,都有产生该着色的顺序(通常是多重)(正如第一个链接会告诉读者的那样,但像 Dukeling 一样,我喜欢独立的答案)。
【解决方案2】:

如果您希望您的算法按 BFS 顺序为图形着色,那么我认为您的算法在正确的情况下是完全可以的,除非您在 for 循环内着色后没有将节点添加到队列中。这也是一种贪婪的方法。您正在贪婪地选择一个节点来根据级别首先着色。不是直截了当的贪婪,而是我说的有点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多