一种证明没有贪婪算法可以获得最优解的方法吗?

时间:2015-04-30 16:17:13

标签: algorithm greedy

问题很简单。我需要证明没有贪婪算法能够为给定问题获得最优解。

我不清楚是否存在问题必须满足的任何条件,因此存在某种贪婪算法以获得最优解。或者,如果有足够的条件使问题无法通过贪婪算法解决。

我正在谈论贪婪的色彩:

  

http://en.wikipedia.org/wiki/Greedy_coloring

2 个答案:

答案 0 :(得分:3)

  

我需要证明没有贪婪的算法可以获得   针对特定问题的最佳解决方案。

那么,这将取决于您选择的属性的定义。

查看图形着色问题的示例,并假设您有一个给出部分彩色图形的oracle M,当且仅当存在图形着色时才返回true。

现在,使用这个oracle,一个贪婪的算法可以如下:

for each vertex v:
   for each color c:
        temporarly color v with c
        run M on partially colored graph
        if M yields true, make c constant to v, and abort the inner loop

上述算法根据oracle M的答案,以贪婪的方式对图形着色,一次选择一个顶点。 (选择M的最佳答案并将其分配给每个顶点和颜色,其中答案集为false或true)

是否觉得作弊?可能,因为没有已知的这样的M在多项式时间内运行,但是如果你运行一个创建M的指数算法,那么肯定会有一个贪婪的算法。

然而,您可以证明在多项式时间(或任何其他多项式算法)中贪婪选择的KNOWN算法不会产生图形着色的最佳答案,因为图形着色是NP完全的,我们不知道知道任何有效解决NPC问题的算法(并且大多数人认为这种算法不存在)。

然而,如果在某些时候我们将证明P = NP,我们可以有效地计算M,我们将得到一个有效的贪婪算法来解决图着色。

答案 1 :(得分:1)

贪婪,在哲学层面上是这种现象,当属性的持有者在短期内思考并忽略长期收入时。我们可以看到,这不是一个定义明确的概念。算法如何贪婪?如果我们不知道其贪婪的本质,那么我们就没有办法证明它没有获得最优解。而且,获得最优解的概念是模糊的。这可能意味着它永远不会获得最优解,或者它可能意味着至少存在无法获得最优解的情况。我建议记录问题,理解问题,然后开始思考如何再次证明这一点。