网站大量收购闲置独家精品文档,联系QQ:2885784924

安徽科技学院计算机导论课件第7章 算法基础.ppt

安徽科技学院计算机导论课件第7章 算法基础.ppt

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章:算法基础 目录 7.1 算法概述 7.2 算法评价 7.3 常用的算法 7.3.1 穷举法 7.3.2 迭代法 7.3.3 递归法 【例7-3】裴波那契数列f(n)=f(n-1)+f(n-2);f(0)=1;f(1)=2 【例7-4】梵塔问题:有n个半径各不相同的圆盘,按半径从大到小,自下而上依次套在A柱上,另外还有B、C两根空柱。要求将A柱上的n个圆盘全部搬到C柱上去,每次只能搬动一个盘子,且必须始终保持每根柱子上是小盘在上,大盘在下。 7.3.4 递推法 7.3.5 贪心法 【例7-7】删数问题 键盘输入一个高精度的正整数N,去掉其中任意S个数字后使 剩下的数最小。例如:N=175438、S=4,可以删去7、5、4、8、得到13。 分析:很容易想到用贪心法,但是贪心法标准是什么呢? 删S次,每次删的数要使剩下的数尽量小。例如上面的例子,第一次删7,至少比第一次删1、5、4、3、8好!这样,删数过程是:175438 15438 1438 138 13 实现很简单,就是从左向右找到第一个i,使n[i]n[i+1],如果找到了,就删第i个,否则删最后一位。这里一次选择的i是2,2,2,3,因此解向量是:(2,2,2,3) 7.3.6 贪心法 7.3.6 分治法 begin  {开始} if 问题不可分 then 返回问题解      else begin      从原问题中划出含一半运算对象的子问题1;      递归调用分治法过程,求出解1;      从原问题中划出含另一半运算对象的子问题2;      递归调用分治法过程,求出解2;?      将解1、解2组合成整个问题的解;        end;    end; {结束} 【例7-8】金块问题 老板有一袋金块(共n块,n是2的幂(n≥2)),将有两名最优秀的雇员每人得到其中的一块,排名第一的得到最重的那块,排名第二的雇员得到袋子中最轻的金块。假设有一台比较重量的仪器,我们希望用最少的比较次数找出最重的金块。 分析:问题可以简化为:在含n(n是2的幂(n≥2))个元素的集合中寻找极大元和极小元。明显的方法是逐个的进行比较查找。 7.4 应用实例 7-4-1 简易赛车游戏算法 简单的游戏往往更耐玩,所谓的赛车也只有4个方块。 第一步,绘制对象:用函数drawcar()画赛车,drawway(n)画跑道的第n层。 第二步,接受控制:Form的KeyPreview属性要设为true,在Form_KeyPress函数中通过改变全局变量cx来控制赛车的位置。 第三步,游戏循环:作为即时游戏,必须要有一个Timer,并在其事件Timer1_Timer()中绘制所有对象和进行碰撞检测。本例中,绘图部分写在了Timer1_Timer()中,碰撞测试放在了test()中。 这也是所有即时游戏所共通的框架。当然,我们往往还是根据具体的设计作一些变通,发挥一些技巧,比如这里设计的跑道是随机产生的,这就要通过一点技巧以便既让玩家感到挑战,又不至于出现不可逾越的难关…… 7-4-2 五子棋算法 五子棋的核心算法,由6个基本功能模块构成,各模块详细分析如下: (1)初始化:在屏幕上画出棋盘。 (2)主循环控制模块:控制下棋顺序,当轮到某方下子时,负责将程序转到相应的模块中去,主要担当一个调度者的角色。 (3)玩家下子:当轮到玩家下时,您通过键盘或鼠标在棋盘上落子,程序会根据该点的位置记录2,以表明该子是玩家下的。 (4)盘面分析填写棋型表:本程序核心模块之一,人工智能算法的根本依据!其具体实现方法如下:您在下五子棋时,一定会先根据棋盘上的情况,找出当前最重要的一些点位,如“活三”、“冲四”等;然后再在其中选择落子点。但是,电脑不会像人一样分析问题,要让它知道哪是“活三”、哪是“冲四”,就得在棋盘上逐点计算,一步一步的教它。 (5)电脑下子:有了上面填写的两张棋型表,现在要做的就是让电脑知道在哪一点下子了。其中最简单的计算方法,就是遍历棋型表找出其中数值最大的一点,在该点下子即可。但这种算法的弱点非常明显,只顾眼前利益,不能顾全大局,这就和许多五子棋初学者一样犯了“目光短浅”的毛病。 (6)胜负判断:某方形成五子连即获胜;若黑棋走出“双三”、“双四”或长连即以禁手判负。 7-4-3 加密/解密 本算法主要是进行目前流行的加解密的一道简单实用算法 * 算法是一个程序的灵魂,它是在有限步骤内求解某一问题所使用的一组定义明确的规则。具体衡量标准包括时间复杂度和空间复杂度。基本有数值和非数值两种分类。 7.1算法 7.2算法评价 7.3常用算法 7.4具体算法实例 例子: 从10个数中挑选出最大

文档评论(0)

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

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

1亿VIP精品文档

相关文档