CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
【经验总结】不能实施并行处理的情况 浅谈并行编程中的任务分解模式
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  专题开发/技术/项目 >  数据结构与算法

证明这个算法最优

楼主hy_bug(蓝虫)2002-07-13 23:39:26 在 专题开发/技术/项目 / 数据结构与算法 提问

有硬币面值25分,10分,5分,1分。  
  要找的硬币数目最少。  
  找零钱时,从大往小找。  
  如,67分,  
  25*2+10+5+1*2,  
  此种找法最优。请证明(用数学方法)。  
  若硬币面值不同,为任意值(大面值不能由小面值斗出,如50,40,29,1),  
  何种算法最优? 问题点数:50、回复次数:8Top

1 楼quicmous(快鼠)回复于 2002-07-13 23:53:16 得分 0

大票换成小票,当然票子的数量会增加。小票尽量换成大票,票子的数量就会减少。这种问题不需要进行复杂的论证吧!Top

2 楼hy_bug(蓝虫)回复于 2002-07-14 00:08:04 得分 0

若面值不规则呢?  
  大票不能换成整数张小票Top

3 楼chenggn(chenggn)回复于 2002-07-14 00:19:40 得分 0

这个问题   可以归结   减去一个可减的最大值   后为同类的更小问题  
   
  若硬币面值不同,为任意值   种算法最优?  
   
  肯定是这样的!   贪心嘛!!!  
   
  Top

4 楼chenggn(chenggn)回复于 2002-07-14 00:23:04 得分 0

比如   100   的rmb   3张  
    和10   元rmb     4张  
   
  让你取4张   取面值得最大  
   
  肯定是现取完了   100   的再说   有100   的就不要10的  
   
  通用的对于任何问题    
  证明是否可用贪心法   通常使用矩阵赔理论   不过我不太懂  
   
  至于证明这个题   线性规划吧  
   
  Top

5 楼chenggn(chenggn)回复于 2002-07-14 00:31:04 得分 0

若面值不规则呢?  
  大票不能换成整数张小票  
   
  根这没关系!  
   
  难道   。。。  
   
  你自己想吧。  
   
  利清头绪   别把问题搞混了  
   
  附:     证明如下    
  f(N)表示N用M张面值为   m1,   m2,   m3...   mm   【降序排列】的面值的最少张数。  
  显然有   f(N)=   min{f(N-m1)+1   ,   f(N-m2)+1,....   }  
  显然   f(N-m[i+1])>=f(N-m[i])  
   
  所以得证  
  f(N)表示N用M张面值为   m1,   m2,   m3...   mm   (降序排列)的面值的最少张  
  f(N)=   f(N-m1)+1Top

6 楼quicmous(快鼠)回复于 2002-07-15 00:03:53 得分 0

呵呵,我给个证明吧!  
  命题1   如果硬币只有8,7,1两种,对于任意整数N,试图先用大面值硬币后用小面值硬币组合出该数量,硬币数量并不能总是达到最小。  
  证明:  
  取N=14,则    
      N   =   8   +   1   +   1   +   1   +   ...   +   1   ,共7枚硬币  
  同时  
      N   =   7   +   7,共两枚硬币。  
  命题得证。  
   
   
  注:主要原因是8   <   7   +   7  
  ========================================================  
  命题2  
  有硬币面值25分,10分,5分,1分。  
  要找的硬币数目最少。  
  找零钱时,从大往小找。  
   
  证明:  
  因为:  
  25   >=   10   +   10  
  10   >=   5   +   5  
  5   >=   1   +   1  
  因此,命题得证。  
  Top

7 楼quicmous(快鼠)回复于 2002-07-15 00:41:55 得分 50

可以用数学归纳法证明,如果数列a[1],a[2],...,a[n]满足:  
  a[1]=1,a[1]+a[1]<=a[2],a[2]+a[2]<=a[3],...,那么首先选择最大的数列项必然导致硬币总数最少。  
  证明:  
  (1)n=1时,只有一枚面值为1的硬币,命题显然正确。  
  (2)设n=k时,命题正确。则n=k+1时,  
  设给定金额N,用a[1],a[2],...,a[k]得到的最优解是   m   枚硬币,  
  如果N   <   a[k+1],则用a[1],a[2],...,a[k+1]得到的最优解是   m   枚硬币;  
  如果N   >=   a[k+1],则必然可以用a[k+1]代替多于1个的a[1],...,a[k],用a[1],a[2],...,a[k+1]得到的最优解必然少于   m   枚硬币;  
  因此,n=k+1时命题(首先选择最大的数列项必然导致硬币总数最少)仍然成立.  
  所以,对于任意自然数n,原命题成立!  
  Top

相关问题

  • 求一最优算法
  • 最优下料算法
  • 求一最优算法
  • 最优逼近算法紧急求助!!!
  • 最优算法问题(200分)
  • 最优二叉搜索树算法
  • 算法dijkstra是最优的么?
  • 请教:最优化裁剪算法......
  • 求一个正整数的位数,求最优算法和最简短算法
  • zip的压缩算法是基于最优树理论吗?

关键词

  • 硬币
  • 算法
  • 面值
  • 最优
  • 证明
  • 命题
  • 小票
  • 换成
  • 整数
  • 票

得分解答快速导航

  • 帖主:hy_bug
  • quicmous

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
惹火投票。。火热进行中...
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
CSDN网站24小时值班电话:13552009689
Copyright © 2000-2009, CSDN.NET, All Rights Reserved
GongshangLogo