1、什么是贪心算法?
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解 。
贪心算法(greedy algorithm) 是一种简单、直观的算法,经常用于问题优化。该算法在每一步都做出最优选择,因为它试图找到解决整个问题的整体最优方法。贪心算法在某些问题上相当成功,例如用于数据压缩的Huffman 编码,或用于找到通过图的寻找最短路径的Dijkstra 算法。
贪心算法不是对所有问题都能得到体最优解,关键是整贪心策略的选择
2、贪心算法思路
- 贪心算法一般按如下步骤进行:
①建立数学模型来描述问题;
②把求解的问题分成若干个子问题;
③对每个子问题求解,得到子问题的局部最优解;
④把子问题的解局部最优解合成原来解问题的一个解。
- 如下图:
为了达到最大和的目标,贪心算法每一步都会直接选择看起来是最优的解,
所以它会在第二步选择 12 而不是 3,并且不会达到包含 99 的最优解决方案.
首先获取特定问题中的所有数据,然后在算法执行的每个步骤中,根据规则决定将哪些元素添加到问题解中。
通过在上面的动画,我们可以发现数据集是图表中的所有数字,规则是选择图表每个级别可用的最大数字。该算法构建的解决方案是所有这些选择的总和。
3、贪心算法的适用条件
贪心选择的特性:通过每一步的最优选择,可以达到全局(整体)最优解。
最优子结构:如果整个问题的最优解包含子问题的最优解,那么这个问题就有一个最优子结构。
贪心算法在处理问题时,每一步都有一个对于该问题的最优选择,并且在最后一步之后,算法产生完整的最优问题解。
要编写贪心算法,首先要确定的就是问题中的最佳子结构或子问题。然后,在确定解决方案将包括什么(例如,最大和、最短路径等)。最后再创建某种迭代方式来处理所有子问题并构建解决方案。