- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第03讲算法设计
导语
算法是智能计算领域最核心的概念之一。当你拥有了一台机器,希望机器系统能够为你服务,解决你需要解决的某个智能计算任务,那你首先要给出完成这项任务的算法步骤。比如,你希望具备猜扑克牌颜色这样一个魔术游戏的能力,那么你就需要为机器编制完成这样任务的算法。如果说对于计算机科学技术的学生而言,玩的就是算法,那么对于智能科学技术的学生而言,玩的就是智能算法!
正是通过使用算法,可以将智慧编进机器系统中,从而来构建能够表现智能行为的机器。因此,你编制的算法越有智慧,那么所构建的机器也就越能够具有更智慧的行为表现。从某中意义上讲,机器智能的限度就是能否找到算法的限度。那些能够找到算法的智能任务范围,也就是智能机器的能力范围。
智能科学技术研究的目的,就是要找出尽可能多的智能算法,使我们的机器拥有尽可能多的智慧能力。由此可见,算法在智能科学与技术领域中的重要地位,掌握算法设计的原理,也就成为学习这一专业的最基本技能。
第3.1节算法概述
一般而言,所谓算法就是给出解决一个(智能)计算问题具体步骤的集合。我们在前面“机器系统”一讲中已经遇到过一些简单的指令执行算法。比如中央处理机常规处理“算法”就是,只要未发出停机指令就执行以下步骤:
(1)获得指令;(2)指令解码;(3)执行指令。
“煮鸡蛋吃”算法如下:(1)从冰箱里取一枚鸡蛋;(2)将鸡蛋放进煮锅;(3)锅里加水直到盖满鸡蛋;(4)持续给锅加温直到沸腾为止;(5)停止加温取出鸡蛋;(6)将鸡蛋放入凉水浸泡1分钟;(7)敲破鸡蛋壳,去除全部蛋壳;(8)将去壳后的鸡蛋一口一口吃掉。
“遛小狗”算法:(1)给小狗套上狗绳,(2)出门上路;(3)如果遇到树小狗在逗留,则等待小狗尿尿;(4)继续前进,如果遛狗时间没有达到规定的时间,则继续遛狗转(3),否则返回。
“揲蓍成卦”算法:揲蓍,古代问卜的一种方式,用手抽点蓍草茎的数目,以决定吉凶祸福。其法为,大衍之数五十,其用四十有九,分而为二以象两,挂一以象三,揲之以四以象四时,归奇于劫以象闰,五岁再闰,故再营而后卦。是故四营而成易(爻),十有八变而成卦。八卦而小成,引而伸之,触类而长揲,天下之能事毕矣。
如果强调精确性,那么实际卦象生成算法如下(重复如下三变步骤之六遍,共计十八变):
(1)大衍之数50,其用49:50根蓍草,去其1而不用,令可用之数s=49,余数之和t=0,循环如下操作三变:
(2)分二(分而为二以象两):余49根随意分为左右两堆(天意)
(3)挂一(挂一以象三):从右堆中取出1根
(4)揲四(揲之以四以象四时):对左右两堆均以四根一组数之,令其为新的可用之数s
(5)归奇(归奇于扐以象闰):t=t+两堆得出的余数之和
(6)(故四营而成易):不到三变转(2)
(7)根据y=(49-t)/4来决定一个爻画:y=7(少阳)、8(少阴)、9(老阳)、6(老阴)
通过上述几个算法例子,我们不难了解算法的一些特点。但作为机器系统能够严格精确执行的操作步骤集合,我们必须对算法下一个严格的定义:算法是一组明确的、可以直接执行之步骤的有限有序集合。
(1)有序性:算法中所有步骤均规定有执行顺序的;
(2)有限性:算法中的步骤是有限的;
(3)明确性:集合中的每条指令均是明确的、可以直接执行的步骤。
有时候,我们还会要求每一个算法不但构成步骤是有限的,而且还要求这些步骤的动态执行也是在有限时间中能够结束的,即所谓(4)终止性。不过,对于特殊算法,有时候我们却需要永不终止,如操作系统。关于这个话题,更多地涉及到计算理论的内容,并跟算法效率的讨论有关。我们不做展开了。
对于算法而言,还有一个重要的方面就是一定区分算法内涵与算法描述之间的区别。算法的内涵是指一个算法所固有的功能本质,完成某一任务的具体步骤及其内在联系。而算法的描述则是具体给出的一种表示方式。一个算法可以有不同的描述文本,这些描述文本完成的任务完全一致,因此代表着一个相同的抽象本质。
就好像一本书与一个故事的区别,一个故事可以写成不同版本的书,而这不同版本的书却讲述的是同一个故事。算法的抽象本质,是任务固有的复杂本性所决定的,而算法的表示只是完成这一任务之算法的一种具体描述。如果我们考虑到算法的执行问题,还需要区分程序、算法与进程三者的关系。程序是算法的描述,进程是执行程序的活动,而执行一个程序就是执行这个程序所表达的算法,因此进程是算法执行活动。
最后,对于算法,还要考虑算法的效率与正确性问题。效率是指执行一个算法所要花费的时空代价。时间代价是指算法执行中花消的时间,而空间代价是指算法执行中花消的内存。当然,一般我们仅仅从理论上来讨论算法的效率,并不考虑具体的机器系统,加上空间代价可以转化为时间代价。因此,在考虑算法的效率时,主要查看对于给定的输入数据规模,一个
文档评论(0)