第二章 算法概述(下)PPT.pptxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第二章 算法概述(下)PPT

第二章 算法概述(下)第二章 算法概述(下)2.3 常用算法简介2.3.1 枚举算法2.3.2 迭代算法2.3.3 贪心算法注:课程安排上,建议这部分内容放到第四章后再深入讲解。2.3.1 枚举算法枚举法就是按问题本身的性质,一一列举出该问题所有可能的解,并在逐一列举的过程中,检验每个可能解是否真正满足问题所求。若是则采纳这个解,否则抛弃它。【例2-3-1】.求1-1000中,能被3整除的数。 算法:(1)从1-1000中一一列举,这是一个循环结构(2)在循环中对每个数进行检验: 凡是能被3整除的数,打印输出,否则继续下一个数。?枚举法的基本思想根据问题描述和相关的知识,能为该问题确定一个大概的解空间范围。枚举法就是对该解空间范围内的众多候选解按某种顺序进行逐一枚举和检验,直到找到一个或全部符合条件的解为止。计算机程序实现枚举算法的基本方法是:用循环结构实现一一列举的过程,用分支结构实现检验的过程。枚举法的总体框架枚举法一般使用循环结构来实现,其框架如下:设解的个数n初始为0; 循环(枚举每一可能解): 若( 该解法满足约束 ) : 输出这个解; 解的数量n加1; ? 【例2-3-2】判断谁是小偷。有四个嫌疑人: a说:我不是小偷。 b说:c是小偷。 c说:小偷肯定是d。 d说:c冤枉人! 四人中有三人说的是真话,问到底谁是小偷??依次假设a、b、c、d为小偷进行判断求解“谁是小偷?”的算法*对a、b、c、d依次进行判断,显然这是一个循环的过程。为了能进行循环处理,需要对问题进行数字化:设x为假设的小偷,x依次取值1、2、3、4(表示a、b、c、d);用s1,s2,s3,s4表示在某个假设下(即x分别为1、2、3、4时)四人说话的状态(说真话为1,说假话为0)。据此可得到以下算法:初始:设s1=s2=s3=s4=0(“=”表示赋值)求解“谁是小偷?”的算法*循环:对x=1,…4(假设4个可能的解)在此假设下,分别求四人的说话状态(s1~s4)若x!=1,s1=1 (a说:“我不是小偷”。真话); 若x==3,s2=1 (b说:“c是小偷”。真话);(“!=”表示不等于, “==”表示等于)若x==4,s3=1 (c说:“小偷肯定是d。”真话);若x!=4,s4=1 (d说:“c冤枉人!”真话)。若经以上判断后有s1+s2+s3+s4==3 (即三人说真话,一人说假话)假设成立,小偷即为此时x的值对应的那个人。(算法的流程图见书上图2-3-1)应用枚举法通常有以下几个步骤:(1)建立问题的数学模型,确定问题的可能解的集合(可能的解空间)。(2)确定合理的筛选条件,用来选出问题的解。(3)确定搜索策略,逐一枚举可能解集合中的元素,验证是否是问题的解。枚举法应用举例将苹果、桔子、香蕉、梨、菠萝5种水果做水果拼盘,每个水果拼盘有3种不同的水果,且有序摆放。问可以有多少种?问题分析:使用列表保存5种水果名。通过三重循环结构,枚举各种可能的方案x、y、z的取值范围为5种水果(解空间)它们互不相等(筛选条件)摆放先后次序有区别输出所有可能的方案。算法步骤描述:步骤1:建立水果列表fruit;步骤2:使变量x遍历fruit步骤3:对于x的每个值,使变量y遍历fruit步骤4:对于x、y的每个值,使变量z遍历fruit步骤5:若z?x且 z?y 且x?y 打印该方案Python实现程序*#Fruit platefruit=[apple,orange,banana,pear,pineapple]n=1for x in fruit: for y in fruit: for z in fruit: if z!=x and z!=y and x!=y: print(n,x,y,z) n+=1枚举法的优化通过一些制约条件,减少解空间可能解的数量,使检验的工作量较少。“水果拼盘”改进的算法步骤描述:步骤1:建立水果列表fruit;步骤2:使变量x遍历fruit步骤3:对于x的每一取值,使变量y遍历fruit步骤4:若x?y使变量z遍历fruit若z?x且 z?y 打印该方案#Fruit platefruit=[apple,orange,banana,pear,pineapple]n=1for x in fruit: for y in fruit: if x!=y: for z in fruit: if z!=x and z!=y: print(n,x,y,z) n+=1问题拓展:如果摆放次序无关,怎样求解?枚举法的应用打印“九九乘法表”可使用枚举法的问题还有如完全平方数完全平方数是指能写成一个正整数的平方的数,如25=5^2,所以,25是完全平方数。100=10^2,所以,100也是完全平方数。百钱买百鸡问题:有一个人有一百块钱,打算买一百只

文档评论(0)

djdjix + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档