当局部最优解决方案等于全局最优?关于贪婪算法的思考

时间:2011-06-29 00:47:03

标签: algorithm global greedy

最近我一直在研究一些贪婪的算法问题。我对局部最优而感到困惑。如您所知,贪婪算法由局部最优选择组成。但是,结合局部最优决策并不一定意味着全局最优,对吗?

以改变为例:如果有的话,使用最少数量的硬币制作15美分 10¢,5¢和1¢硬币然后你可以用一个10¢和一个5¢来实现这个目标。但是如果加上12美分硬币,贪心算法会失败,因为(1×12¢+ 3×1¢)使用的硬币数量超过(1×10¢+ 1×5¢)。

考虑一些经典的贪婪算法,例如:赫夫曼,迪克斯特拉。在我看来,这些算法是成功的,因为它们没有退化情况,这意味着局部最优步骤的组合总是等于全局最优。我明白了吗?

如果我的理解是正确的,有没有一种通用的方法来检查贪婪算法是否是最优的?

我找到了一些discussion of greedy algorithms elsewhere on the site。 但是,这个问题并没有详细说明。

4 个答案:

答案 0 :(得分:4)

一般来说,只要问题凸出,局部最优解就总是最优的。这包括线性编程;具有正定目标的二次规划;和具有凸目标函数的非线性规划。 (但是,NLP问题往往具有非凸目标函数。)

如果启发式函数具有某些属性,启发式搜索将为您提供具有局部最优决策的全局最优。有关详细信息,请参阅AI书。

一般而言,如果问题不是凸的,我不知道任何证明局部最优解的全局最优性的方法。

答案 1 :(得分:2)

有一些定理可以表达贪婪算法在拟阵中最优的问题(也就是:贪婪)。有关详细信息,请参阅本维基百科部分:http://en.wikipedia.org/wiki/Matroid#Greedy_algorithms

答案 2 :(得分:1)

贪婪算法几乎从未成功找到最佳解决方案。在它的情况下,这高度依赖于问题本身。正如Ted Hopp解释的那样,使用凸曲线,可以找到全局最优,假设您要找到目标函数的最大值(相反,如果要最小化,凹曲线也可以工作)。否则,你几乎肯定会陷入当地的最佳状态。这假设您已经知道目标函数。

我能想到的另一个因素是邻里功能。某些社区,如果足够大,将包含全局和局部最大值,以便您可以避免局部最大值。但是,您不能使邻域太大或搜索速度会变慢。

换句话说,无论您是否使用贪婪算法找到全局最优,都是特定于问题的,尽管在大多数情况下,您将找不到全局最优。

答案 3 :(得分:0)

您需要设计一个见证示例,其中您的算法是全局算法的前提失败。根据算法和问题进行设计。

你改变硬币的例子不是有效的。硬币的设计是为了使所有组合成为可能,但不会增加混乱。您添加12c是不合理的,也是额外的。

随着你的添加,问题不是硬币改变而是另一个(即使主题是硬币,你可以将示例更改为你想要的)。为此,您自己给出了一个见证示例,以显示此问题的贪婪算法将陷入局部最大值。