算法设计方法(一) —— 贪心法

基本概念

在贪婪算法(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是最少的零钱数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值