前言
从前,有一个很穷的人救了一条蛇的命,蛇为了报答他的救命之
恩,于是就让这个人提出要求,满足他的愿望。这个人一开始只要求简
单的衣食,蛇都满足了他的愿望,后来慢慢地贪欲升起,要求做官,蛇
也满足了他。这个人直到做了宰相还不满足,还要求做皇帝。蛇此时终
于明白了,人的贪心是永无止境的,于是一口就把这个人吞掉了。
所以,蛇吞掉的是宰相,而不是大象。故此,留下了“人心不足
蛇吞相”的典故。
人之初,性本贪
我们小时候背诵《三字经》,
“人之初,性本善,性相近,习相远。
”其实我觉得很
多时候“人之初,性本贪”
。小孩子吃糖果,总是想要多多的;吃水果,想要最大的;
买玩具,总是想要最好的,这些东西并不是大人教的,而是与生俱来的。对美好事物
的趋优性,就像植物的趋光性,
“良禽择木而栖,贤臣择主而事”“窈窕淑女,君子好逑”
,我们似乎永远在追求美而优的东西。现实中的很多事情,正是因为趋优性使
我们的生活一步一步走向美好。例如,我们竭尽所能买了一套房子,
然后就想要添置一些新的家具,再就想着可能还需要一辆车子…… 凡事都有两面性,一把刀可以做出美味佳肴,也可以变成杀人凶器。
在这里,我们只谈好的“贪心”。
贪心算法
贪心算法的本质
算法导论中如是说:
在贪心算法中,注意以下几个问题:
(1)没有后悔药。一旦做出选择,不可以反悔。
(2)有可能得到的不是最优解,而是最优解的近似解。
(3)选择什么样的贪心策略,直接决定算法的好坏。
贪心算法需要遵循的原则
在解决问题时,通常把原问题分解成规模较小的子问题。
如果原问题的解没有办法通过子问题的解而得到,那么这个分解是没有意义的。
贪心算法的秘籍
(1)贪心策略的确定
(2)局部最优解
根据贪心策略,一步一步地得到局部最优解。例如,第一次选一个
最大的苹果放起来,记为a1,第二次再从剩下的苹果堆中选择一个最大
的苹果放起来,记为a2,以此类推。
(3)全局最优解
把所有的局部最优解合成原来问题的一个最优解。
类似于冒泡排序就是采用的贪心的算法
贪心算法的缺点主要有以下几点: