“爬山”和“贪婪”算法有什么区别?

时间:2011-11-09 03:33:29

标签: algorithm

请解释"登山"并且"贪心"算法。

看起来两者都很相似,我怀疑是“爬山”#34;是一种算法;这似乎是一种优化。这是对的吗?

2 个答案:

答案 0 :(得分:41)

爬山和贪婪算法都是可以用于优化问题的启发式算法。在优化问题中,我们通常会寻求问题元素的一些最佳组合或排序。给定的组合或排序是一种解决方案。在任何一种情况下,都可以评估解决方案,将其与其他解决方案进行比较。

爬山启发式游戏中,您可以从初始解决方案开始。生成一个或多个相邻解决方案。选择最好的并继续,直到没有更好的邻居解决方案。这通常会产生一种解决方案。在爬山时,我们需要知道如何评估解决方案,以及如何生成“邻居”。

贪婪启发式游戏中,我们需要了解手头问题的一些特殊内容。贪心算法使用信息来生成单个解决方案。

优化问题的一个好的示例是0-1背包。在这个问题中,有一个具有一定重量限制的背包,以及一堆放入背包的物品。每个项目都有一个权重和一个值。目标是最大化背包中物体的价值,同时保持重量不受限制。

贪婪算法会选择密度最高的物体并将它们放入直到背包已满。例如,与砖相比,钻石具有较高的价值和较小的重量,因此我们将钻石放在首位。

以下是贪婪算法失败的示例:假设您有一个容量为100的背包。您有以下项目:

  • 钻石,价值1000,重量90(密度= 11.1)
  • 5金币,价值210,重量20(每个密度= 10.5)

贪婪的算法将钻石然后完成,给出值1000.但最佳解决方案是包括5金币,给出1050的价值。

爬山算法将生成初始解决方案 - 只需随机选择一些项目(确保它们在重量限制之下)。然后评估解决方案 - 即确定值。生成相邻解决方案。例如,尝试将一个项目换成另一个项目(确保您仍然在重量限制内)。如果它具有更高的值,请使用此选择并重新开始。

爬山不是一种贪婪的算法。

答案 1 :(得分:4)

是的,你是对的。爬山是一种通用的数学优化技术(参见:http://en.wikipedia.org/wiki/Hill_climbing)。贪婪算法是任何算法,只需选择它当时看到的最佳选择并接受它。

这方面的一个例子是在最小化硬币数量的同时做出改变(至少用美元)。您可以获得硬币最高面额,然后是下一个最高面额,直到达到所需金额。

通过这种方式,登山 是一种贪心算法。