贪婪算法硬币找零最优解问题证明

1. 问题

如果硬币的面值是c0, c1, …, ck,则贪婪算法总是用最少的硬币找零

2. 证明

2.1 一个硬币的找零方式可以用如下公式来表示

m0c0 + m1c1 + … + mkck = S

mi = 每种面值的硬币的数量(0, x)

ci = 硬币的面值

根据题意 S = m0c0 + m1c1 + … + mkck

2.2 正面证明没有合适的公式推导,因为贪婪算法没有合适的公式表达,尝试反证

假设有一种非贪婪算法的最优找零方案 S1 = m0c0 + m1c1 + … + mkck

贪婪算法的找零方案 S2 = n0c0 + n1c1 + … + nkck

假设从k开始,到x(x <= k)对应的面值的硬币时,mx != nx

∵贪婪算法每次都讲尽可能的使用最大面值的硬币找零,所以nx > mx (因为S2的找零方案不同于S1,所以一定会有这么一个x满足条件)

我们考虑最小情况,nx - mx = 1

1ck = c0 + (c-1)c0 + (c-1)c1 + … + (c-1)ck-1 > (c-1)c0 &#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值