算法与复杂性-第2讲-算法分析基础课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《算法与复杂性-第2讲-算法分析基础课件.ppt》由用户(ziliao2023)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 复杂性 分析 基础 课件
- 资源描述:
-
1、第第2章章 算法分析基础算法分析基础2.1 算法复杂度算法复杂度2.1.1 什么是好的算法什么是好的算法 一个好的算法应具有以下一个好的算法应具有以下4 4个重要特性个重要特性:正确性正确性(correctnesscorrectness):算法的执行结果):算法的执行结果应当满足预先规定的功能和性能要求。应当满足预先规定的功能和性能要求。简明性简明性(simplicitysimplicity):算法应):算法应思路清晰、层次分明、容易理解、思路清晰、层次分明、容易理解、利于编码和调试。利于编码和调试。效率效率(efficiencyefficiency):算法应有效使用存):算法应有效使用存储空
2、间,并具有高的时间效率。储空间,并具有高的时间效率。最优性最优性(optimalityoptimality):算法的执行时间):算法的执行时间已达到求解该类问题所需时间的下界。已达到求解该类问题所需时间的下界。是指当输入不合法数据是指当输入不合法数据 时,程序应能做适当处理而不至于时,程序应能做适当处理而不至于 引起严重后果。引起严重后果。其含义是:当程序其含义是:当程序 万一遇到意外时,能按某种预定方万一遇到意外时,能按某种预定方 式做出适当处理。式做出适当处理。正确性和健壮性是相互补充的。正确性和健壮性是相互补充的。2.1.2 影响程序运行时间的因素影响程序运行时间的因素 影响程序运行时间
3、的因素主要有:影响程序运行时间的因素主要有:程序所依赖的算法;程序所依赖的算法;问题规模和输入数据;问题规模和输入数据;计算机系统性能。计算机系统性能。2.1.3 算法的时间复杂度算法的时间复杂度 抽象机模型抽象机模型设抽象机提供由设抽象机提供由m m个基本运算(也可称为语句)个基本运算(也可称为语句)组成的运算集组成的运算集O=OO=O1 1,O,O2 2,O Om m,每个运算,每个运算都是基本的,它们的执行时间是有限常量。同都是基本的,它们的执行时间是有限常量。同时设执行第时设执行第i i个运算个运算O Oi i所需的时间是所需的时间是 i i,1im1im。时间复杂度时间复杂度一个算法
4、的时间复杂度(一个算法的时间复杂度(time complexity)是指)是指算法运行所需的时间。算法运行所需的时间。设有一个在抽象机上运行的算法设有一个在抽象机上运行的算法A,I是某次运行是某次运行时的输入数据,其规模为时的输入数据,其规模为n,则算法,则算法A的运行时间的运行时间T是是n和和I的函数,记做的函数,记做T(n,I)。又设在该次运算中抽。又设在该次运算中抽象机的第象机的第i个基本运算个基本运算Oi的执行次数为的执行次数为 i,1im,i也是也是n和和I的函数,记做的函数,记做 i(n,I)。那么,算法。那么,算法A在在输入为输入为I时的运行时间是:时的运行时间是:)I,n()I
5、,n(Tm1iii 最好、最坏和平均时间复杂度最好、最坏和平均时间复杂度最好时间复杂度最好时间复杂度最坏时间复杂度最坏时间复杂度平均时间复杂度平均时间复杂度最有实际价值:最坏时间复杂度最有实际价值:最坏时间复杂度T(n,I)DT(n,I)|IminB(n)n )T(n,IDT(n,I)|ImaxW(n)*n nDI P(I)T(n,I)A(n)2.1.4 使用程序步分析算法使用程序步分析算法 事前分析事前分析(priori analysispriori analysis)与)与事后测试事后测试(post testingpost testing)一个一个程序步程序步(program steppr
6、ogram step)是指)是指在语法上或语义上有意义的程序段,在语法上或语义上有意义的程序段,该程序段的执行时间必须与问题实该程序段的执行时间必须与问题实例的规模无关。例的规模无关。例子例子 求数组元素累加之和的迭代程序求数组元素累加之和的迭代程序float Sum(float list,float Sum(float list,constconst intint n)n)float float tempsumtempsum=0.0;=0.0;count+;/count+;/针对赋值语句针对赋值语句 for(for(intint i i=0;=0;i in;n;i i+)+)count+;c
7、ount+;/针对针对forfor循环语句循环语句 tempsumtempsum+=list+=listi i;count+;count+;/针对赋值语句针对赋值语句 count+;/count+;/针对针对forfor的最后一次执行的最后一次执行 count+;count+;/针对针对returnreturn语句语句 return return tempsumtempsum;总程序步数:总程序步数:2n+3求数组元素累加之和的递归程序求数组元素累加之和的递归程序float RSum(float list,const int n)count+;/针对针对 if 条件条件 if(n)count+
8、;/针对针对 RSum 调用和调用和return语句语句 return RSum(list,n-1)+listn-1;count+;/针对针对return语句语句 return 0;设设RSumRSum(list,nlist,n)的程序步为)的程序步为T(nT(n)0 n 2)1T(n 0 n 2T(n)T(nT(n)=2+T(n-1)=2+2+T(n-2)=2+T(n-1)=2+2+T(n-2)=2 =2*3+T(n-3)3+T(n-3)=2 =2*n+T(0)n+T(0)=2 =2*n+2n+22.1.5 算法的空间复杂度算法的空间复杂度 一个算法的一个算法的空间复杂度空间复杂度(spac
9、e complexityspace complexity)是指算法运行所需的存储空间。是指算法运行所需的存储空间。程序运行所需的存储空间包括以下两部分:程序运行所需的存储空间包括以下两部分:固定空间需求固定空间需求(fixed space requirementfixed space requirement)这部分空间与所处理数据的大小和个数这部分空间与所处理数据的大小和个数 无关,与问题实例的特征无关。无关,与问题实例的特征无关。主要包括主要包括程序代码程序代码、常量常量、简单变量简单变量、定长成分的结构变量定长成分的结构变量所占空间。所占空间。2.1.5 算法的空间复杂度算法的空间复杂度可
10、变空间需求可变空间需求(variable space requirementvariable space requirement)这部分空间大小与算法在某次执行中处理的特定数据的这部分空间大小与算法在某次执行中处理的特定数据的规模有关。规模有关。包括包括数据元素所占的空间数据元素所占的空间和和算法执行算法执行 所需的额外空间所需的额外空间,如递归所需的栈,如递归所需的栈 空间。空间。2.2 渐近表示法 2.2.1 大大O记号记号(渐近上界渐近上界)定义定义2-1 2-1 设函数设函数f(nf(n)和和g(ng(n)是定义在非负整数集合上的是定义在非负整数集合上的正函数,如果存在两个正常数正函数
11、,如果存在两个正常数c c和和n n0 0,使得当,使得当nnnn0 0时,有时,有f(n)cg(nf(n)cg(n),则记做,则记做f(nf(n)=)=O(g(nO(g(n)称为大称为大O O记号(记号(big Oh notationbig Oh notation)。)。f(n)=2n+3=O(n)当当n3时,时,2n+33n,所以,可选,所以,可选c=3,n0=3。对于。对于nn0,f(n)=2n+33n,所以,所以,f(n)=O(n),即,即2n+3 O(n)。这意味着,当。这意味着,当n3时,时,程序程序2-1的程序步不会超过的程序步不会超过3n,2n+3=O(n)。f(n)=10n2
12、+4n+2=O(n2)对于对于n2时,有时,有10n2+4n+210n2+5n,并且,并且当当n5时,时,5nn2,因此,可选,因此,可选c=11,n0=5;对于对于nn0,f(n)=10n2+4n+211n2,所以,所以f(n)=O(n2)。f(n)=n!=O(nn)对于对于n1,有,有n(n 1)(n 2)1nn,因此,因此,可选可选c=1,n0=1。对于。对于nn0,f(n)=n!nn,所以,所以,f(n)=O(nn)。10n2+9 O(n)使用反证法,假定存在使用反证法,假定存在c和和n0,使得对于,使得对于nn0,10n2+9cn始终成立,那么有始终成立,那么有10n+9/nc,即即
13、nc/10 9/(10n)总成立。但此不等式不可能总成立。但此不等式不可能总成立,取总成立,取n=c/10+1时,该不等式便不再成时,该不等式便不再成立。立。定理定理2-12-1 如果如果f(nf(n)=)=a am mn nm m +a+am m 1 1n nm m 1 1+a+a1 1n+an+a0 0是是m m次多项式,次多项式,且且a am m0 0,则,则f(nf(n)=)=O(nO(nm m)。证明:证明:取取n n0 0=1=1,当,当nnnn0 0时,有时,有 f(nf(n)=)=a am mn nm m +a+am m 1 1n nm m 1 1 +a+a1 1n+an+a0
14、 0|a am m|n|nm m +|a+|am m 1 1|n|nm m 1 1+|a+|a1 1|n+|a|n+|a0 0|(|a(|am m|+|a|+|am m 1 1|/n+|/n+|a+|a1 1|/n|/nm m 1 1+|a+|a0 0|/n|/nm m)n)nm m (|a(|am m|+|a|+|am m 1 1|+|+|a+|a1 1|+|a|+|a0 0|)n|)nm m可取可取c=|ac=|am m|+|a|+|am m 1 1|+|+|a+|a1 1|+|a|+|a0 0|,定理得证。,定理得证。渐近时间复杂度渐近时间复杂度 使用大使用大O记号及下面定义的几种渐近表
15、示法记号及下面定义的几种渐近表示法表示的算法时间复杂度,称为表示的算法时间复杂度,称为算法的渐近时间算法的渐近时间复杂度复杂度(asymptotic complexityasymptotic complexity)。)。只要适当选择只要适当选择关键操作关键操作,算法的渐近时间复杂,算法的渐近时间复杂度可以由关键操作的执行次数度可以由关键操作的执行次数 之和来计算。一般地,关键操作之和来计算。一般地,关键操作 的执行次数与问题的规模有关,的执行次数与问题的规模有关,是是n n的函数。的函数。【程序程序2-32-3】矩阵乘法矩阵乘法forfor(i=0;in;i+i=0;in;i+)/n+1/n+
16、1 for for(j=0;jn;j+j=0;jn;j+)/n(n+1)/n(n+1)cijcij=0;=0;/n/n2 2 for for(k=0;kn;k+k=0;km,nm,则则 n mod mn/2n mod mn/2mn/2时,有时,有n-mn-mn/2n/2,定理得证。,定理得证。两次迭代以后,余数最多是原始值的一半。两次迭代以后,余数最多是原始值的一半。欧几里德算法的时间复杂度为欧几里德算法的时间复杂度为 O(logn+logmO(logn+logm)。2.2.2 记号(渐近下界)定义定义2-2 2-2 设有函数设有函数f f(n n)和和g g(n n)是定义在非负整是定义在非
展开阅读全文