




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、算法及程序实现知识点一、枚举算法及程序实现枚举算法基本思想是根据问题本身的性质,一一列举出该问题所有可能的情况,并根据题目的条件逐个作出判断,从中挑出符合要求的解。枚举算法属于搜索策略,适用于解变量确定的连续值域的问题。设计枚举算法时要在尽可能小的范围内罗列出所有可能的情况,不能遗漏,也不能重复。例:假如我有一个QQ的密码是一位数字,如果让同学们来破解的话,会把0到9十个数字都试一遍,找到密码,这种方法使用的算法就是枚举算法。枚举算法解题的主要方法,必须把所有的可能情况都一一列出来,这种可能情况,一般通过循环列举出来。例如课本例题,一份单据被抹除的数字的推算问题。可能的情况有25006至259
2、96一共100种,通过循环把这一百种情况全部列出来,在循环列出来的过程对,对每一种情况进行比较,是否符合要求。n=25006+j*100,j的范围为0至99,此处列出来的表达式只有一个未知数j,所以只需用一重循环就够了。DO循环c=0 如果需要统计符合要求的单据的张数的话,用c做计数器j=0do while j<100 j的范围是0至99,此处也可写成j<=99 n=25006+j*100 通过 j把单据的所有的可能情况列出来 if n mod 37=0 or n mod 67=0 then 判断是否符合要求 print n 通过判断把符合要求的单据的值输出 c=c+1
3、符合要求的单据加一张 end if j=j+1 j每次增加1直到99 loopFOR循环c=0 如果需要统计符合要求的单据的张数的话,用c做计数器For j=0 to 99 一重循环,把j所有可能情况列出来 n=25006+j*100 通过 j把单据的所有的可能情况列出来 if n mod 37=0 or n mod 67=0 then 判断是否符合要求 print n 通过判断把符合要求的单据的值输出c=c+1 符合要求的单据加一张 end ifNext j在for循环中不需要j=j+1,因为for循环j的值每次会自己增加步长,此处步长省略没写,即表示步长为1,所以j每次会自动增加
4、1。课本例题变形金刚问题:小盒5个,大盒12个,1200个多少种装法。设小盒为x个,则x的范围是:0至240;设大盒为y个,则y的范围是:0至100要求符合的条件为5*x+12*y=1200,此处有两个未知数x、y,所以的用二重循环(三个未知数即用三重、四个未知数即用四重循环)DO循环c=0:x=0:y=0do while x<=240 第一重循环,x的范围是0至240 do while y<=100 第二重循环,y的范围是0至100n=5*x+12*y 通过 x,y把所有的可能装法情况列出来 if n=1200 then 判断是否符合要求(5*x+12*y=1200)
5、print x,y 通过判断把符合要求的装法情况输出 c=c+1 符合要求的装法增加一次 end if y=y+1 y每次增加1直到100 loop 第二重循环结束 x=x+1 x每次增加1直到240loop 第一重循环结束FOR循环c=0for x=0 to 240 第一重循环,x的范围是0至240for y=0 to 100 第二重循环,y的范围是0至100n=5*x+12*y 通过 x,y把所有的可能装法情况列出来 if n=1200 then 判断是否符合要求(5*x+12*y=1200) print x,y 通过判断把符合要求的装法情况输出 c=c+1 符合要求的装法增加一
6、次 end ifnext y 第二重循环结束next x 第一重循环结束同样在for循环中也不需要x=x+1、y=y+1,因为for循环x、y的值每次会自己增加步长,此处步长省略没写,即表示步长为1,所以x、y每次会自动增加1。二、解析算法及程序实现是指用解析的方法找出表示问题的前提条件与所求结果之间关系的数学表达式,并通过表达式的计算来实现问题求解。例:同学们在数学的应用题中、物理、化学的计算题中通过理解题意得出表达式,再通过计算得到答案,所使用的算法就是解析算法。解题方法:主要是要得出前提条件与所求结果之间关系的数学表达式,并且在程序中这个数学表达式必须符合VB格式。储蓄问题,不考虑复利,
7、年利率2.8%,M元钱需存多少年,才能得到K元本息?设需要y年,根据题意得出的数学表达式为:y=,但是在VB中表达式必须符合VB语法:y=(k-m)/(0.028*m)流程图及程序实现略。三、排序算法及程序实现1冒泡排序冒泡排序的基本思想是把待排序的n个元素的数组看成是垂直堆放的一列数据,从最下面的一个元素起,自下而上地比较相邻的两个元素中的数据,将较小的数据换到上面的一个元素中。重复这一过程,直到处理完最后两个元素中的数据,称为一遍加工(一趟冒泡)。当第一遍加工完成时,最小的数据已经上升到第一个元素的位置。然后对余下的n-1个元素重复上述过程,直至最后进行余下两个数据的比较和交换。冒泡排序算
8、法举例 设有数列 65,13,76, 27,49第1趟比较第1次 65,13,76, 27,49不需要交换第1趟比较第2次 65,13,76, 27,4976,27交换第1趟比较第3次 65,13,27, 76,49不需要交换第1趟比较第4次 65,13,27, 76,4965,13交换第1趟结束:13,65,27,76,49 第1趟比较4次,交换2次第2趟比较第1次:1365,27,76,4976,49交换第2趟比较第2次:1365,27,49,76不需要交换第2趟比较第3次:1365,27,49,7665,27交换第2趟结束:13,27,65,49,76 第2趟比较3次,交换2次第3趟比较
9、第1次:13,2765,49,76不需要交换第3趟比较第2次:13,2765,49,7665,49交换第3趟结束:13,27,49c65,76 第3趟比较2次,交换1次第4趟比较第1次:13,27,4965,76不需要交换第4趟结束:13,27,49,65,76 第4趟比较1次,没有交换5个元素的数据系列,一共冒泡了4趟,分别比较次数为4、3、2、1,交换次数根据实际情况确定。所以可以总结出,n个元素的数组系列通过冒泡排序,需要经过n-1趟冒泡,总的比较次数为:(n-1)+(n-2)+(n-3)+1=次。两个元素中的数据交换一般需要通过第三个变量来进行D(1)=5:D(2)=8交换的过程为:T
10、=D(1)D(1)=D(2)D(2)=T流程图:冒泡排序的程序实现:通过例子我们知道,5个元素的数据系列,一共冒泡了4趟,分别比较次数为4、3、2、1。所以在程序设计中,我们通过循环来进行控制,需要两重循环,大循环控制冒泡了4趟:For i=1 to 4(5-1)Next i小循环控制每趟冒泡比较的次数:For j=5 to i(i的值根据大循环分别为1到4)Next i所以小循环是在大循环里面的通过判断if d(j)<d(j-1)来控制是否需要交换程序主体部份如下:For i=1 to n-1 For j=n to I step -1 If d(j)<d(j-1) then T=
11、d(j) D(j)=d(j-1) D(j-1)=t End if Next jNext i2选择排序选择排序的基本思想是在所有的记录中选出最小(大)的数据,把它与第一个数据交换,然后在其余的记录中再选出最小(大)的数据与第二个数据交换,依此类推,直至所有数据排序完成。流程图:选择排序算法举例 设有数列 65,97,76,13,27,49,58 第1趟 65,97,76,13,27,49,58 寻找最小数据d(k)=d(4)=13与d(1)交换第2趟 1397,76,65,27,49,58 寻找最小数据d(k)=d(5)=27与d(2)交换第3趟 13,2776,65,97,49,58 寻找最小
12、数据d(k)=d(6)=49与d(3)交换第4趟 13,27,4965,97,76,58 寻找最小数据d(k)=d(7)=58与d(4)交换第5趟 13,27,49,5897,76,65 寻找最小数据d(k)=d(7)=65与d(5)交换第6趟 13,27,49,58,6576,97 寻找最小数据d(k)=d(6)=76与d(6)交换结束:13,27,49,58,65,76977个元素的数据系列需要寻找6次。程序实现:d(1)=65;d(2)=97;d(3)=76;d(4)=13;d(5)=27;d(6)=49;d(7)=58for i=1 to 6 第一重循环,控制趟数,7个元素需要6趟k=
13、ifor j=i+1 to 7第二重循环,在待排序中找最小数,待排序元素每次减少一个 if d(j)<d(k) then k=j 找出最小的数据next j结束第二重循环if k<>i then把最小数据与待排序数据中的第一个交换 kt=d(j) d(j)=d(k) d(k)=ktend ifnext i结束第一重循环例1:选择排序的基本思想是在参与排序的所有数组元素中找出最小(或最大)的元素,使它与第一个元素互换位置,然后再在余下的元素中重复上述过程。有一组数,顺序是“2、6、4、1”,用选择排序法将这组数从大到小排序,第一次交换数据后的顺序是:(A) 6、2、1、4(B)
14、 6、4、2、1 (C) 6、1、2、4(D) 6、2、4、1四、查找算法及程序实现1顺序查找顺序查找的基本思想是从第一个数据开始,按数据的顺序逐个将数据与给定的值进行比较,若某个数据和给定值相等,则查找成功,找到所查数据的位置;反之,查找不成功。流程图: d(1)=65;d(2)=97;d(3)=76;d(4)=13;d(5)=27;d(6)=49;d(7)=58查找key=49程序实现:For i=1 to 7If d(i)=key then 输出找到是第d(i)个 Exit forEnd ifNext i2对分查找对分查找的基本思想是在有序的数据列中,首先将要查找的数据与有序数组内处于中
15、间位置的数据进行比较,如果两者相等,则查找成功;否则根据数组元素的有序性,就可确定该数据应该在数组的前半部分还是后半部分继续进行查找;在新确定的范围内,继续按上述方法进行查找,直到找到要查找的数据,使查找成功,或直到子表不存在,查找不成功。对分查找的条件是被查找的数据必须是有序的。对分(二分)查找过程:d(1)=13;d(2)=27;d(3)=49;d(4)=58;d(5)=76;d(6)=97;d(7)=102;d(8)=138;d(9)=202查找k=138d(1)=13;d(2)=27;d(3)=49;d(4)=58;d(5)=76;d(6)=97;d(7)=102;d(8)=138;d
16、(9)=202第一次k与d(fix(1+9)/2)=d(5)比较,比d(5)大,下次在d(5)的右边找d(1)=13;d(2)=27;d(3)=49;d(4)=58;d(5)=76;d(6)=97;d(7)=102;d(8)=138;d(9)=202第二次k与d(5)右边的d(fix(6+9)/2)=d(7)比较,比d(7)大,下次在d(7)的右边找d(1)=13;d(2)=27;d(3)=49;d(4)=58;d(5)=76;d(6)=97;d(7)=102;d(8)=138;d(9)=202第三次k与d(7)右边的d(fix(8+9)/2)=d(8)比较,与d(8)相等,找到。依次被访问进行比较的数字为:d(5)、d(7)、d(8)流程图:课本上的查找函数:Function search(key as integer) as integer i=1 i代表待查找数列中的第一个元素的下标,刚开始时是1 j=9j代表待查找数列中的最后一个元素的下标,刚开始时是9(因为一共9个元素) nc=0 统计查找次数 do while i<=j 第一个元素的下标要小于或等于最后一个元素的下标,否则待查找数列就不存在了 nc=nc+1 每找一次增加一次 m=fix(i+j)/2 求等查找数列中间数的下标 if d(m)=key then 判断是否找到了 search=m 找到了把
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 版权咨询合同
- 创业贷款合同
- 5.20.2 性状遗传的物质基础说课稿北师大版生物八年级上册
- 2025年新能源行业企业数据管理数字化与业务流程优化报告
- 重庆生化池施工方案
- 婴幼儿配方食品营养配方婴幼儿免疫系统研究报告
- 上海彩钢翻新施工方案
- 2025年新能源汽车电池回收市场产业链关键环节分析报告
- 2025年新能源企业社会责任报告编制与法律法规遵循指南
- 24.2.2《切线长定理》教学设计 人教版数学九年级上册
- 2025年国家电网有限公司特高压建设分公司招聘10人(第一批)笔试参考题库附带答案详解
- 2.3二次根式(第2课时)(教学课件)数学北师大版2024八年级上册
- 2025年会议行业研究报告及未来发展趋势预测
- 武松课件教学课件
- 《医疗器械监督抽验介绍》
- 高速消防安全知识培训课件
- 污水处理厂工程监理投标文件(技术标)
- 多彩贵州我的家课件
- 2025浙教版八上科学第二章力与空间探索单元测试B卷(教师版和学生版)
- 设备管理与运行制度手册
- 小学数学新人教版三年级上册教材变化讲解
评论
0/150
提交评论