贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。
特性
贪心算法可解决的问题通常大部分都有如下的特性:
⑴有一个以最优方式来解决的问题。为了构造问题的解决方案,有一个候选的对象的集合:比如不同面值的硬币。
⑵随着算法的进行,将积累起其它两个集合:一个包含已经被考虑过并被选出的候选对象,另一个包含已经被考虑过但被丢弃的候选对象。
⑶有一个函数来检查一个候选对象的集合是否提供了问题的解答。该函数不考虑此时的解决方法是否最优。
⑷还有一个函数检查是否一个候选对象的集合是可行的,也即是否可能往该集合上添加更多的候选对象以获得一个解。和上一个函数一样,此时不考虑解决方法的最优性。
⑸选择函数可以指出哪一个剩余的候选对象最有希望构成问题的解。
⑹最后,目标函数给出解的值。
贪心算法
定义
贪心的本质是选择每一阶段的局部最优,从而实现全局最优。
举例
有一堆钞票,你可以拿走十张,如果想拿走最大数额的钱,那么要怎么拿?
一定是每次拿面额最大的钞票,最丝结果就是拿走最大数领的钱
每次拿面额最大的钞票就是局部夏7。上5以卒专最:双额的就是全局最优。
策略
贪心算法并没有固定的套路,