基本概念
在贪婪算法(greedy method)中采用逐步构建最优解的方法。在每个阶段,都做出看上去最优的决策(在一定标准下)。决策一旦做出,就不可再更改。做出贪婪决策的依据称为贪婪准则(greedy criterion)
著名问题
1) 最少硬币问题
一个小孩买了价值少于1美元的糖,并将1美元的钱交给售货员。售货员希望用数目最少的硬币找给小孩。假设提供了数目不限的面值为2 5美分、1 0美分、5美分、及1美分的硬币。售货员分步骤组成要找的零钱数,每次加入一个硬币。选择硬币时所采用的贪婪准则如下:每一次选择应使零钱数尽量增大。为保证解法的可行性(即:所给的零钱等于要找的零钱数),所选择的硬币不应使零钱总数超过最终所需的数目。
贪婪算法有种直觉的倾向,在找零钱时,直觉告诉我们应使找出的硬币数目最少(至少是接近最少的数目)。如何证明采用贪婪算法找零钱时所用的硬币数目的确最少?
证明:设S为总金额,n为零钱数,则S=25a + 10b + 5c + d, n = a + b + c + d.
首先看一下只有5美分和一美分的情况:当S >5 时,S = 5c + d1 或 d2,显然,c + d1 < d2。
由此可得,当S=k1×c + k2 ×d1或 k2×d2,当k1是k2的整数倍时,c+d1的数目会少于d2.
当S>10时,S=10b+5c+d或5(2b+c)+d,因为上一步的结果,所以显然 n = b+c+d.
最后当S > 25时, S=25a +10b + 5c + d,同理可得,n = a + b + c + d是最少的零钱数。