《现代大学计算机基础》课件第5章.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《现代大学计算机基础》课件第5章.ppt》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 现代大学计算机基础 现代 大学计算机 基础 课件
- 资源描述:
-
1、第5章 算法思维与程序设计基础第5章 算法思维与程序设计基础 5.1 开启智慧的开启智慧的“苹果苹果”算法算法 5.2 亚当夏娃的诱惑亚当夏娃的诱惑算法与程序算法与程序 5.3 登上方舟的神器登上方舟的神器经典算法思想经典算法思想 第5章 算法思维与程序设计基础5.1 开启智慧的开启智慧的“苹果苹果”算法算法在20世纪50年代西方某些著名的词典中,还未曾收录过算法(Algorithm)一词。根据西方数学史家的考证,古代阿拉伯的一位学者写了一部名著Kitb al-jabr WalmuqbJla(复原和化简的规则)。这部著作流传到了西方,结果从作者署名中的al-Khwrizm派生出了Algorit
2、hm(算法)一词,从作品名字中的al-jabr派生出了Algebra(代数)一词。随着时间的推移,Algorithm(算法)这个词已经完全与它原来的含义不同了。第5章 算法思维与程序设计基础计算机系统中的任何软件,都是由大大小小的各种软件组成部分构成的,各自按照特定的算法来实现,算法的好坏直接决定所实现软件性能的优劣。用什么方法来设计算法,所设计的算法需要什么样的资源,需要多少运行时间、多少存储空间,如何判定一个算法的好坏,在开发一个软件时,都是必须予以解决的。计算机系统中的操作系统、语言编译系统、数据库管理系统以及各种各样的计算机应用系统中的软件,都必须用一个个具体的算法来实现。因此,算法设
3、计与分析是计算机科学与技术的一个核心问题。第5章 算法思维与程序设计基础5.1.1 算法的基本概念算法的基本概念欧几里德曾在他的著作中描述过求两个数的最大公因子的过程。20世纪50年代,欧几里德所描述的这个过程被称为欧几里德算法,算法这个术语在学术上便具有了现在的含义。下面是这个算法的例子及它的一种描述。第5章 算法思维与程序设计基础算法算法5.1.1 欧几里德算法。输入:正整数m,n输出:m,n的最大公因子1.int euclid(int m,int n)2.3.int r;4.do 5.r=m%n;6.m=n;7.n=r;8.while(r)9.return m;10.第5章 算法思维与程
4、序设计基础在此用一种类C语言来叙述最大公因子的求解过程。在算法的第5行,把m除以n的余数赋予r,第6行把n的值赋予m,第7行把r值赋予n,第8行判断r是否为0,若非0,继续转到第5行进行处理;若为0,就转到第9行处理,第9行返回m,算法结束。按照上面这组规则,给定任意两个正整数,总能返回它们的最大公因子。可以证明这个算法的正确性。第5章 算法思维与程序设计基础算法的历史可以追溯到9世纪的古波斯。最初它仅表示“阿拉伯数字的运算法则”。后来,它被赋予更一般的含义,即所谓的一组确定的、有效的、有限的解决问题的步骤。这是算法的最初定义。当代著名计算机科学家DEKnuth在他撰写的THE ART OF
5、COMPUTER PROGRAMMING一书中写到:“一个算法,就是一个有穷规则的集合,其中之规则规定了一个解决某一特定类型的问题的运算序列。”综上所述,可以给出算法的定义:算法是解某一特定问题的一组有穷规则的集合。第5章 算法思维与程序设计基础5.1.2 算法的基本特征算法的基本特征任何解决问题的过程都是由一定的步骤组成的,通常把解决问题的确定方法和有限步骤称为算法。对于计算机科学来说,算法指的是对特定问题求解步骤的一种描述,是若干条指令的有穷序列,并且它具有以下特性:(1)有穷性:算法在执行有限步骤之后结束。(2)确切性:算法的每一个步骤都有确切的定义。(3)输入:一个算法有0个或多个输入
6、,它是由外部提供的,作为算法开始执行前的初始值或初始状态。算法的输入是从特定的对象集合中抽取的。第5章 算法思维与程序设计基础(4)输出:一个算法有一个或多个输出,这些输出与输入有特定的关系,实际上是输入的某种函数。不同取值的输入,产生不同结果的输出。(5)可行性:在原则上算法能够精确地运行,进行有限次运算后即可完成一种运算。必须注意到,在实际应用中,有穷性的限制是不够的。一个实用的算法,不仅要求步骤有限,同时要求运行这些步骤所花费的时间是人们可以接受的。如果一个算法需要执行数十百亿计的运算步骤,则从理论上说,它是有限的,最终可以结束,但却是人们难以接受的。第5章 算法思维与程序设计基础算法设
7、计的整个过程,可以包含对问题需求的说明、数学模型的拟制、算法的详细设计、算法的正确性验证、算法的实现、算法分析、程序测试和文档资料的编制。第5章 算法思维与程序设计基础 5.2 亚当夏娃的诱惑亚当夏娃的诱惑算法与程序算法与程序5.2.1 算法思想的本质算法思想的本质数学模型数学模型简单地说,数学模型就是对实际问题的一种数学表达,是数学理论与实际问题相结合的一门科学。它将现实问题归结为相应的数学问题,并在此基础上利用数学概念、方法和理论进行深入分析与研究,从而可以从定性或定量的角度来刻画实际问题,并为解决现实问题提供精确数据和可靠指导。算法设计时,首先要根据问题的描述,建立符合要求的数学模型,并
8、设计相关的约束条件等。第5章 算法思维与程序设计基础建立数学模型的步骤如下:(1)模型准备。要了解问题的实际背景,明确建模目的,搜索必要的各种信息,尽量弄清对象的特征。(2)模型假设。根据对象的特征和建模目的,对问题进行必要的、合理的简化,用精确的语言做出假设,是建模至关重要的一步。高超的建模者能充分发挥想象力、洞察力和判断力,善于辨别问题所有因素的主次,而且为了使处理方法简单,应尽量使问题线性化、均匀化。(3)模型构成。根据所做的假设分析对象的因果关系,利用对象的内在规律和适当的数学工具,建立各个量之间的等式或不等式关系,列出表格、画出图形或确定其他数学结构,选择恰当的数学工具和构造模型的方
9、法对其进行表征,构造出刻画实际问题的数学模型。第5章 算法思维与程序设计基础(4)模型求解。构造数学模型之后,再根据已知条件和数据分析模型的特征及结构特点,设计或选择求解模型的数学方法和算法,这其中包括解方程、画图形、证明定理、进行逻辑运算及稳定性讨论,特别是编写计算机程序或运用与算法相适应的软件包,并借助计算机完成对模型的求解。(5)模型分析。根据建模的目的要求,对模型求解的数字结果,或进行变量之间的依赖关系分析,或进行稳定性分析,或进行系统参数的灵敏度分析,或进行误差分析等。通过分析,如果不符合要求,就修改或增减建模假设条件,重新建模,直到符合要求;如果符合要求,还可以对模型进行评价、预测
10、、优化等。第5章 算法思维与程序设计基础(6)模型检验模型分析符合要求之后,还必须回到客观实际中去对模型进行检验,用实际现象、数据等检验模型的合理性和适用性,看它是否符合客观实际,若不符合,就修改或增减假设条件,重新建模,循环往复,不断完善,直到获得满意的结果。目前计算机技术已为我们进行模型分析、模型检验提供了先进的手段,充分利用这一手段,可以节约大量的时间、人力和物力。(7)模型应用。模型应用是数学建模的宗旨,也是对模型最客观、最公正的检验。因此,一个成功的数学模型,必须根据建模的目的,将其用于分析、研究和解决实际问题,充分发挥数学模型在生产和科研中的特殊作用。第5章 算法思维与程序设计基础
11、5.2.2 算法思想的表达算法思想的表达算法设计算法设计人们希望计算机求解的问题是千差万别的,所设计的求解方法也千差万别。一般来说,算法设计没有固定的方法可循,所以,算法的设计是一个灵活且充满智慧的过程,要求设计者针对具体的问题设计出适合该问题的解决方案。在进行算法设计时,一般遵循以下步骤:(1)明确问题的性质,分析题意。这一步很关键。在设计算法的时候,一定要先搞清楚要求算法处理什么问题、实现哪些功能、预期获得的结果等。如果设计者没有充分理解所要解决的问题,那么设计出的算法肯定是漏洞百出的。这一步是算法的切入点,也是设计者必备的技能。第5章 算法思维与程序设计基础(2)建立问题的数学描述模型。
12、数学模型是对实际问题的一种数学表达,进行算法设计时,首先要根据问题的描述,建立符合要求的数学模型,并设计相关的约束条件等。(3)设计/验证算法。算法设计是把算法具体化,即设计出算法的详细规格说明。在这一阶段,要选择算法的设计策略,并确定合理的数据结构。显然,算法设计策略的选择关乎全局,同样,数据结构的选择对于算法的设计和分析也很重要,如果选择不当,它将影响算法的性能。做完上面的工作后,采用描述工具将算法的具体过程描述下来,通过对一系列与算法的工作对象有关的定理、引理和公式进行证明,来验证算法所选择的设计策略与思路是否正确。第5章 算法思维与程序设计基础(4)算法分析。算法分析是对算法的效率进行
13、分析,主要是时间效率和空间效率。其中,时间效率显示算法运行速度有多快,空间效率显示算法运行时需要的存储空间有多大。相对而言,人们更关注时间效率。(5)算法实现和测试。根据算法,采用一种编程语言编程实现,然后上机调试,得到程序的运行结果,分析运行结果是否符合预先的期望,如果不符合,则找出原因,并对算法或程序进行修正,直到得到正确的结果。第5章 算法思维与程序设计基础5.2.3 算法思想的实现算法思想的实现程序设计程序设计程序设计是给出解决特定问题程序的过程,是软件构造活动中的重要组成部分。程序设计往往以某种程序设计语言为工具,给出这种语言下的程序。程序设计过程应当包括分析、设计、编码、测试、排错
14、等不同阶段。任何设计活动都是在各种约束条件和相互矛盾的需求之间寻求一种平衡,程序设计也不例外。在计算机技术发展的早期,由于机器资源比较昂贵,程序的时间和空间代价往往是设计关心的主要因素;随着硬件技术的飞速发展和软件规模的日益庞大,程序的结构、可维护性、复用性、可扩展性等因素日益重要。第5章 算法思维与程序设计基础在程序设计时,一般遵循以下步骤:(1)分析问题。对于接受的任务要进行认真的分析,研究所给定的条件,分析最后应达到的目标,找出解决问题的规律,选择解题的方法,完成实际问题。(2)设计算法。即设计出解题的方法和具体步骤。(3)编写程序。将算法翻译成计算机程序设计语言,对源程序进行编辑、编译
15、和连接。(4)运行程序,分析结果。运行可执行程序,得到运行结果。能得到运行结果并不意味着程序正确,要对结果进行分析,看它是否合理。不合理要对程序进行调试,即通过上机发现和排除程序中的故障的过程。第5章 算法思维与程序设计基础(5)编写程序文档。许多程序是提供给别人使用的,如同正式的产品应当提供产品说明书一样,正式提供给用户使用的程序,必须向用户提供程序说明书。其内容应包括程序名称、程序功能、运行环境、程序的装入和启动、需要输入的数据,以及使用注意事项等。第5章 算法思维与程序设计基础5.2.4 检验真理的标准检验真理的标准算法分析算法分析解决一个问题,算法不必是唯一的。对表示问题的数据的不同组
16、织方式(数据结构),解决问题的不同策略将导致不同的算法。解决同一问题的不同算法,消耗的时间和空间资源量有所不同。算法运行所需要的计算机资源的量称为算法的复杂性。一般来说,解决同一问题的算法,需要的资源量越少,我们认为越优秀。计算算法运行所需资源量的过程称为算法复杂性分析,简称算法分析。理论上,算法分析既要计算算法的时间复杂性,也要计算它的空间复杂性。然而,算法的运行时间都是消耗在数据处理上的,从这个意义上说,算法的空间复杂性不会超过时间复杂性。因此,人们多关注算法的时间复杂性。第5章 算法思维与程序设计基础1算法复杂性算法复杂性1)时间复杂性随着计算机硬件和软件的提升,一个算法的执行时间不便精
17、确计算,只能依据统计方法对算法进行估算。抛开硬件和软件的因素,算法的好坏将直接影响程序的运行时间。一个算法花费的时间与算法中语句的执行次数成正比,哪个算法中语句执行次数多,它花费的时间就多。一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,称为语句频度或时间频度,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=第5章 算法思维与程序设计基础O(f(n),称O(f(n)为算法的渐进时间复杂度,简称时间复杂度。随着模块n的增大,算法执行的时间增长率f(n)的增长率成正比,
18、所以f(n)越小,算法的时间复杂度越低,算法的效率越高。例例5-1 分析下面程序的时间复杂度:int value=0;/执行了1次for(int i=0;i n;i+)/执行了n次value+=i;第5章 算法思维与程序设计基础这个算法执行了1+n次,如果n无限大,则可以把前边的1忽略,也就是说这个算法执行了n次,这个算法的时间复杂度就是O(n)。计算时间复杂度的步骤如下:(1)去掉运行时间中的所有加法常数。(2)只保留最高阶项。(3)如果最高阶项存在且不是1,则去掉与这个最高阶相乘的常数即可得到时间复杂度。第5章 算法思维与程序设计基础例例5-2 计算下面程序的时间复杂度:分析:当i=0时,
19、里面的for循环执行了n次,当i等于1时里面的for循环执行了n1次,当i等于2时里面的for执行了n2次,所以执行的次数是第5章 算法思维与程序设计基础根据上边计算时间复杂度的步骤,可得以下计算过程:(1)去掉运行时间中的所有加法常数:这里没有加法常数不用考虑。(2)只保留最高阶项:这里只保留。(3)去掉与这个最高阶相乘的常数:这里去掉 只剩下n2。最终这个算法的时间复杂度为O(n2)。例例5-3 计算下面程序的时间复杂度:for(int i=0;i b+a,就把a排在b的前面,反之则把a排在b的后面。贪婪算法所作的选择可以依赖于以往所作过的选择,但决不依赖于将来的选择,也不依赖于子问题的解
20、,因此贪婪算法与其他算法相比具有一定的速度优势。如果一个问题可以同时用几种方法解决,则贪婪算法应该是最好的选择之一。第5章 算法思维与程序设计基础5.3.3 成竹在胸成竹在胸动态规划法动态规划法动态规划(Dynamic Programming)法是 20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(Multistep Decision Process)的优化问题时,把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解,所创立的解决这类过程优化问题的新方法。动态规划问世以来,在经济管理、生产调度、工程技术和最优控制等方面得到了广泛的应用。例如,最短路线、库
21、存管理、资源分配、设备更新、排序、装载等问题,用动态规划法比用其他方法求解更为方便。第5章 算法思维与程序设计基础动态规划程序设计是解决最优化问题的一种途径和方法,而不是一种特殊算法。不像搜索或数值计算那样,具有一个标准的数学表达式和明确清晰的解题方法。由于各种问题的性质不同,确定最优解的条件也互不相同,因而动态规划的设计方法对不同的问题,有各具特色的解题方法,而不存在一种万能的动态规划算法,可以解决各类最优化问题。因此读者在学习时,在正确理解基本概念和方法的基础上,必须具体问题具体分析处理,以丰富的想象力去建立模型,用创造性的技巧去求解。第5章 算法思维与程序设计基础1动态规划法所能解决的问
22、题特征动态规划法所能解决的问题特征(1)最优子结构性质:一个最优化策略具有这样的性质,不论过去状态和决策如何,对前面的决策所形成的状态而言,余下的诸决策必须构成最优策略。简而言之,一个最优化策略的子策略总是最优的。(2)无后效性:将各阶段按照一定的次序排列好之后,对于某个给定的阶段状态,它以前各阶段的状态无法直接影响它未来的决策,而只能通过当前的这个状态。换句话说,每个状态都是过去历史的一个完整总结。这就是无后效性,又称为无后向性。第5章 算法思维与程序设计基础(3)子问题的重叠性:即子问题之间是不独立的,一个子问题在下一阶段决策中可能被多次使用到。该性质并不是动态规划适用的必要条件,但是如果
23、没有这条性质,动态规划算法同其他算法相比就不具备优势。第5章 算法思维与程序设计基础2动态规划算法的基本思路动态规划算法的基本思路动态规划算法的基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。由于动态规划解决的问题多数有重叠子问题这个特点,为减少重复计算,对每一个子问题只解一次,将其不同阶段的不同状态保存在一个二维数组中。动态规划法与分治法最大的差别是:适合于用
24、动态规划法求解的问题,经分解后得到的子问题往往不是互相独立的(即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解)。第5章 算法思维与程序设计基础3.动态规划算法的求解步骤动态规划算法的求解步骤动态规划所处理的问题是一个多阶段决策问题,一般由初始状态开始,通过对中间阶段决策的选择,达到结束状态。动态规划的设计都有着一定的模式,一般要经历以下几个步骤。(1)划分阶段:按照问题的时间或空间特征,把问题分为若干个阶段。在划分阶段时,注意划分后的阶段一定要是有序的或者是可排序的,否则问题就无法求解。(2)确定状态和状态变量:将问题发展到各个阶段时所处于的各种客观情况用不同的状态表示
25、出来。当然,状态的选择要满足无后效性。第5章 算法思维与程序设计基础(3)确定决策并写出状态转移方程:因为决策和状态转移有着天然的联系,状态转移就是根据上一阶段的状态和决策来导出本阶段的状态。所以如果确定了决策,状态转移方程也就可写出。但事实上常常是反过来做,根据相邻两个阶段的状态之间的关系来确定决策方法和状态转移方程。(4)寻找边界条件:给出的状态转移方程是一个递推式,需要一个递推的终止条件或边界条件。实际应用中可以按以下简化的步骤进行设计:(1)分析最优解的性质,并刻画最优解的结构特征。(2)递归定义最优值。(3)自底向上计算出最优值,并记录相关信息。(4)根据计算最优值时得到的信息,构造
展开阅读全文