- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第4章-贪心法
整数的分划问题(较复杂的递归设计) 模型建立 * 算法正确性证明 定理4.10 当算法进行到第 k 步时,对于S 中每个结点 i, dist[i] = short[i] 归纳基础 k=1, S={s}, dist[s]=short[s]=0, 命题为真. 归纳步骤 假设命题对于k 为真. 考虑 k+1步, 选择顶点v (边 {u,v}). 假若存在另一条 s-v 路径 L (绿色),最后一次出S 的 顶点为 x, 在这次从S 中出来后 经过V?S 的第一个顶点为 y. 时间复杂度 T(n)=O(n2) dist[v]=short[v] s u x y v L S dist[v] ? dist[y] //v先被选 ? dist[y]+d(y,v) ? L * 贪心法小结 适用于组合优化问题, 求解过程是多步判断. 判断的依据是局部最优策略,使目标值达到最大(或最小),与前面的子问题计算结果无关. (2) 局部最优策略的选择是算法正确性的关键. (3) 正确性证明方法:数学归纳法、交换论证. 使用数学归纳 法主要通过对算法步数或者问题规模进行归纳. 如果要证 明贪心策略是错误的,只需举出反例. (4) 自顶向下求解,通过选择将问题归约为小的子问题. (5) 如果贪心法得不到最优解,可以对问题的输入进行分析 或者估计算法的近似比. (6) 如果对原始数据排序之后,贪心法往往是一轮处理,时 间复杂度和空间复杂度低. * 不同算法策略特点 贪心法:通过局部最优决策到达全局最优决策 递推法:由当前问题的逐步解决从而得到整个问题的解,它依赖信息间递推关系,由小到大。 (3) 递归法:利用大问题与其子问题间的递推关系。将大问题分解成规模较小的问题,然后从小问题的解构造出大问题的解。 (4) 枚举法:逐一尝试。 (5) 递归回溯法:通过递归尝试遍历问题各个可能解的通路,不同时回溯上一步。 (6) 分治法:复杂问题分解成独立子问题并解决,再将它们的解合成。 (7) 动态规划法:保留多个阶段的决策结果,为以后每个阶段提供决策;问题不能分为独立阶段,且符合最优化原理;解决子问题冗余。 * 算法策略间的关联 对问题进行分解的算法策略:分治法、动态规划 多阶段逐步解决问题的策略:贪心法、递推法、递归法、动态规划 全面逐一尝试:枚举法、递归回溯法 对于一个正整数n的分划就是把n写成一系列正整数之和的表达式。例如,对于正整数n=6,它可以分划为: 6 ?5+1 ?4+2, ?4+1+1 ?3+3, ?3+2+1, ?3+1+1+1 ?2+2, ?2+2+1+1, ?2+1+1+1+1 ?1+1+1+1+1+1 根据例子发现“包括第一行以后的数据不超过6,包括第二行的数据不超过5,……,第六行的数据不超过1”。 因此,定义一个函数Q(n,m),表示整数n的“任何被加数都不超过m”的分划的数目,n的所有分划的数目P(n)=Q(n,n)。 一般地Q(n,m)有以下递归关系: 1)Q(n,n)=1+Q(n,n-1) (m=n) Q(n,n-1)表示n的所有其他分划,即最大被加数m=n-1的划分。 2)Q(n,m)=Q(n,m-1)+Q(n-m,m) (mn) Q(n,m-1)表示被加数中不包含m的分划的数目; Q(n-m,m)表示被加数中包含(注意不是小于)m的分划的数目, 递归的停止条件: 1)Q(n,1)=1,表示当最大的被加数是1时,该整数n只有一种分划,即n个1相加; ?2)Q(1,m)=1,表示整数n=1只有一个分划,不管最大被加数的上限m是多大。 埃及分数 设计一个算法, 把一个真分数表示为埃及分数之和的形式。所谓埃及分数,是指分子为1的形式。如:7/8=1/2+1/3+1/24。 问题分析 数学模型 算法设计 算法实现 问题分析 基本思想是, 逐步选择分数所包含的最大埃及分数, 这些埃及分数之和就是问题的一个解。 如:7/81/2, 7/8-1/21/3, 7/8-1/2-1/3=1/24。 过程如下: 1)找最小的n(也就是最大的埃及分数),使分数f1/n; 2)输出1/n; 3)计算f=f-1/n; 4)若此时的f是埃及分数,输出f,算法结束,否则返回1)。 数学模型 记
文档评论(0)