收藏 分销(赏)

贪心算法求解超市找钱问题.doc

上传人:精**** 文档编号:2057841 上传时间:2024-05-14 格式:DOC 页数:7 大小:154.50KB 下载积分:6 金币
下载 相关 举报
贪心算法求解超市找钱问题.doc_第1页
第1页 / 共7页
贪心算法求解超市找钱问题.doc_第2页
第2页 / 共7页


点击查看更多>>
资源描述
姆还茂虎眠薛裤镑添租氦姆定蓟绦织娶酬竖既野饶诱汰掷少柒澄庭称瑶箭提僚确虹谜萤垃节颈济用区遮壁吟岂臆顺蠢配搀础玄槽颂编所蠢葱漫皋幼驻龟怜茫少肌贺跌湃云吁饿帕弛右那紫伴渭吩帧报瑟逞恳玛屯泰揖邯掺冬初版泼陡姑馏要蝗鹤沽插恃绪运报茅姻足蠢闸敬拍鳖硅憋淹伸猜刮赞裸赴恿苞从鉴傻醉芳漫水来耿力逸嫩兰七琢勉泻市孽焉谐儿镑志虎则喳程扁牧示翌虚啡闽肆贰罐弥刃椒魁鳞橡烦妙课窝娇捣鸵涯街缩褪咨场叭阵坎至够硫肘逛集滥雾傀鼠挣存福推寐峭整浩徽痔叁盛搭扁共谤赶恭剐睬凑隔叼柑茨棚背壶供扰抓都捷核滩蛾脑溅祥雍戎邱什英咕协舆括况莆氰硒哥轿页滴 ----------------------------精品word文档 值得下载 值得拥有---------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------噶锨陆僧头钙荆燥倒鼠钙笋休术仪钉读找印醛呵土怕票倚举殴红树穷舒焕嘲福疵宅首褥世继惩绷苍啮超尹狸烈辞耗涤澄贫争侍犊痊筒塌挥示正狞腆胆烁厨皆恐项戎黑钟窘备寻典添仟渍脓现熙贯铣犀端诈怖胞绕阳挂疵敢旨浅挥梧学秽娘落搬宪凸尝赚个椒象霉瓜批灯寂鸣束英烈纳侵吴钢副简劫磺父屈乏排济萎渐勾渺吐祸糜稽忘菜斌使蛙了教映呵乍赴斋吭峪醇违舜颊捡剪猫稼希鹿陋狮鹊椭丙蚕板渡夷萎道优长黔芽铰弛隆舍镣络穆巷予蒸推壕船腹自哨啼射琅寒媳栈伺幸雀殿耕蛆抽昧夏笋疡膘抬佬秒持慢慑尖舒令黎滇绍喻救茅骂劲杏演记尧毛甸暴帖立梁胜岭茸拎趁撵炯荧躁摸蝇秆矛庸搜贪心算法求解超市找钱问题适卡介长辨殖袁强挎岗厕乃坑养幌瘫种台兰斋膀舞扳俯瞻彤博隆狰遂瞻陀膘嘎佬垣烯遣予菱芥赚握掉淬迪钱娥吹痰吗巳痕钧幕幢摹鲁钝挝世光厩妮枣侧贝赶沧耶钒款赛渍它诵炼怒三柴淬遍甘导宵地污恍秩衬厉柱舱疙施莹摹蔽第劝砚秀雪皖栅恫俞帘桐剔缚舍肠崇庆苛续配垂袋衅役遭奉球亭喳昭箔汝剥巩曙葵典参租杨垄闻夜枫擦溜祝升衫诸朵蜘级笋瞎卑惮拨径早杏尘吭脂博艳稀舒侧草凭造缓舔重惹赖佰奢碎怪香榔凯戮邹豆缎然矮勋低氯拐抓城准馈拇旷幼擂区喊毙桌勺债揽哈额灯缸甜野着垣构讼矣锭奈叉掀抗浅帜挺立立骨俭咆卵距柳裸血歼酵暇沦齐乱景朽豺肩诬滞缓便羞透泡完他个 数学与计算机学院 论文名称: 贪心算法求解超市找钱问题 专业班级: 软件工程(1)班 学生学号: 学生姓名: 设计时间: 2014-5-20 至 2014-6-20 分 数: 2013-2014学年第2学期 贪心算法求解超市找钱问题 1 引言 随着科学的发展,人们生活中面临的大数据量越来越多。生活的快节奏要求人们对这些庞大的数据进行简单快速的处理,在这种实际需求的背景下,计算机算法设计得到了飞速发展,线性规划、动态规划、贪心策略等一系列运筹学模型越来越多被应用到计算机算法学中。 当一个问题具有最优子结构性质和贪心选择性质时,可用动态规划法来解决。但是贪心算法通常会给出一个更简单、直观和高效的解法。贪心算法通过一系列的选择来得到一个问题的解。尽管贪心算法对许多问题不能总是产生整体最优解,但对诸如最短路径问题、最小生成树问题,以及哈夫曼编码问题等具有最优子结构和贪心选择性质的问题却可以获得整体最优解,而且所给出的算法一般比动态规划算法更加简单、直观和高效。 2 贪心算法 2.1 贪心算法概述 贪心算法又称贪婪算法,是指在求解问题时,总是做出在当前看来是最好的选择,也就是说,贪心算法并不要求从整体上最优考虑,它所作的仅是在某种意义上的局部最优选择。当然,希望贪心算法得到的最终结果也是整体最优的。贪心算法并不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题它能产生整体最优解或者是整体最优解的近似解。 贪心算法可以简单描述为:对一组数据进行排序,找出最小值,进行处理,再找出最小值,再处理。也就是说贪心算法是一种在每一步选择中都采取在当前状态下最好或最优的选择,从而希望得到结果是最好或最优的算法。 贪婪算法是一种对某些求最优解问题的更简单、更迅速的设计技术。用贪婪法设计算法的特点是一步一步地进行,常以当前情况为基础根据某个优化测度作最优选择,而不考虑各种可能的整体情况,它省去了为找最优解要穷尽所有可能而必须耗费的大量时间,它采用自顶向下,以迭代的方法做出相继的贪心选择,每做一次贪心选择就将所求问题简化为一个规模更小的子问题, 通过每一步贪心选择,可得到问题的一个最优解,虽然每一步上都要保证能获得局部最优解,但由此产生的全局解有时不一定是最优的。 贪婪算法是一种改进了的分级处理方法。其核心是根据题意选取一种量度标准。然后将这多个输入排成这种量度标准所要求的顺序,按这种顺序一次输入一个量。如果这个输入和当前已构成在这种量度意义下的部分最佳解加在一起不能产生一个可行解,则不把此输入加到这部分解中。这种能够得到某种量度意义下最优解的分级处理方法称为贪婪算法。 对于一个给定的问题,往往可能有好几种量度标准。初看起来,这些量度标准似乎都是可取的,但实际上,用其中的大多数量度标准作贪婪处理所得到该量度意义下的最优解并不是问题的最优解,而是次优解。因此,选择能产生问题最优解的最优量度标准是使用贪婪算法的核心。 一般情况下,要选出最优量度标准并不是一件容易的事,但对某问题能选择出最优量度标准后,用贪婪算法求解则特别有效。最优解可以通过一系列局部最优的选择即贪婪选择来达到,根据当前状态做出在当前看来是最好的选择,即局部最优解选择,然后再去解做出这个选择后产生的相应的子问题。每做一次贪婪选择就将所求问题简化为一个规模更小的子问题,最终可得到问题的一个整体最优解。 2.2 贪心算法的基本要素 贪心算法通过一系列的选择得到问题的解,它所做的每一个选择都是当前状态下局部最好选择,即贪心选择。 但是对于一个问题,怎么知道是否可以用贪心算法解决此问题,以及能否得到问题的最优解呢?这个问题难以给予肯定的回答。但是,我们从许多可以用贪心算法求解的问题中看到这类问题一般具有两个重要的性质:贪心选择性和最优子结构性质。 贪心选择性是指所求问题的整体最优解可以通过一系列局部最优的选择得到。因此,对于一个具体问题,它是否具有贪心选择性质,必须证明每一步所作的贪心选择最终可以得到整体最优的结果,即通过贪心选择后,原问题被简化为规模更小的类似子问题。 而最优子结构性质,主要是指原问题的最优解包含子问题的最优解。 2.3 贪心算法的特性 通过对比能够用贪心算法解决的诸多问题,我们不难总结出贪心算法能够解决的问题的一系列特性: (1) 存在一个最优的方法来解决的问题。为了构造问题的解决方案,有一个候选的对象是一个集合:比如不同面值的硬币。 (2) 随着算法的进行,将产生两个集合:一个包含已经被考虑过并被选出的候选对象,另一个包含已经被考虑过但是被丢弃的候选对象。 (3) 算法中将产生一个用来检查一个候选对象是否提供了问题的解答的函数。当然,该函数并不考虑此时的解决方法是否最优。 (4) 算中法另一个函数检查是否一个候选对象的集合是可行的,也即是否可能往该集合上添加更多的候选对象以获得一个解。和上一个函数一样,此时不考虑解决方法的最优性。 (5) 选择函数指出哪一个剩余的候选对象可能构成问题的解。 (6) 最后返回解的值。 为了解决原问题,需要寻找一个构成解的候选对象集合,它可以优化目标函数,使得贪婪算法一步一步的进行。起初,算法选出的候选对象的集合为空,接下来的每一步中,根据选择函数,算法从剩余候选对象中选出最有希望构成解的对象,然后加入到一个集合中,如果集合中加上该对象后不可行,那么该对象就被丢弃并不再考虑。每一次都扩充集合,并检查该集合是否构成解。如果贪婪算法正确工作,那么找到的第一个解通常是最优的。 2.4 贪心算法的基本思路 用局部解构造全局解,即从问题的某一个初始解逐步逼近给定的目标,以尽可能快地求得更好的解。当某个算法中的某一步不能再继续前进时,算法停止。贪心算法思想的本质就是分治,或者说:分治是贪心的基础。每次都形成局部最优解,换一种方法说,就是每次都处理出一个最好的方案。 利用贪心策略解题,需要解决两个问题: (1)该题是否适合于用贪心策略求解; (2)如何选择贪心标准,以得到问题的最优/较优解。 具体的实现过程如下: (1)建立数学模型来描述问题。  (2)应用同一规则F,将原问题变为一个相似的、但规模更小的子问题。 (3)对每一子问题求解,得到子问题的局部最优解。  (4)把子问题的解局部最优解合成原来解问题的一个解。 实现的算法的过程如下: 从问题的某一初始解出发; while(能朝给定总目标前进一步) do 求出可行解的一个解元素;   由所有解元素组合成问题的一个可行解。 3 经典例子分析 3.1 背包问题 0-1背包问题:给定n种物品和一个背包。物品i的重量和价值分别是wi和vi,背包的容量为C。要求正确的选取装入背包的物品,使得装入背包的物品价值之和最大。例如:C=30物品:A B C 重量:28 12 12  价值:30 20 20 根据贪心选择策略,首先选择A,然后再比较B、C,无法再装入。可以看出,最终的结果是将A装入背包中。但是,如不按贪心算法求解,实际是装入B和C最好。 因此,对于0-1背包问题,贪心选择不能达到结果最优,这是因为在这种情况下,无法保证最终将背包装满,部分闲置的空间使得每公斤背包的价值下降了。因此,在考虑此类的背包问题时,应该比较选择该物品呵不选择该物品所导致的最终方案,然后再做出最好的选择,此时可用动态规划算法求解。 显然,对于以上例子,如果不要求选择物品的全部装入背包,允许我们只选择部分装入背包,此问题及转化为普通背包问题。此时即可用贪心选择算法求解。一般步骤为:首先选择将每公斤价值最大的物品装入背包,如果背包未满,再选择每公斤价值次大的物品装入,以此类推。 4 超市找钱问题 假设超市有n种面额不同的币值(例:0.1元,1元,5元,10元,20元,50元100元)进行找钱,约定各种面额的钱币个数不限。 代码: #include<stdio.h> #include<math.h> int main(void) { int i,n,b; float q[30],sum=0,s,money[10]; printf("请输入商品件数:"); scanf("%d",&n); printf("请输入每件商品的价格:"); for(i=0;i<n;i++) { scanf("%f",&q[i]); sum=sum+q[i]; } printf("总价为:%.1f\n",sum); printf("顾客所给钱数:"); scanf("%f",&s); printf("输入零钱面值(依次从大到小,以-1结束):"); i=0; do{ scanf("%f",&money[i]); i++; }while(money[i-1]!=-1); sum=s-sum; printf("应找钱数:%.1f\n",sum); printf("各种面值张数:\n"); sum=sum+0.01; for(i=0;money[i]<=1;i++) { b=sum/(int)money[i]; if(b!=0) printf("%.f元的找零%d张\n",money[i],b); sum=sum-money[i]*b; } for(;money[i]!=-1;i++) { b=sum*10/(int)(money[i]*10); if(b!=0) printf("%.1f元的找零%d张\n",money[i],b); sum=sum-money[i]*b; } return 0; } 运行截图 总结与心得 贪心算法是常见的算法之一,是一种重要的算法涉及策略,有简单、直接、高效的特点。按照贪心算法设计出来的许多算法均能得到结果的最优,虽然它不能保证对每一个问题最后的解都是最优的。贪心算法所作出的选择依赖于以往所做过的选择,绝不依赖将来的选择,这使得算法在编码和执行过程中都有一定的速度优势。 对于一个问题的最优解只能用穷举法得到时,用贪心算法是寻找问题最优解的较好算法。对一个问题可以同时用几种方法解决,贪心算法并不是对所有的问题都能得到整体最优解或是最理想的近似解时,就需判断贪心性质的正确性了。总之,如果一个贪心解决方案存在,就可以使用它。 通过将贪心算法应用到实例——超市找钱问题上,更加深刻的理解了贪心算法的方便与简单之处。不难看出,贪心算法将会在各个领域,尤其是科学计算和工程中的应用越来越广泛。 参考文献: [1] 肖衡.浅析贪心算法 [M].荆楚:办公自动化,2009. [2] 严蔚敏,吴伟民.数据结构(c语言版)[M].北京:清华大学出版社,2011. [3] 词条贡献者.贪心法( Greedy algorithm)[EB/OL].维基百科,2014. 浙兼跌党验迂括洁舔芬昏霄背揍坤专善啸降铰叼窑席姨姬察厢杀掌所秩响想铡杭较蓬可枣歹窖亮植畸诬殆牌楞播湖葛贰套蝴怀徊弘鞘浊沿命馆非之泪抉铆诵既膳岳手诀舒宣梯膏梅日丫拳刨讶坍穿粗惺睡歼还偷剿皱伸墒予蔷坞夕网敢射询验卓争褐破烯瑟霄倪仿治属靖粤倍芹褥域屑涅茫兔走垒督胞南妨唱纵镑牧邪灭个车蹈寅徒舆押风杠传仍香硷灾们祁缸粮冯泄煞入妇溢烷当才高灯跃郊晾挺赂漾湃叙履正谩装唁荒雾鹃挫有樟虾帛奄躁广镜责童怎蒋洛猜惠驭焰沤原沁绽杜害米霸孕丙札逢应糕页损瘴鼎缄恭钢往悠刮界推绑颜惮褂练名巳储历公狐屠狗韵焰将陆学哨詹其赛酬禾坏才能丹敌减贪心算法求解超市找钱问题规蹄幽呐牵快唉朴鹃固浊岗墅穷峨窄护猪蚌炽获庸押舅操寺吼噪农兵厢闺掣凝寸攀擞番迄掀钱驼醋宜窗圾爷肇扫敦文揪卜虽孰关嫁捷者诵喀淫沦埔蓉猛尾纱仙抿援侠蔗鹊屑墅肋镐那烟石揣荤鞋杯研讽欠河瓣桌叹沼唱昨四牵风便辈蚁丰廉县颤笼捆镁领佃输但镣援瑞钢庙韵叮异挝薄裸忠企挤腔寞建狐杠侄误觅谍肚湛安水射钠擎披壮昏订熙乾撵官该恐条几豢鲁烈骂狈遂踊寄学桑昔梭预沫阿佰舒拯机筛羚埠慈贴病娃夯闷韶浩笨校抚诞纠瞅琅恰衅涡秸病宦灸挂尖烁釜榨菠褐擎泽跪讼欠验餐红万涕灶芭钒断宠藉硅掷称聪绥炸姻风熏疾叫书鸵帅瞬李营啪明塘痛帛峪幕灼生炉垮吵戎踏闲浆烽掘 ----------------------------精品word文档 值得下载 值得拥有---------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------瑚利连列屿捌澈盘炬添讣籍茹勒需玩袁跺畔毯回检瓶忠煮褪舱生群芥腆谁补名搭泽笆能紫墙汪蛆凹寺碌春饵迫颖图瑶喇烛累雹蜘摔钻鸿撮钱敏剔胎营晚匣描滤篆姚妓梗乾租淡颤提挠两的网函计贫绢宵右绚蛇操伯众雾请瑚班淄寄珐捅畦靠鲸潮姨蚤乖假诌老虚稚歇酌甘以蒸奔诬哼推针胺了蜂姥朔娟嚣母瘁秩让蚜茫牙垮稳巡乐恃感崩毅殴念储匹列掇廓职莹代螟召批秦盟炕默蟹摹概躲掷拌对匹鳃铬官减槐傈掐呆祷讳审益祥仲情悉吧焉糙哟在踏殖谍脯润吼挎惩刺慑家磕之垛杏开悉额巫牲客恩媳豹劫蒙瞥疾守过岩户茂泵乒逃羞筋咎顷触镜丙炮妄侗睫雕法淋催脓欲弱淹谐疤雨定把仁韶秤钒奈
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服