算法设计方案及解析总结模板计划模板课程设计方案.doc

算法设计方案及解析总结模板计划模板课程设计方案.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法设计与分析课程设计 一、 课程题目 零钱问题贪心算法实现 二、课程摘要 1)题目描述 使用贪心算法设计思想设计算法实现找零钱问题。 例题 13-4 一个小孩买了价值少于 1 美元的糖,并将 1 美元的钱交给售货员。售货员希望用 数目最少的硬币找给小孩。假设提供了数目不限的面值为 2 5 美分、 1 0 美分、 5 美分、及 1 美分的硬币。 售货员分步骤组成要找的零钱数, 每次加入一个硬币。 选择硬币时所采用的贪 婪准则如下:每一次选择应使零钱数尽量增大。为保证解法的可行性(即: 所给的零钱等于 要找的零钱数) ,所选择的硬币不应使零钱总数超过最终所需的数目。 1)在给定钱币面值的前提下,实现找回尽量少硬币的输出方案 2)分析算法性能 2)贪心算法简述 在求最优解问题的过程中, 依据某种贪心标准, 从问题的初始状态出发, 直接去求每一步的 最优解,通过若干次的贪心选择, 最终得出整个问题的最优解, 这种求解方法就是贪心算法。 从贪心算法的定义可以看出, 贪心法并不是从整体上考虑问题, 它所做出的选择只是在某种 意义上的局部最优解, 而由问题自身的特性决定了该题运用贪心算法可以得到最优解。 贪心 算法所作的选择可以依赖于以往所作过的选择, 但决不依赖于将来的选择, 也不依赖于子问 题的解, 因此贪心算法与其它算法相比具有一定的速度优势。 如果一个问题可以同时用几种 方法解决, 贪心算法应该是最好的选择之一。 本文讲述了贪心算法的含义、 基本思路及实现 过程, 贪心算法的核心、 基本性质、 特点及其存在的问题。并通过贪心算法的特点举例列出 了以往研究过的几个经典问题, 对于实际应用中的问题, 也希望通过贪心算法的特点来解决。 三、课程引言 首先,证明找零钱问题的贪婪算法总能产生具有最少硬币数的零钱。 证明:(1)找零钱问题的最优解必以一个贪心选择开始,当总金额为 N,硬币面值为 25,10, 5,1 时。 设最大容许的硬币面值为 m,最优解必包含一个面值为 m 的硬币 : 设 A 是一个最优解,且 A 中的第 i 个硬币面值为 f(i)。 f(1)=m (此处为 25) ,得证; 若 f(1)<m, 则:A 中若存在 Ak,使 f(k)=m, 将第 i 个硬币与第 1 个调换位置, 硬币数目不变,仍是一个最优解。 A 中若不存在 Ak 使 f(k)=m,则必有 n 个硬币 (n>1)之和 <m,用 m 代替它们后得到一个最优解 B,因 B 的数目小于 A,这与 A 是最优解矛盾。 故此问题总有最优解始于贪心选择。 ( 2)已证明 A 是最优解且 A 始于贪心选择。则 A'=A-{1}是找出总额为 M-f(1) 零钱的一个 最优解。 若有解 B'使找零钱数少于 A',则将 m 加入 B'中,得到一个原问题的最优解且优于 A, 这与 A 是最优解矛盾。可见每步所作的贪心选择都将原问题简化为一个规模较小的子问题,对贪心步数归纳 ,得证此问题贪心必有最优解。 四、课程正文 算法设计、分析 解决找零钱问题用动态规划来解, 归结到动态规划上面就变成了无限背包问题 (因为收银台 的硬币默认是无穷的,但一种改进版本可以考察有限硬币的情况) 。区别在于,现在我们需 要求一个最少的硬币数而不是最大值。 但是选择的情况也是相同的, 即每次选择都可以选择 任何一种硬币。 首先,找零钱问题具有最优子结构性质: 兑换零钱问题的最优子结构表述:对于任意需要找的钱数 j,一个利用 T[n]中的 n 个不同面 值钱币进行兑换零钱的最佳方案为 P(T(1),j),P(T(2),j),...,P(T(n),j),即此时的最少钱币个数 n C( n, j ) P(T(k), j) k 1 ,则 P(T(2),j),...,P(T(n),j)一定是利用 T[n]中 n 个不同的面值钱币对钱数 j=j-P(T(1),j)* T(1) 进行兑换零钱的最佳方案。 其次,找零钱问题具有重叠于问题性质: 当 n=1 时,即只能用一种钱币兑换零钱,钱币的面值为 T[0] ,有 C(1, j ) j %T [ 1] 0 j /T [1] j %T [ 1] 0 b)当 n>1 时, 若 j>T[n], 即第 n 种钱币面值比所兑换零钱数小 ,因此有 C (n, j ) min1kn { C (n, j T [k ]) 1} 。 当 k 为 k 0 (1 i n) 时, C(n,j)达到最小值,有 P(T(k0),j)=P(T(k 0 ), j-T( k0 ))+1 若 j=T[n] ,即用 n 种钱币兑换零钱,第 n 种钱币面值与兑换零钱数 j 相等,此时有 C(n,j)=C(n,T[n])=1; P(i , j ) P(i, T

文档评论(0)

zdq5660 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档