ImageVerifierCode 换一换
格式:DOC , 页数:7 ,大小:160.50KB ,
资源ID:7193244      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-7193244.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(贪心算法求解超市找钱问题.doc)为本站会员(Facebook)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

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

1、数学与计算机学院论文名称: 贪心算法求解超市找钱问题 专业班级: 软件工程(1)班 学生学号: 学生姓名: 设计时间: 2014-5-20 至 2014-6-20 分 数: 2013-2014 学年第 2 学期贪心算法求解超市找钱问题1 引言随着科学的发展,人们生活中面临的大数据量越来越多。生活的快节奏要求人们对这些庞大的数据进行简单快速的处理,在这种实际需求的背景下,计算机算法设计得到了飞速发展,线性规划、动态规划、贪心策略等一系列运筹学模型越来越多被应用到计算机算法学中。当一个问题具有最优子结构性质和贪心选择性质时,可用动态规划法来解决。但是贪心算法通常会给出一个更简单、直观和高效的解法。

2、贪心算法通过一系列的选择来得到一个问题的解。尽管贪心算法对许多问题不能总是产生整体最优解,但对诸如最短路径问题、最小生成树问题,以及哈夫曼编码问题等具有最优子结构和贪心选择性质的问题却可以获得整体最优解,而且所给出的算法一般比动态规划算法更加简单、直观和高效。2 贪心算法2.1 贪心算法概述贪心算法又称贪婪算法,是指在求解问题时,总是做出在当前看来是最好的选择,也就是说,贪心算法并不要求从整体上最优考虑,它所作的仅是在某种意义上的局部最优选择。当然,希望贪心算法得到的最终结果也是整体最优的。贪心算法并不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题它能产生整体最优解或者是整体最优解

3、的近似解。贪心算法可以简单描述为:对一组数据进行排序,找出最小值,进行处理,再找出最小值,再处理。也就是说贪心算法是一种在每一步选择中都采取在当前状态下最好或最优的选择,从而希望得到结果是最好或最优的算法。贪 婪 算 法 是 一 种 对 某 些 求 最 优 解 问 题 的 更 简 单 、 更 迅 速 的 设 计 技 术 。 用 贪 婪 法 设 计算 法 的 特 点 是 一 步 一 步 地 进 行 , 常 以 当 前 情 况 为 基 础 根 据 某 个 优 化 测 度 作 最 优 选 择 , 而不 考 虑 各 种 可 能 的 整 体 情 况 , 它 省 去 了 为 找 最 优 解 要 穷 尽 所

4、 有 可 能 而 必 须 耗 费 的 大 量 时间 , 它 采 用 自 顶 向 下 ,以 迭 代 的 方 法 做 出 相 继 的 贪 心 选 择 ,每 做 一 次 贪 心 选 择 就 将 所 求 问题 简 化 为 一 个 规 模 更 小 的 子 问 题 , 通 过 每 一 步 贪 心 选 择 ,可 得 到 问 题 的 一 个 最 优 解 , 虽然 每 一 步 上 都 要 保 证 能 获 得 局 部 最 优 解 , 但 由 此 产 生 的 全 局 解 有 时 不 一 定 是 最 优 的 。贪 婪 算 法 是 一 种 改 进 了 的 分 级 处 理 方 法 。 其 核 心 是 根 据 题 意 选

5、取 一 种 量 度 标 准 。 然后 将 这 多 个 输 入 排 成 这 种 量 度 标 准 所 要 求 的 顺 序 , 按 这 种 顺 序 一 次 输 入 一 个 量 。 如 果 这个 输 入 和 当 前 已 构 成 在 这 种 量 度 意 义 下 的 部 分 最 佳 解 加 在 一 起 不 能 产 生 一 个 可 行 解 , 则不 把 此 输 入 加 到 这 部 分 解 中 。 这 种 能 够 得 到 某 种 量 度 意 义 下 最 优 解 的 分 级 处 理 方 法 称 为贪 婪 算 法 。 对 于 一 个 给 定 的 问 题 , 往 往 可 能 有 好 几 种 量 度 标 准 。 初

6、看 起 来 , 这 些 量 度 标 准 似 乎都 是 可 取 的 , 但 实 际 上 , 用 其 中 的 大 多 数 量 度 标 准 作 贪 婪 处 理 所 得 到 该 量 度 意 义 下 的 最优 解 并 不 是 问 题 的 最 优 解 , 而 是 次 优 解 。 因 此 , 选 择 能 产 生 问 题 最 优 解 的 最 优 量 度 标 准是 使 用 贪 婪 算 法 的 核 心 。 一 般 情 况 下 , 要 选 出 最 优 量 度 标 准 并 不 是 一 件 容 易 的 事 , 但 对 某 问 题 能 选 择 出 最 优量 度 标 准 后 , 用 贪 婪 算 法 求 解 则 特 别 有

7、效 。 最 优 解 可 以 通 过 一 系 列 局 部 最 优 的 选 择 即 贪婪 选 择 来 达 到 ,根 据 当 前 状 态 做 出 在 当 前 看 来 是 最 好 的 选 择 , 即 局 部 最 优 解 选 择 , 然 后再 去 解 做 出 这 个 选 择 后 产 生 的 相 应 的 子 问 题 。 每 做 一 次 贪 婪 选 择 就 将 所 求 问 题 简 化 为 一个 规 模 更 小 的 子 问 题 , 最 终 可 得 到 问 题 的 一 个 整 体 最 优 解 。2.2 贪 心 算 法 的 基 本 要 素贪 心 算 法 通 过 一 系 列 的 选 择 得 到 问 题 的 解 ,

8、它 所 做 的 每 一 个 选 择 都 是 当 前 状 态 下 局部 最 好 选 择 , 即 贪 心 选 择 。但 是 对 于 一 个 问 题 , 怎 么 知 道 是 否 可 以 用 贪 心 算 法 解 决 此 问 题 , 以 及 能 否 得 到 问 题的 最 优 解 呢 ? 这 个 问 题 难 以 给 予 肯 定 的 回 答 。 但 是 , 我 们 从 许 多 可 以 用 贪 心 算 法 求 解 的问 题 中 看 到 这 类 问 题 一 般 具 有 两 个 重 要 的 性 质 : 贪 心 选 择 性 和 最 优 子 结 构 性 质 。贪 心 选 择 性 是 指 所 求 问 题 的 整 体 最

9、 优 解 可 以 通 过 一 系 列 局 部 最 优 的 选 择 得 到 。 因 此 ,对 于 一 个 具 体 问 题 , 它 是 否 具 有 贪 心 选 择 性 质 , 必 须 证 明 每 一 步 所 作 的 贪 心 选 择 最 终 可以 得 到 整 体 最 优 的 结 果 , 即 通 过 贪 心 选 择 后 , 原 问 题 被 简 化 为 规 模 更 小 的 类 似 子 问 题 。而 最 优 子 结 构 性 质 , 主 要 是 指 原 问 题 的 最 优 解 包 含 子 问 题 的 最 优 解 。2.3 贪 心 算 法 的 特 性通过对比能够用贪心算法解决的诸多问题,我们不难总结出贪心算法

10、能够解决的问题的一系列特性:(1) 存在一个最优的方法来解决的问题。为了构 造 问 题 的 解 决 方 案 ,有 一 个 候 选 的对 象 是 一 个 集 合 : 比 如 不 同 面 值 的 硬 币 。 (2) 随着算法的进行,将产生两个集合:一个包含已经被考虑过并被选出的候选对象,另一个包含已经被考虑过但是被丢弃的候选对象。(3) 算法中将产生一个用来检查一个候选对象是否提供了问题的解答的函数。当然,该函数并不考虑此时的解决方法是否最优。(4) 算中法另 一 个 函 数 检 查 是 否 一 个 候 选 对 象 的 集 合 是 可 行 的 ,也 即 是 否 可 能 往该 集 合 上 添 加 更

11、 多 的 候 选 对 象 以 获 得 一 个 解 。 和 上 一 个 函 数 一 样 ,此 时 不 考 虑 解 决 方 法的 最 优 性 。( 5) 选 择 函 数 指 出 哪 一 个 剩 余 的 候 选 对 象 可 能 构 成 问 题 的 解 。( 6) 最 后 返 回 解 的 值 。为 了 解 决 原 问 题 ,需 要 寻 找 一 个 构 成 解 的 候 选 对 象 集 合 ,它 可 以 优 化 目 标 函 数 ,使 得贪 婪 算 法 一 步 一 步 的 进 行 。 起 初 ,算 法 选 出 的 候 选 对 象 的 集 合 为 空 , 接 下 来 的 每 一 步 中 ,根据 选 择 函 数

12、 ,算 法 从 剩 余 候 选 对 象 中 选 出 最 有 希 望 构 成 解 的 对 象 , 然 后 加 入 到 一 个 集 合中 , 如 果 集 合 中 加 上 该 对 象 后 不 可 行 , 那 么 该 对 象 就 被 丢 弃 并 不 再 考 虑 。 每 一 次 都 扩 充集 合 , 并 检 查 该 集 合 是 否 构 成 解 。 如 果 贪 婪 算 法 正 确 工 作 , 那 么 找 到 的 第 一 个 解 通 常 是最 优 的 。2.4 贪 心 算 法 的 基 本 思 路用局部解构造全局解,即从问题的某一个初始解逐步逼近给定的目标,以尽可能快地求得更好的解。当某个算法中的某一步不能再

13、继续前进时,算法停止。贪心算法思想的本质就是分治,或者说:分治是贪心的基础。每次都形成局部最优解,换一种方法说,就是每次都处理出一个最好的方案。利用贪心策略解题,需要解决两个问题:(1)该题是否适合于用贪心策略求解;(2)如何选择贪心标准,以得到问题的最优/较优解。具体的实现过程如下:( 1) 建 立 数 学 模 型 来 描 述 问 题 。 ( 2) 应用同一规则 F,将原问题变为一个相似的、但规模更小的子问题。 ( 3) 对 每 一 子 问 题 求 解 , 得 到 子 问 题 的 局 部 最 优 解 。 ( 4) 把 子 问 题 的 解 局 部 最 优 解 合 成 原 来 解 问 题 的 一

14、 个 解 。 实 现 的 算 法 的 过 程 如 下 : 从 问 题 的 某 一 初 始 解 出 发 ; while( 能 朝 给 定 总 目 标 前 进 一 步 )do 求 出 可 行 解 的 一 个 解 元 素 ; 由 所 有 解 元 素 组 合 成 问 题 的 一 个 可 行 解 。 3 经 典 例 子 分 析3.1 背包问题0-1 背包问题:给定 n 种物品和一个背包。物品 i 的重量和价值分别是 wi 和 vi,背包的容量为 C。要求正确的选取装入背包的物品,使得装入背包的物品价值之和最大。例如:C=30 物 品 : A B C 重 量 : 28 12 12 价 值 : 30 20

15、20根据贪心选择策略,首先选择 A,然后再比较 B、C,无法再装入。可以看出,最终的结果是将 A 装入背包中。但是,如不按贪心算法求解,实际是装入 B 和 C 最好。因此,对于 0-1 背包问题,贪心选择不能达到结果最优,这是因为在这种情况下,无法保证最终将背包装满,部分闲置的空间使得每公斤背包的价值下降了。因此,在考虑此类的背包问题时,应该比较选择该物品呵不选择该物品所导致的最终方案,然后再做出最好的选择,此时可用动态规划算法求解。显然,对于以上例子,如果不要求选择物品的全部装入背包,允许我们只选择部分装入背包,此问题及转化为普通背包问题。此时即可用贪心选择算法求解。一般步骤为:首先选择将每

16、公斤价值最大的物品装入背包,如果背包未满,再选择每公斤价值次大的物品装入,以此类推。4 超市找钱问题假设超市有 n 种面额不同的币值( 例:0.1 元,1 元,5 元,10 元,20 元,50 元 100 元)进行找钱,约定各种面额的钱币个数不限。代码:#include #include int main(void) int i,n,b; float q30,sum=0,s,money10; printf(“请输入商品件数:“); scanf(“%d“, printf(“请输入每件商品的价格:“); for(i=0;in;i+) scanf(“%f“, sum=sum+qi; printf(“

17、总价为:%.1fn“,sum); printf(“顾客所给钱数:“); scanf(“%f“, printf(“输入零钱面值(依次从大到小,以-1 结束):“); i=0; do scanf(“%f“, i+; while(moneyi-1!=-1); sum=s-sum; printf(“应找钱数:%.1fn“,sum); printf(“各种面值张数:n“); sum=sum+0.01; for(i=0;moneyi=1;i+) b=sum/(int)moneyi; if(b!=0) printf(“%.f 元的找零%d 张n“,moneyi,b); sum=sum-moneyi*b; f

18、or(;moneyi!=-1;i+) b=sum*10/(int)(moneyi*10); if(b!=0) printf(“%.1f 元的找零%d 张n“,moneyi,b); sum=sum-moneyi*b; return 0; 运行截图总结与心得贪心算法是常见的算法之一,是一种重要的算法涉及策略,有简单、直接、高效的特点。按照贪心算法设计出来的许多算法均能得到结果的最优,虽然它不能保证对每一个问题最后的解都是最优的。贪心算法所作出的选择依赖于以往所做过的选择,绝不依赖将来的选择,这使得算法在编码和执行过程中都有一定的速度优势。对于一个问题的最优解只能用穷举法得到时,用贪心算法是寻找问题最优解的较好算法。对一个问题可以同时用几种方法解决,贪心算法并不是对所有的问题都能得到整体最优解或是最理想的近似解时,就需判断贪心性质的正确性了。总之,如果一个贪心解决方案存在,就可以使用它。通过将贪心算法应用到实例超市找钱问题上,更加深刻的理解了贪心算法的方便与简单之处。不难看出,贪心算法将会在各个领域,尤其是科学计算和工程中的应用越来越广泛。参考文献:1 肖衡.浅析贪心算法 M荆楚:办公自动化,20092 严蔚敏,吴伟民.数据结构(c 语言版)M.北京:清华大学出版社,2011 3 词条贡献者.贪心法( Greedy algorithm)EB/OL.维基百科,2014

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报