这种登录不是让我吃惊吗?先登一下,然后让你看自己的东西,发不了东西,然后再登陆一下……
贪心的利用应该是让大家想到了进制和函数的 推荐,实际上如果适当更改一下取舍函数绝对可以有一个明显的改善,比如如果追求的是比较少的硬币匹配,就看一下是不是有整除。
附原文:
首先从贪心算法的一个名题说起,硬币找零问题。当找零时,用最大金额的硬币先匹配,然后再对余额再用最大金额进行匹配。在贪心算法的另一个题中,0-1背包问题,则又多了一些限制,即要求在容量的限制下装入尽可能多的价值的货物。引入到硬币题中,我们可以为国家货币发行机关制定这样的假设:每次找零要求硬币数最小。
那么由此产生下面这些想法:
1,究竟贪心法的正确率怎么样?
事实和理论都已经证明,贪心法是一种渐近最优解,它未必是最优的解。事实确实是这样,考虑下面一种硬币面值组合1、3、4,当需要找零6的时候,贪心算法会按照4、1、1的方案,而事实上,3、3的方案才是最优解。那么我们马上会想到,是不是最优解会在最大面值和第二面值两者之一产生呢?
事实也证明这也只是猜想,考虑1、8、9、11这四种面值的硬币,要找零24的时候,首先产生解11、11、1、1,然后是解9、9、1、1、1、1、1、1,而实际上8、8、8才是最优解。
于是我们可以知道,这种机制是没有办法产生确定的最优解的。
2,接下来的问题是:要满足怎么样条件的面值组合,才能够在所有情况下能用贪心法来求解呢?
首先考虑我们实际存在的硬币组合1、2、5,几乎所有的情况下,它都不会造成误解,
1=1
2=2
3=1+2
4=2+2
5=5
6=1+5
7=2+5
8=1+2+5
9=2+2+5
那我们再来考虑1、2、4这个组合
1=1
2=2
3=1+2
4=4
5=1+4
6=2+4
7=1+2+4
8=4+4
9=4+4+1
我们可以发现,为了表现1-9这9种金额,1、2、4和1、2、5的平均找零硬币个数是相等的。
如果我们在1、2、4中再添加一个8(这是很容易让人联想到的),会不会有什么新奇的结果呢?
事实上,如果我们没有10元钞票的话,添加一个8元的钞票确实能够减少平均找零硬币个数,但不幸的是,我们使用十进制,所以加入一个8元的面值硬币对我们并没有什么太大的显著改进。但是不可否认,从这一点上我们可以发现一些规律。
3,考虑完上述数学逻辑上的问题以后,我们把目光再放回到实际的问题上,我们已经制定了1、2、5的组合策略,现在让我们来想一想,为什么这个策略被选中了呢?
那是因为(正如上文已经说过的)我们使用的十进制,因此在124与125这类的面值都能够很好的满足贪心算法的前提下,我们当然会更愿意选择125这种方案,因为i10=5*2,更加让人心里觉得舒服。
因此,我们可以把硬币面值制定策略所要遵循的规则总结为:必须满足贪心算法(因为大多数人可以使用这种比较少费脑子的方法进行计算),必须在心理上尽量满足人们对于十进制运算的方便性考虑(这也是125方案被选中的原因)
有了这个结论,我们不妨再思考另外一个有趣的并且与计算机不相关的问题:为什么人们会倾向于喜欢使用贪心法来解决问题(也可以认为尤其是金融问题)。
贪心法这个名字取得很好,从名字上我们也许也能得到一些启示。
如果我们继续研究下去,明白了贪心法与人们的心理的关系,或许我们可以把问题推移到经济学领域,思考一下利用贪心法建立起来的模型在对于估计人们的消费活动、博弈等领域可以起到的新作用,也许我们可以从中发现一些新的理论。