何时局部最优解等于全局最优解?思考贪心算法

8

最近我一直在看一些贪心算法问题。我对局部最优感到困惑。你知道,贪心算法是由局部最优选择组成的。但是组合局部最优决策并不一定意味着全局最优,对吗?

以找零钱为例:用最少的硬币来凑15美分,如果我们有10美分、5美分和1美分的硬币,那么您可以用一个10美分和一个5美分实现这个目标。但是如果我们添加一个12美分的硬币,贪心算法将失败,因为(1×12美分+3×1美分)使用的硬币比(1×10美分+1×5美分)还多。

考虑一些经典的贪心算法,例如Huffman、Dijkstra。在我看来,这些算法是成功的,因为它们没有退化的情况,这意味着局部最优步骤的组合总是等于全局最优。我的理解正确吗?

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

我发现了一些网站上关于贪心算法的讨论。然而,该问题没有详细说明。


从当前的讨论结果来看,验证局部最优和全局最优之间的等价性并不容易。当使用贪心算法时,不能总是期望它产生全局最优解。因此,最好了解哪些情况适合贪心算法。在解决问题时,考虑它是否属于这些情况。否则,使用其他解决方案,因为我们不能有效地确保结果的正确性。 - Ivan
4个回答

4

一般来说,只要问题是凸的,局部最优解就是全局最优解。这包括线性规划;具有正定目标函数的二次规划;以及具有凸目标函数的非线性规划。(然而,NLP问题往往具有非凸目标函数。)

如果启发式搜索具有某些属性,它将在局部最优决策的基础上给出全局最优解。有关详细信息,请参考人工智能书籍。

总的来说,如果问题不是凸的,我不知道任何证明局部最优解为全局最优解的方法。


你说我们可以通过将问题分类来验证局部最优解,那么问题就变成了是否有方便的方法来检查问题是否是凸问题? :) - Ivan
@Ivan - 我说话比较随意。一个给定的问题通常可以用许多方法来解决,这取决于人们选择如何表示它。一旦你有了一个具体的表示,那么它可能是凸的或不凸的。例如,你的样例问题——找零钱——可能可以被制定为线性规划优化问题。然后凸性就会自动跟随,并且该问题的贪心算法_作为线性规划问题_将给出全局最优解。以其他方式表述,这样的结论可能是不可能的。 - Ted Hopp

2

哇!乍一看,我觉得这已经超出了我的知识范围。我不是数学专家。如果我们想通过编程来验证解决方案,有什么好的方法吗? - Ivan
1
@Ivan 理论计算机科学 提供了分析和证明问题(复杂性、可计算性)和算法(正确性、复杂性等)许多属性的基础。仅靠编程是不够的。 - Aaron Novstrup

1
贪心算法几乎从不成功地找到最优解。在它确实成功的情况下,这很大程度上取决于问题本身。正如Ted Hopp所解释的那样,在凸曲线中,可以找到全局最优解,当然假设你要找到目标函数的最大值(相反,如果你要最小化,则凹曲线也适用)。否则,你几乎肯定会陷入局部最优解。这假设你已经知道了目标函数。
我能想到的另一个因素是邻域函数。某些邻域,如果足够大,将包含全局和局部最大值,以便您可以避免局部最大值。但是,您不能使邻域太大,否则搜索将变慢。
换句话说,无论您是否使用贪心算法找到全局最优解,都取决于具体问题,尽管对于大多数情况,您将无法找到全局最优解。

0

你需要设计一个证明例子,证明算法是全局性的假设失败了。根据算法和问题进行设计。

你的硬币找零的例子不是有效的。硬币被特意设计成具有所有可能的组合,但不会造成混淆。你添加的12美分是没有必要的,而且是多余的。

通过你的添加,这个问题不再是硬币找零,而是另一个问题(即使主题是硬币,你也可以将例子改为你想要的)。因此,你自己提供了一个证明例子,以展示贪心算法在这个问题上会陷入局部最大值。


你的硬币参数是一个很好的例子。是否有可能证明“找零钱”问题在实际存在的硬币中具有最优子结构? - Aaron Novstrup
@andrewjs 是的,也许加入12c并不是一个好例子。 但是我想表达的是,在使用greeday算法时,每一步你都选择最好的。 然后你首先选择12c,然后对于剩下的3美分,你只能选择1c * 3。 所以你是说,我们需要逐个检查问题情况吗? 没有通用模式,对吧? - Ivan
@Ivan Han:我的观点是,通过修改硬币,你改变了问题的本质。硬币的设计是经过精心挑选的。任意选择一个硬币会改变问题的本质。以不同面额硬币的外币和找零为例子,同样适用。 - andrewjsaid
@andrewjs 在我的例子中,虽然我改变了硬币的价值,但贪心算法选择的硬币顺序(12c+1+1+1)是局部最优解,不是吗?在我看来,这与插入新的硬币价值无关(例如,您可以插入4c,贪心算法仍然有效),而是与您插入的硬币价值有关。12c破坏了一些内部属性,使得贪心算法在这种情况下失败。 - Ivan
@Ivan Han:我相信我们都有一个有效的论点。也许这个维基百科条目可以进一步澄清: http://en.wikipedia.org/wiki/Change-making_problem#Greedy_method - andrewjsaid
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接