贪心算法:
在求最优解问题的过程中,依据某种贪心标准,从问题的初始状态出发,直接去求每一步的最优解,通过若干次的贪心选择,最终得出整个问题的最优解,这种求解方法就是贪心算法。
从贪心算法的定义可以看出,贪心算法不是从整体上考虑问题,它所做出的选择只是在某种意义上的局部最优解,而由问题自身的特性决定了该题运用贪心算法可以得到最优解。而且如果一个问题可以有多个方法求解,那么贪心算法一定是最好的解决办法!!
理论基础:
贪心算法是一种在每一步选择中都采取在当前状态下最好或最优的选择,希望得到结果是最好或最优的算法。
贪心算法是一种能够得到某种度量意义下的最优解的分级处理方法,通过一系列的选择得到一个问题的解,而它所做的每一次选择都是当前状态下某种意义的最好选择。即希望通过问题的局部最优解求出整个问题的最优解。
这种策略是一种很简洁的方法,对许多问题它能产生整体最优解,但不能保证总是有效,因为它不是对所有问题都能得到整体最优解。
利用贪心策略解题,需要解决两个问题:
(1)该题是否适合于用贪心策略求解;
(2)如何选择贪心标准,以得到问题的最优/较优解。
贪心算法大概有这么几个经典类型:
1:活动安排问题 这种问题可以用结束时间排序,然后不断拿后一次的开始时间比较,循环,最大利用时间。。
2,:背包问题 背包问题不能单纯的考虑一方面,重量或是价格,应用一个词“性价比”来装包,从性价比最高的开始,一直装到不能再装为止,如果能分割,那么可以最大利用空间!!
3:最优装载问题 这个和背包问题差不多,甚至还简单,就不说了。。
4:多次服务最优次序问题:这种类型还是比较简单的,首先排好序,然后两个窗口依次取,谁完成就取,从小的开始。。
5:桌子移动问题:其实这个可以把桌子数除以二,然后可以把数组值为零,依次输入数据,从谁那通过就加一,依次累加即可。。
贪心算法,实际应用我感觉应该还是挺有用的,因为他可以把一个大的问题分解为若干个小问题,然后求最优解,这样比求一个大问题肯定要简单的多,毕竟有句话是“大事化小,小事化了”吗。。