智能科学技术导论-周昌乐-第03讲 算法设计-7页精选文档
- 格式:docx
- 大小:54.32 KB
- 文档页数:7
第04讲程序编制导语构建了解决问题的算法,要让机器系统能够顺利运行该算法,必须采用机器能够直接处理的某种语言来编制给出算法的程序。
当然,一个最为直接的编程语言就是由机器指令构成的机器语言。
不过,机器指令过于繁琐且缺乏直观性,不利于描述复杂的算法。
因此为了方便编程,人们构建了各种高级编程语言,同时对应构造相应的编译或解释软件,将高级编程语言描述的程序自动转化为机器指令的形式。
这样,对于程序编制的一般人员而言,就可以使用高级语言来编制程序了。
第4.1节编程语言可以用于程序编制的语言种类繁多,如果包括机器语言在内,通常按照机器系统方便处理的程度分为机器语言、汇编语言与高级语言三类。
机器语言就是直接采用机器系统能够直接执行的机器指令来编制程序的一种语言。
但显而易见的是,缺乏直观性理解的机器指令非常不方便,给程序的编制、特别是有一定规模的程序编制带来许多困难,明显会加重算法实现的任务复杂性。
为了克服机器语言不方便阅读的缺陷,可以为各种操作码、操作数分配各种助记符号,并用这些助记符号取代十六进制数字编码表示,采用这样表示方法形成的语言就称为汇编语言。
这样,在编制程序时,程序员就可以使用这些助记符号构成的汇编语言(assembly language)来编制程序,然后再使用一种称为汇编程序(assembler)来自动将汇编语言编制的程序翻译成为机器语言表达的程序,供机器系统执行。
由于汇编语言仅仅改变的是操作码、操作数等符号的表示,因此跟机器语言一样,编制这样的程序是深深依赖于机器系统的(所提供的指令系统),于是在一种机器上可以运行的汇编语言编制的程序往往无法在另一种机器上直接运行。
这个缺陷就是缺乏可移植性。
汇编语言的另一个缺陷是依然没有改变机器语言原有的繁琐性,必须从最基本的机器指令基础上去考虑如何构建算法的实现程序。
为了克服汇编语言的上述局限性,开发比汇编语言更加方便编制程序的语言,各种高级程序设计语言应运而生。
智能科学技术导论第2版1. 引言智能科学技术是指利用计算机科学、人工智能、数据科学等领域的方法和技术,研究和开发具有智能行为和功能的系统和应用。
本文将介绍智能科学技术导论第2版的相关内容,包括智能科学技术的定义、发展历程、主要研究方向以及应用领域。
2. 智能科学技术的定义智能科学技术是一门综合性的交叉学科,涉及计算机科学、人工智能、数据科学等多个领域。
它致力于研究和开发具有智能行为和功能的系统和应用,使其能够模拟人类的思维过程和决策行为,实现自主感知、自主决策和自主行动。
3. 智能科学技术的发展历程智能科学技术的发展可以追溯到上世纪50年代中期。
当时,人们开始意识到计算机不仅可以进行简单的数值计算,还可以模拟人类的思维过程。
随着计算机硬件性能的提升和算法的改进,智能科学技术得到了快速发展。
20世纪80年代,人工智能成为智能科学技术的重要研究方向。
专家系统、机器学习、模式识别等技术被广泛应用于图像识别、语音识别、自然语言处理等领域。
随着互联网的普及和大数据时代的到来,数据科学成为智能科学技术的又一个重要组成部分。
通过对海量数据的分析和挖掘,可以发现隐藏在数据背后的规律和知识,实现更加智能化的决策和预测。
4. 智能科学技术的主要研究方向智能科学技术涉及多个研究方向,以下是其中几个重要的方向:4.1 机器学习与深度学习机器学习是一种通过训练模型使计算机具备自主学习能力的方法。
深度学习是机器学习中一种基于人工神经网络结构的方法。
机器学习与深度学习在图像识别、语音识别、自然语言处理等领域有着广泛应用。
4.2 自然语言处理自然语言处理是一种研究计算机如何理解和处理人类语言的技术。
它包括文本分类、情感分析、机器翻译等任务,可以广泛应用于搜索引擎、智能客服等领域。
4.3 计算机视觉计算机视觉是一种研究计算机如何理解和处理图像和视频的技术。
它包括目标检测、图像分割、行为识别等任务,可以广泛应用于安防监控、无人驾驶等领域。
第03讲算法设计导语算法是智能计算领域最核心的概念之一。
当你拥有了一台机器,希望机器系统能够为你服务,解决你需要解决的某个智能计算任务,那你首先要给出完成这项任务的算法步骤。
比如,你希望具备猜扑克牌颜色这样一个魔术游戏的能力,那么你就需要为机器编制完成这样任务的算法。
如果说对于计算机科学技术的学生而言,玩的就是算法,那么对于智能科学技术的学生而言,玩的就是智能算法!正是通过使用算法,可以将智慧编进机器系统中,从而来构建能够表现智能行为的机器。
因此,你编制的算法越有智慧,那么所构建的机器也就越能够具有更智慧的行为表现。
从某中意义上讲,机器智能的限度就是能否找到算法的限度。
那些能够找到算法的智能任务范围,也就是智能机器的能力范围。
智能科学技术研究的目的,就是要找出尽可能多的智能算法,使我们的机器拥有尽可能多的智慧能力。
由此可见,算法在智能科学与技术领域中的重要地位,掌握算法设计的原理,也就成为学习这一专业的最基本技能。
第3.1节算法概述一般而言,所谓算法就是给出解决一个(智能)计算问题具体步骤的集合。
我们在前面“机器系统”一讲中已经遇到过一些简单的指令执行算法。
比如中央处理机常规处理“算法”就是,只要未发出停机指令就执行以下步骤:(1)获得指令;(2)指令解码;(3)执行指令。
“煮鸡蛋吃”算法如下:(1)从冰箱里取一枚鸡蛋;(2)将鸡蛋放进煮锅;(3)锅里加水直到盖满鸡蛋;(4)持续给锅加温直到沸腾为止;(5)停止加温取出鸡蛋;(6)将鸡蛋放入凉水浸泡1分钟;(7)敲破鸡蛋壳,去除全部蛋壳;(8)将去壳后的鸡蛋一口一口吃掉。
“遛小狗”算法:(1)给小狗套上狗绳,(2)出门上路;(3)如果遇到树小狗在逗留,则等待小狗尿尿;(4)继续前进,如果遛狗时间没有达到规定的时间,则继续遛狗转(3),否则返回。
“揲蓍成卦”算法:揲蓍,古代问卜的一种方式,用手抽点蓍草茎的数目,以决定吉凶祸福。
其法为,大衍之数五十,其用四十有九,分而为二以象两,挂一以象三,揲之以四以象四时,归奇于劫以象闰,五岁再闰,故再营而后卦。
智能科学技术导论第2版
摘要:
1.智能科学技术导论概述
2.智能科学技术的历史发展
3.智能科学技术的分类与研究领域
4.智能科学技术在我国的应用与前景
正文:
智能科学技术导论是一本介绍智能科技领域基础知识和研究进展的教材。
智能科学技术是一门新兴的交叉学科,涵盖了计算机科学、人工智能、机器学习、模式识别、自动化技术等多个领域。
智能科学技术的发展对我国经济、国防和社会发展具有重要意义。
智能科学技术的历史发展可以追溯到20 世纪50 年代。
当时,计算机科学家们开始研究如何让计算机具有智能,这标志着智能科学技术的诞生。
随着计算机技术的快速发展,智能科学技术也得到了迅猛的发展。
在智能科学技术的发展历程中,有许多重要的事件和成果,如人工智能的提出、专家系统的建立、机器学习算法的诞生等。
智能科学技术的分类与研究领域包括计算机视觉、自然语言处理、语音识别、机器人技术、智能控制等。
这些领域都有各自的研究内容和方法,但它们都致力于研究如何让计算机具有智能。
在我国,智能科学技术的应用与前景非常广阔。
在经济领域,智能科学技术可以帮助提高生产效率和质量,降低成本。
在国防领域,智能科学技术可以提高武器装备的智能化水平,增强国防实力。
在社会发展方面,智能科学技术
可以改善人们的生活质量,如智能家居、智能交通等。
综上所述,智能科学技术导论是一本介绍智能科技领域基础知识和研究进展的教材。
智能科学技术的历史发展悠久,研究领域广泛,应用前景广阔。
智能科学技术导论第2版《智能科学技术导论》第2版是一本介绍智能科学技术的入门教材。
该书旨在帮助读者了解智能科学技术的基本概念、原理和应用,探索智能技术对社会和人类生活的影响。
以下是对《智能科学技术导论》第2版内容的详细概括。
第一部分:智能科学技术概述介绍智能科学技术的背景和意义,强调其在信息时代中的重要性和广泛应用。
阐述智能科学技术的定义、研究领域和发展历程,包括人工智能、机器学习、模式识别等方面的内容。
第二部分:智能科学技术基础1.计算机科学基础:介绍计算机科学的基本概念和原理,包括计算机硬件、软件和网络等方面的内容。
探讨计算机科学在智能科学技术中的作用,如数据处理、算法设计和系统开发等。
2.数学与统计基础:强调数学和统计在智能科学技术中的重要性,介绍数学分析、概率论、线性代数等基础知识。
探讨数学和统计在机器学习、数据挖掘和模式识别等领域的应用。
3.认知科学基础:介绍认知科学的基本原理和研究方法,包括感知、注意、记忆和思维等方面的内容。
强调认知科学对智能系统设计和人机交互的重要影响。
第三部分:智能技术与应用1.人工智能:详细解释人工智能的概念和发展历程,介绍符号主义、连接主义和进化计算等不同的人工智能方法。
探讨人工智能在图像识别、自然语言处理和专家系统等领域的应用。
2.机器学习:解释机器学习的基本原理和方法,包括监督学习、无监督学习和增强学习等方面的内容。
强调机器学习在数据分析、模式识别和智能决策等方面的应用。
3.模式识别:介绍模式识别的基本概念和技术,包括特征提取、分类器设计和模型评估等方面的内容。
探讨模式识别在图像处理、语音识别和生物信息学等领域的应用。
4.智能控制:强调智能控制的重要性和应用领域,介绍神经网络控制、遗传算法优化和模糊控制等技术。
探讨智能控制在自动化系统、机器人和交通管理等方面的应用。
第四部分:智能科学技术的社会影响1.伦理与道德问题:讨论智能科学技术对社会和人类生活带来的伦理和道德挑战,如隐私保护、权益平衡和人工智能的道德责任等。
第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)终止性。
不过,对于特殊算法,有时候我们却需要永不终止,如操作系统。
关于这个话题,更多地涉及到计算理论的内容,并跟算法效率的讨论有关。
我们不做展开了。
对于算法而言,还有一个重要的方面就是一定区分算法内涵与算法描述之间的区别。
算法的内涵是指一个算法所固有的功能本质,完成某一任务的具体步骤及其内在联系。
而算法的描述则是具体给出的一种表示方式。
一个算法可以有不同的描述文本,这些描述文本完成的任务完全一致,因此代表着一个相同的抽象本质。
就好像一本书与一个故事的区别,一个故事可以写成不同版本的书,而这不同版本的书却讲述的是同一个故事。
算法的抽象本质,是任务固有的复杂本性所决定的,而算法的表示只是完成这一任务之算法的一种具体描述。
如果我们考虑到算法的执行问题,还需要区分程序、算法与进程三者的关系。
程序是算法的描述,进程是执行程序的活动,而执行一个程序就是执行这个程序所表达的算法,因此进程是算法执行活动。
最后,对于算法,还要考虑算法的效率与正确性问题。
效率是指执行一个算法所要花费的时空代价。
时间代价是指算法执行中花消的时间,而空间代价是指算法执行中花消的内存。
当然,一般我们仅仅从理论上来讨论算法的效率,并不考虑具体的机器系统,加上空间代价可以转化为时间代价。
因此,在考虑算法的效率时,主要查看对于给定的输入数据规模,一个算法需要动态执行多少个计算步骤,称为算法的计算复杂性。
算法的计算复杂性是由算法所解决的问题本身的复杂本性所决定的,这是算法问题的计算复杂性。
不过,同样的问题可以有不同的算法来解决,这些不同算法的计算复杂性才是反映算法效率的关键。
我们希望,对于给定的问题,都能够找到最低计算复杂性的那个算法,刚好反映了问题本身的计算复杂性。
衡量算法计算复杂性一般用输入数据的规模来比照,也即算法计算复杂性是其输入数据规模的函数,通常记为:O(f(n))其中n为算法输入数据的规模,f()为算法的计算复杂性函数,O()为复杂性当量。
从理论上讲,可以将算法按照计算复杂性函数类别来进行分类,比如函数为对数函数的就称为对数复杂性,多项式的就称多项式复杂性(又分为k次多项式)、指数的称为指数复杂性。
至于算法的正确性,则是要确保算法确实解决了给定的问题。
目前,证明算法正确性的方法主要有两种途径:一是软件测试途径,就是具体地运行算法的程序,采用各种选择测试数据的方法来系统地测试软件,分析算法的结果是否符合规定的(中间环节或最终结果)输出要求;另一种是程序正确性证明方法,主要是从理论上分析证明算法的正确性。
当然我们希望所构造的算法都是正确的,即确实刚好解决了所要解决的问题,不多也不少。
但实际上,当需要解决的问题足够复杂时,很难保证构造的算法是正确的,往往或存在许多漏洞(bug),常常会给各种智能系统带来灾难性的后果,比如航天飞机的发射失败,往往就是因为软件算法上的一点点小问题导致的。
因此,算法设计也是大事,不可不慎!第3.2节算法构造构造算法的前提,首先是要给出某种算法表示的方式。
尽管算法功能是超越具体的表达形式的,但功能总是要通过一定的形式来呈现的。
日常生活中我们一般采用自然语言来发表我们的思想,也常常采用某图式来表达事物及其关系。
但对于算法而言,由于明确性的要求,因此往往需要某中精确的形式语言来作为算法表达的语言,这种可以精确描述算法的形式语言就成为原语。
定义原语一般包括两个方面的考虑,语法和语义。
语法规定原语中符号组合的规则,语义则说明原语中符号及其组块的含义。
为了既兼顾机器算法执行的精确可行性,又兼顾人们算法描述的直观方便性,并且具有某种通用性,因而可以忽略实现某种程序设计语言的细节,一般采用一种称为伪码的符号系统来作为描述算法的原语。
所谓伪码(psudocode)是一种重在表达算法思想的非正式符号系统,常常用在算法的开发进程之中。
与一般高级程序设计语言相比较,伪码的主要特点是,既具有直观方便性的优点,又忽略了严格语法的规范性。
由于算法思想主要是通过各种递归语义结构来描述的,因此与所有描述算法的语言符号系统一样,伪码必须要能够给出各种递归语义结构的表达方法。
有时为了直观表达算法的思想,也常采用一种称为流程图的图式来对伪码描述的算法作补充说明。
起/止点输入/输出处理准备预定义处理判断控制流外接内接流程图的基本符号上图给出了流程图的基本符号,下面我们针对主要的递归语义结构,结合流程图表示,来给出一种算法原语具体规范。
(1)赋值语义结构:如果用name表示变量名称,用expression表示与name有关的数值表达,那么我们称:name←expression为一个赋值语义结构,其含义表示“把expression 的值赋给name”。
比如:x←3+4y就表示将3+4y表达式计算结果的值赋给x。
一旦这一计算结束后,变量x量y的值保持不变。
赋值语句流程图(2决定采取进一步的计算活动。
表示这样算法步骤的语义结构,就称为条件语义结构。
一般采用如下的描述形式:if(条件)then(活动1)else(活动2)或者if(条件)then(活动)其中if、then、else这些关键词称为保留词(不允许算法设计者用做命名变量名称的词,称为保留词),用于界定一个条件语义结构不同部分(内部)和作用范围(外部)。
在上述条件语义结构中,第一个式子的含义表示“如果(条件)成立,就执行(活动1),否则执行(活动2)”,N第二个式子的含义条件活动2表示“如果(条件)成立,Y就执行(活动)”。
比如,活动1if(x≤6)then(y←x+2)else(y←x+6)就是一个条件语义结构。
条件语句流程图(3)循环语义结构:用来表示只要某个条件式保持为真就继续规定的计算活动,表示这样的算法步骤的语义结构,就称为循环语义结构。
一般采用如下的描述形式:while(条件)do(活动)其中while和do 也是保留词。
循环语义结构的含义是“检查(条件)是否满足,如果其为真就执行(活动),并返回再次检查(条件)。
只有当某次检查(条件)不满足时,才结束算法步骤。
”比如x 初始值假定 Y为0,那么 条件 活动 while (x ≤5) Ndo (x ←x+1) while 语句流程图 就意味着一直执行6次(x ←x+1)计算,结果x 的值变成了6。
有了上述三种基本的语义结构描述形式,就可以用来表示完整的算法思想了。
通常一个算法中的每一个相对独立的步骤,称为一个语句,均可以用上面三种语义结构之一来描述,称为具体应用,而这些语义结构具体应用的语句有序集合,就称为算法的伪码表示。
为了使得这样的伪码表示更加具有可读性,一般规定语句之间用分号隔开,如果一个语句内部嵌有另一个语句,则采用缩进格式。
比如语句if (x ≤6)then (y ←x+2)else (if (x ≤6)then ( y ←x+2)else (y ←x+6)) 写成缩进格式就是 if (x ≤6)then (y ←x+2) else (if (x ≤6) then (y ←x+2) else (y ←x+6)进一步,对于重复出现的伪码段或者相对独立的一段代码,可以用固定名称加以命名定义,称为过程,然后在需要出现的地方直接用该名称替代这段伪玛。
一般过程的定义方式为procedure name (参量) 伪玛段引用之处直接用语句“procedure name ”来替代所定义的这段“伪玛段”。