目录
贪心算法简介
贪心算法(又称贪婪算法)Greedy Algorithm 是一种不断做出局部最优解的选择,最终期望得到全局最优解的算法。
简单地说,贪心算法就是在每一步都做出当前最优的选择,以期望能够得到全局最优的解。
贪心算法是一种常用于求解优化问题的算法,在实际应用中,它常被用于求解一些经典问题,如背包问题、最短路径问题、最小生成树问题等。
其中贪心算法最佳实践为用于压缩数据的霍夫曼编码(Huffman encoding)还有用于寻找图中最短路径的Dijkstra算法。
什么时候使用贪心算法
贪心算法的优点是简单、高效,容易理解和实现。但同时,由于贪心算法是基于局部最优决策的,无法保证全局最优解,所以有一定的局限性。在实践中,贪心算法通常适用于满足以下两个条件的优化问题:
- 贪心选择性质:通过在每一步中选择最优选项(比如最小值或最大值),可以达到全局(整体)最优解。
- .最优子结构性质:如果整个问题的最优解包含子问题的最优解,则该问题具有最优子结构。
如果上面两个性质都成立,则可以使用贪心算法来解决问题。
贪心算法缺陷
由于贪心算法每次只考虑局部最优解,所以它无法保证能够得到全局最优解。在某些情况下,贪心算法会得到次优解甚至无解。比如下面的这一个例子。
在下面的示例中通过贪心算法寻求找到和最大数值的路径。它通过在每一步选择最大的可用数字来实现这一点。然而,贪心算法无法找到最大的和,因为它只根据每一步所掌握的信息做出决策,而不考虑整体问题。
示例1:
在下面的图中,贪心算法试图找到最大的一个数字。它在算法的每一步中选择最大的数字。我们一眼就可以看出该算法不会得到正确的解决方案。
正确的解决方案是什么?为什么贪婪算法不适合这个问题?
<