第四章4(贪心、动态)研讨.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第 四 章 基本的算法策略; 贪婪法又叫登山法, 它的根本思想是逐步到达山顶,即逐步获得最优解。贪婪算法没有固定的算法框架,算法设计的关键是贪婪策略的选择。一定要注意,选择的贪婪策略要具有无后向性。某状态以后的过程和不会影响以前的状态,只与当前状态或以前的状态有关,称这种特性为无后效性。 上节 下节; 【例1】键盘输入一个高精度的正整数N,去掉其中任意S个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数最小。 输入数据均不需判错。输出应包括所去掉的数字的位置和组成的新的正整数(N不超过240位)。 数据结构设计:对高精度正整数的运算在上一节我们刚刚接触过,和那里一样,将输入的高精度数存储为字符串格式。根据输出要求设置数组,在删除数字时记录其位置。 上节 下节; 问题分析 在位数固定的前提下,让高位的数字尽量小其值就较小,依据此贪婪策略就可以解决这个问题。 怎么样根据贪婪策略删除数字呢?总目标是删除高位较大的数字,具体地相邻两位比较若高位比低位大则删除高位。我们通过“枚举归纳”设计算法的细节,看一个实例(s=3) : n1=“1 2 4 3 5 8 6 3” 4比3大 删除 “1 2 3 5 8 6 3” 8比6大 删除 “1 2 3 5 6 3” 6比3大 删除 “1 2 3 5 3” 只看这个实例,有可能“归纳”出不正确的算法,先看下一个实例,我们再进一步解释: n2=”2 3 1 1 8 3” 3比1大 删除 “2 1 1 8 3” 2比1大 删除 “ 1 1 8 3” 8比3大 删除 “ 1 1 3”;由实例n1,相邻数字只需要从前向后比较;而从实例n2中可以看出当第i位与第i+1位比较,若删除第i位后,必须向前考虑第i-1位与第i+1位进行比较,才能保证结果的正确性。 由此可知通过实例设计算法时,枚举的实例一定要有全面性,实例最好要能代表所有可能的情况,或者在必要时多列举几个不同的实例。再看以下两个实例又可总结出一些需要算法特殊处理??情况。 n3=”1 2 3 4 5 6 7” s=3 由这个实例看出,经过对n3相邻比较一个数字都没有删除,这就要考虑将后三位进行删除,当然还有可能,在相邻比较的过程中删除的位数小于s时,也要进行相似的操作。 n4=”1 2 0 0 8 3” 3比0大 删除 “1 0 0 8 3” 2比0大 删除 “ 0 0 8 3” 8比3大 删除 “ 0 0 3” 得到的新数数据是3; 由这个实例子又能看出,当删除掉一些数字后,结果的高位有可能出现数字“0”,直接输出这个数据不合理,要将结果中高位的数字“0”全部删除掉,再输出。特别地还要考虑若结果串是“0000”时,不能将全部“0”都删除,而要保留一个“0”最后输出。 由此可以看出进行算法设计时,从具体到抽象的归纳一定要选取大量不同的实例,充分了解和体会解决问题的过程、规律和各种不同情况,才能设计出正确的算法。 算法设计1: 根据以上实例分析,算法主要由四部分组成:初始化、相邻数字比较(必要时删除)、处理比较过程中删除不够s位的情况和结果输出。 其中删除字符的实现方法很多,如: ;1)物理进行字符删除,就是用后面的字符覆盖已删除的字符,字符串长度改变。这样可能会有比较多字符移动操作,算法效率不高。 1) 可以利用数组记录字符的存在状态,元素值为“1”表示对应数字存在,元素值为“0”表示对应数字已删除。这样避免了字符的移动,字符串长度不会改变,可以省略专门记录删除数字的位置。但这样做前后数字的比较过程和最后的输出过程相对复杂一些。 2) 同样还是利用数组,记录未删除字符的下标,粗略的过程如下: n=“1 2 4 3 5 8 3 3” 0 0 0 0 0 0 4比3大 删除 “1 2 3 5 8 3 3” 1 2 4 5 0 0 8比3大 删除 “1 2 3 5 3 3” 1 2 4 5

文档评论(0)

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

我是自由职业者,从事文档的创作工作。

1亿VIP精品文档

相关文档