1

我正在阅读顶点着色算法。我看到解释如何使用 BFS 解决问题的文档(暗示问题可以在 O(|V|+|E|) 中解决。但我也看到它提到这是一个 NP-hard 问题。

这两者如何结合在一起?你能不能给点灯?

这是我遇到的算法,对我来说它看起来像是一般情况下的多项式解决方案:

用数字标识每种颜色。从一个节点开始,并为其分配编号最少的颜色。使用 BFS 访问其每个邻居。在访问一个节点时,检查它的每个邻居的颜色,并分配没有分配给任何邻居的最小编号的颜色。

据说 BFS 方法仅适用于 2 种颜色。我可以看到为什么上述技术不适用于超过 2 种颜色

4

3 回答 3

1

通常,当我想到面包优先搜索 (BFS) 时,我认为它适用于树,但顶点着色是一个图问题,而不是树问题。我想您可以通过采用在移动到不同节点之前标记与当前节点相邻的所有节点的规则来将 BFS 应用于图形。

首先,看一个基本示例,说明使用最小数字排序(称为顺序排序)的简单标记如何不起作用:

在此处输入图像描述

如果我们按顺时针顺序(A 到 J)标记节点,我们最终会得到 4 种颜色,而实际上该图具有 2 种颜色。现在,您的规则,优先标记相邻节点将起作用,因为它是两种颜色。但是,您的规则不适用于 3 种颜色,例如:

在此处输入图像描述

在这个例子中,我们选择A作为“树”的根,首先做它的孩子,B 和 C。然后,我们选择孩子B,因为它的字母顺序低于C,然后做B的所有孩子。我们最终得到了 4 色,而实际上图形可以是 3 色的。

于 2014-02-16T01:21:47.427 回答
0

使用 BFS 的算法解决了颜色数量不固定的顶点着色问题的宽松情况,它有时可以作为一般 NP 完全问题的近似解决方案,使用 k 种颜色为图形着色或找到最小的颜色集可用于为图形着色

于 2014-02-15T16:29:47.540 回答
0

顶点着色的一种特殊情况,或近似值可以使用 BFS 来实现。一般问题是 NP-Complete,BFS 无法解决所有情况。我很想尝试提供一个反例,但是缺少您对算法的描述-着色策略不清楚。

例如,BFS 可实现的简单着色是c(v) = d(source,v)(这里c(v)是颜色,d(source,v)是从源到顶点的距离,由 BFS 检索)。
很容易看出这不是最佳的A--B--C--D,您可以使用 2 种颜色对其进行着色,但此解决方案使用 4 种颜色。

于 2014-02-15T14:57:00.743 回答