版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1. 算法分析的目的算法分析的目的 通过对算法分析,在把算法变成程序实际运行前通过对算法分析,在把算法变成程序实际运行前,就知道为完成一项任务所设计的算法的好坏,从而,就知道为完成一项任务所设计的算法的好坏,从而运行好算法,改进差算法,避免无益的人力和物力浪运行好算法,改进差算法,避免无益的人力和物力浪费。费。 算法分析算法分析2. 重要的假设和约定重要的假设和约定1)计算机模型的假设)计算机模型的假设 计算机形式理论模型计算机形式理论模型 : Turing机模型(理想化)机模型(理想化) 通用计算机模型:通用计算机模型: 单处理器:每次执行程序中一条指令单处理器:每次执行程序中一条指令 有足
2、够的有足够的“内存内存” 能在固定的时间内存取数据单元能在固定的时间内存取数据单元2)计算的约定)计算的约定确定使用什么样的运算及其执行时间。确定使用什么样的运算及其执行时间。从计算时间上,运算的分类:从计算时间上,运算的分类: 时间囿界于常数的运算时间囿界于常数的运算:每种运算的执行时:每种运算的执行时间不同,但一般只花间不同,但一般只花 一个一个固定量固定量时间(单位时间时间(单位时间)就可完成。)就可完成。 基本算术运算基本算术运算 字符运算字符运算 赋值赋值运算运算 过程调用等过程调用等2)计算的约定)计算的约定 其他运算其他运算:特点:运算时间:特点:运算时间无定量无定量 字符串操作
3、:与字符串中字符的数量成正比。字符串操作:与字符串中字符的数量成正比。 记录操作:与记录的属性数、属性类型等有关。记录操作:与记录的属性数、属性类型等有关。 如何分析非时间囿界于常数的运算?如何分析非时间囿界于常数的运算? 如:如:Tstring = Length(String)* tchar算法的执行时间算法的执行时间=Fi*ti Fi是算法中用到的某种运算是算法中用到的某种运算i的次数,的次数, ti是该运算执行是该运算执行一次所用时间。一次所用时间。1.有些计算机需要用户提供程序运行时有些计算机需要用户提供程序运行时 间的上限,一旦达到这个上限,程序间的上限,一旦达到这个上限,程序 将被
4、强制结束。将被强制结束。2.正在开发的程序可能需要提供一个满正在开发的程序可能需要提供一个满 意的实时响应。意的实时响应。时间复杂性和空间复杂性3.算法复杂性算法复杂性为什么要考虑时间复杂性?1.1.多用户系统中运行时,需指明分配多用户系统中运行时,需指明分配给该程序的内存大小。给该程序的内存大小。2.2.可提前知道是否有足够可用的内存可提前知道是否有足够可用的内存来运行该程序。来运行该程序。3.3.一个问题可能有若干个内存需求各一个问题可能有若干个内存需求各不相同的解决方案,从中择取。不相同的解决方案,从中择取。4.4.利用空间复杂性来估算一个程序所利用空间复杂性来估算一个程序所能解决问题的
5、最大规模。能解决问题的最大规模。考虑程序的空间复杂性的理由:4. 如何进行算法分析?如何进行算法分析?事前分析事前分析:就算法本身,通过对其执行性能的理论分析,:就算法本身,通过对其执行性能的理论分析, 得出关于算法特性得出关于算法特性时间和空间时间和空间的一个特征的一个特征 函数(函数(、)与计算机软硬件没有直接与计算机软硬件没有直接 关系。关系。事后测试事后测试:将算法编制成程序后放到计算机上运行,收集:将算法编制成程序后放到计算机上运行,收集 其执行时间和空间占用等统计资料,进行分析其执行时间和空间占用等统计资料,进行分析 判断判断直接与物理实现有关。直接与物理实现有关。1)事前分析)事
6、前分析 目的:试图得出关于算法执行特性的一种形式描目的:试图得出关于算法执行特性的一种形式描 述,以述,以“理论上理论上”衡量算法衡量算法 “好坏好坏”。 如何给出反映算法执行特性的描述如何给出反映算法执行特性的描述? 最直接方法:最直接方法:统计算法中各种运算的执行情况:统计算法中各种运算的执行情况: 运用了哪些运算运用了哪些运算 每种运算被执行的次数每种运算被执行的次数 该种运算执行一次所花费的时间该种运算执行一次所花费的时间 算法的执行时间算法的执行时间=Fi*ti 频率计数:频率计数:算法中算法中语句语句或或运算运算的执行次数。的执行次数。 例:例: x=x+y for (i =1;i
7、=n;i+) for (i =1;i=n;i+) x=x+y; for (j =1;j=n;j+) x=x+y; (a) (b) (c) 分析:分析: (a): x=x+y执行了执行了1次次 (b): x=x+y执行了执行了n次次 (c): x=x+y执行了执行了n2次次 注:在事前分析中,只限于确定与所使用机器及其他环境注:在事前分析中,只限于确定与所使用机器及其他环境因素无关的频率计数,依此建立一种理论上分析模型。因素无关的频率计数,依此建立一种理论上分析模型。 数量级数量级 语句的数量级语句的数量级:语句的执行频率。:语句的执行频率。例:例:1,n ,n2 算法的数量级算法的数量级:算法
8、包含所有语句的执行频率之和。:算法包含所有语句的执行频率之和。 算法的数量级从本质上反映了一个算法的执行特性。算法的数量级从本质上反映了一个算法的执行特性。 例:求解同一问题的三个算法分别具有例:求解同一问题的三个算法分别具有n, n2 , n3数量级。数量级。 若若n=10,则可能的执行时间将分别是,则可能的执行时间将分别是10,100,1000 个个单位时间单位时间与环境因素无关。与环境因素无关。 计算时间计算时间/频率计数的表示函数频率计数的表示函数 通过事前分析给出算法计算时间(频率计数通过事前分析给出算法计算时间(频率计数)的一个)的一个函数函数表示形式,一般记为与表示形式,一般记为
9、与输入规模输入规模n有有关的函数形式:关的函数形式:f(n)注:最高次项与函数整体的关系注:最高次项与函数整体的关系空间特性分析(与时间特性的分析类似,略)空间特性分析(与时间特性的分析类似,略) 2)事后测试)事后测试 目的:目的:运行程序,确定程序实际耗费的时间运行程序,确定程序实际耗费的时间与空间,验证先前的分析结论与空间,验证先前的分析结论包括正确包括正确性、执行性能等,比较、优化所设计的算法性、执行性能等,比较、优化所设计的算法。 分析手段:分析手段:作时、空性能分布图。作时、空性能分布图。算法复杂性分析算法复杂性分析 算法复杂性 = 算法所需要的计算机资源 算法的时间复杂性T(n)
10、; 算法的空间复杂性S(n)。 其中n是问题的规模(输入大小)。算法的时间复杂性算法的时间复杂性(1)最坏情况最坏情况下的时间复杂性 Tmax(n) = max T(I) | size(I)=n (2)最好情况最好情况下的时间复杂性 Tmin(n) = min T(I) | size(I)=n (3)平均情况平均情况下的时间复杂性 Tavg(n) = 其中I是问题的规模为n的实例,p(I)是实 例I出现的概率。nIsizeITIp)()()(算法渐近复杂性算法渐近复杂性 T(n) , as n ; (T(n) - t(n) )/ T(n) 0 ,as n; t(n)是T(n)的渐近性态,为算法
11、的渐近复杂性。 在数学上, t(n)是T(n)的渐近表达式,是T(n)略去低阶项留下的主项。它比T(n) 简单。2( )34 log7T nnnn例2( )34 log7T nnnn2( )3t nn24 log7( ( )( )/( )034 log7nnT nt nT nnnn计算时间的渐近表示计算时间的渐近表示记:算法的计算时间为记:算法的计算时间为f(n) 数量级限界函数为数量级限界函数为g(n)其中,其中, n是输入或输出规模的某种测度。是输入或输出规模的某种测度。 f(n)表示算法的表示算法的“实际实际”执行时间执行时间与机器及语言有关与机器及语言有关。 g(n)是是形式简单形式简
12、单的函数,如的函数,如nm,logn,2n,n!等。是事等。是事前分析中通过对计算时间或频率计数统计分析所得的前分析中通过对计算时间或频率计数统计分析所得的与机与机器及语言无关器及语言无关的函数。的函数。 以下给出算法执行时间:以下给出算法执行时间:上界上界()、)、下界下界()、)、“平均平均”( )的定义。)的定义。渐进意义下的记号:渐进意义下的记号:O, , ,定义定义1.1 如果存在两个正常数如果存在两个正常数c和和N0,对于所有的对于所有的NN0,有,有| |f(N)| |C| |g(N)| |,则记作:,则记作:f(N)= O(g(N)。N0f(N)g(N)当说一个算法具有O(g(
13、n)的计算时间时,指的就是如果此算法用n值不变的同一类数据在某台机器上运行时,所用的时间总是小于g(n)的一个常数倍。g(n)是计算时间f(n)的一个上界函数,f(n)的数量级就是g(n)。 因为对所有的因为对所有的N N11有有3 3N N44N N,所以有,所以有3 3N N= =O O( (N N);); 因为当因为当N N11时有时有N N+10241025+10241025N N,所以有,所以有N N+1024=+1024=O O( (N N);); 因为当因为当N N1010时有时有2 2N N2 2+11+11N N-103-103N N2 2, ,所以有所以有 2 2N N2
14、2+11+11N N-10=-10=O O( (N N2 2) ) 因为对所有因为对所有N N11有有N N2 2N N3 3, ,我们有我们有N N2 2= =O O( (N N3 3) ) 作为一个反例作为一个反例N N3 3O O( (N N2 2),),因为若不然,则存在正的常因为若不然,则存在正的常数数C C和自然数和自然数N N0 0, ,使得当使得当N NN N0 0,有有N N3 3CNCN2 2, ,即即N NC C。显。显然,当取然,当取N N=max=maxN N0 0, ,C C+1+1时这个不等式不成立,所以时这个不等式不成立,所以N N3 3O O( (N N2 2
15、) )例例例例2/ 2()22nnnO1( )21/1nO3log(log )nOnlog3( )nO n 多项式定理多项式定理:定理定理1.1 若若A(n) = amnm+a+a1 1n+an+a0 0是一个是一个m m次多项次多项 式,则有式,则有A(n)=A(n)=( (nm) ) 即:变量即:变量n n的固定阶数为的固定阶数为m m的任一多项式,与此多的任一多项式,与此多 项式的最高阶项式的最高阶nm同阶。同阶。 证明:取证明:取n n0 0=1,=1,当当nnnn0 0时,有时,有 |A(n)|am|nm+|a1|n+|a0| (|am|+|am-1|/n+|a0|/nm) nm (
16、|am|+|am-1|+|a0|) nm 令令c= |am|+|am-1|+|a0| 定理得证。定理得证。 计算时间的数量级对算法有效性的影响计算时间的数量级对算法有效性的影响 数量级数量级的大小对算法的有效性有的大小对算法的有效性有决定性决定性的影响。的影响。 例:假设解决同一个问题的两个算法,它们都有例:假设解决同一个问题的两个算法,它们都有n个输个输入,计算时间的数量级分别是入,计算时间的数量级分别是n2和和nlogn。则:。则: n=1024:分别需要:分别需要1048576和和10240次运算。次运算。 n=2048:分别需要:分别需要4194304和和22528次运算。次运算。分析
17、:在分析:在n加倍的情况下,一个加倍的情况下,一个(n(n2 2) )的算法计算时间增长的算法计算时间增长4 4 倍,而一个倍,而一个(nlogn)(nlogn)算法则只用算法则只用两两倍多一点的时间即倍多一点的时间即 可完成。可完成。 算法分类(计算时间)算法分类(计算时间)多项式时间算法:多项式时间算法:可用多项式(函数)对其计算可用多项式(函数)对其计算时间限界的算法。时间限界的算法。 常见的多项式限界函数有:常见的多项式限界函数有: (1) (1) (logn) (logn) (n) (n) (nlogn) (nlogn) (n(n2 2) ) (n(n3 3) )指数时间算法:指数时
18、间算法:计算时间用指数函数限界的算法计算时间用指数函数限界的算法 常见的指数时间限界函数:常见的指数时间限界函数: (2(2n n) ) (n(n!) ) 0 0,则则f(n)=f(n)=(n(nm m ) )。 该定义的优点是与该定义的优点是与O O的定义对称,缺点是的定义对称,缺点是f f( (N N) )对自然对自然数的不同无穷子集有不同的表达式,且有不同的阶数的不同无穷子集有不同的表达式,且有不同的阶时,不能很好地刻画出时,不能很好地刻画出f f( (N N) )的下界。的下界。比如当比如当 100 N为正偶数为正偶数 f(N)= 6N2 N为正奇数为正奇数 按照定义,得到按照定义,得
19、到f f( (N N)=)=(1),(1),这是个平凡的下界,对这是个平凡的下界,对算法分析没有什么价值。算法分析没有什么价值。定义定义1.3 如果存在正常数如果存在正常数c1,c2和和n0,对于所有的,对于所有的nn0,有,有c1|g(N)| |f(N)| c2|g(N)| 则记作则记作 f(N)= (g,(N)含义:含义: 算法在最好和最坏情况下的计算时间就一个常数因子范算法在最好和最坏情况下的计算时间就一个常数因子范围内而言是相同的。可看作:围内而言是相同的。可看作: 既有既有f(N)=f(N)=(g(N)(g(N),又有,又有f(N)=f(N)=(g(N)(g(N)“平均情况”限界函数
20、算法分析方法算法分析方法 例:顺序搜索算法例:顺序搜索算法templateint seqSearch(Type *a, int n, Type k) for(int i=0;in;i+) if (ai=k) return i; return -1;(1)Tmax(n) = max T(I) | size(I)=n =O(n)(2)Tmin(n) = min T(I) | size(I)=n =O(1)(3)在平均情况下,假设: (a) 搜索成功的概率为p ( 0 p 1 ); (b) 在数组的每个位置i ( 0 i n )搜索成功的概率相同,均为 p/n。nIsizeavgITIpnT)()(
21、)()(pnnpnnpnpnp1321)1 (2) 1(11pnnppninpni算法分析的基本法则算法分析的基本法则 非递归算法:非递归算法:(1)for / while 循环循环体内计算时间*循环次数;(2)嵌套循环循环体内计算时间*所有循环次数;(3)顺序语句各语句计算时间相加;(4)if-else语句if语句计算时间和else语句计算时间的较大者。最优算法最优算法问题的计算时间下界为(f(n),则计算时间复杂性为O(f(n)的算法是最优算法。例如,排序问题的计算时间下界为(nlogn),计算时间复杂性为O(nlogn)的排序算法是最优算法。堆排序算法是最优算法。非递归算法分析 1仅依赖
22、于问题规模的时间复杂度 有一类简单的问题,其操作具有普遍性,也就是说对所有的数据均等价地进行处理,这类算法的时间复杂度,很容易分析。【例1】交换i和j的内容 Temp=i;i=j;j=temp; 以上三条单个语句的频度均为1,该算法段的执行时间是一个与问题规模n无关的常数。算法的时间复杂度为常数阶,记作T(n)=(1)。 如果算法的执行时间不随着问题规模n的增加而增长,即使算法中有上千条语句,其执行时间也不过是一个较大的常数。此类算法的时间复杂度是(1)。【例2】变量计数之一 (1) x=0; y =0; (2) for(k=1;k=n;k+) (3) x+; (4) for(i=1;i=n;
23、i+) (5) for(j=1;j=n;j+) (6) y+; 该算法段的时间复杂度为T(n)=(n2 2) )。 当有若干个循环语句时,算法的时间复杂度是由嵌套层数最多的循环语句中最内层语句的频度f(n)决定的。【例3】变量计数之二(1) x=1;(2) for(i=1;i=n;i+)(3) for(j=1;j=i;j+)(4) for(k=1;k=j;k+)(5) x+;该算法段中频度最大的语句是(5),从内层循环向外层分析语句(5)的执行次数:则该算法段的时间复杂度为:T(n)=O(n3/6+低次项)=O(n3)。【例3】变量计数之二(1) x=1;(2) for(i=1;i=n;i+)
24、(3) for(j=1;j=i;j+)(4) for(k=1;k=0 and Aik )(2) while( i=0 and Aik ) (3) i=i-1 (3) i=i-1; (4) return i(4) return i; 此算法的频度不仅与问题规模此算法的频度不仅与问题规模n n有关,还与输入有关,还与输入实例中实例中A A的各元素取值及的各元素取值及k k的取值有关:的取值有关: 1. 1. 若若A A中没有与中没有与k k相等的元素,则语句相等的元素,则语句(2)(2)的频度的频度f(n)=nf(n)=n;这是最坏情况。;这是最坏情况。 2. 2. 若若A A的最后一个元素等于的
25、最后一个元素等于k,k,则语句则语句(2)(2)的频度的频度f(n)f(n)是常数是常数1;1;这是最好情况。这是最好情况。 在求平均情况时,一般地假设查找不同元素的概率P是相同的,则算法的平均复杂度为: 若对于查找不同元素的概率P不相同时,其算法复杂度就只能做近似分析,或在构造更好的算法或存储结构后,做较准确的分析。2.2.2 递归算法分析 一进一步认识递归 1执行过程 【例1】求N! 2实现机理简介 二效率分析方法 1代入法代入法 2迭代法 3套用公式法 4差分方程法 5母函数法 【例例1】求N! 构造算法中的两个步骤: 1)N!=N*(N-1)! 2)0!=1, 1!=1。 递归算法如下
26、: 以n=3为例,调用过程如下: fact(3)-fact(2)-fact(1)-fact(2)-fact(3) 递 归 回 溯迭代法迭代法介绍: 用迭代方法估计递归算法的解, 就是充分利用递归算法中的递归关系,通过一定的代数运算和数学分析的级数知识,得到问题的复杂度。 递归方程具体就是利用递归算法中的递归关系写出递归方程,迭代地展开的右端,使之成为一个非递归的和式,然后通过对和式的估计来达到对方程左端即方程的解的估计。 【例例1】求n! 递归方程为: T(n)=T(n-1)+O(1) 其中O(1)为一次乘法操作. 迭代求解过程如下: T(n)=T(n-2)+O(1)+O(1) =T(n-3)+O(1)+O(1)+O(1) =O(1)+O(1)+O(1)+O(1) =n*O(1) =O(n)【例例2】抽象地考虑以下递归方程,且假设n=2k,则迭代求解过程如下: 【例例3】以下递归方程,是第四章将介绍的二分算法典型的递归方程。同样假设n=2k: T(n)= T(n/2)+O(n) = T(n/4)+O
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年大学第四学年(水利枢纽)水利工程效益分析测试题及答案
- 天津市静海县名校2026年中考考前适应性测试语文试题含解析
- 山东省德州临邑县联考2025-2026学年初三语文试题下学期一模考试试题含解析
- 山东省临沂市罗庄区2025-2026学年中考考前针对性练习(二模)英语试题试卷含解析
- 天津市宝坻区2026届初三校内模拟考试自选模块试卷含解析
- 四川省资阳市雁江区迎丰祥2025-2026学年中考物理试题模拟卷(三)含解析
- 2026年过程装备常见腐蚀类型及案例
- 2026年机电一体化系统的创新设计实践
- 2026年过程装备状态监测的学术前沿
- 2026年设备可靠性工程与故障管理
- 2026年马鞍山师范高等专科学校单招职业适应性测试题库含答案详解(研优卷)
- (新教材)2026年部编人教版二年级下册语文 第7课 我不是最弱小的 课件
- 2026及未来5年中国演艺行业市场运行态势及投资战略规划报告
- 2026广东清远市清城区医疗卫生共同体总医院招聘编外工作人员42人笔试参考题库及答案解析
- 园林绿化工国家职业技能标准
- 智联招聘考试题库及答案
- 2025-2030中国风能回收市场投资建议及重点企业发展调研研究报告
- 2025上半年湖南能源集团招聘322人笔试历年常考点试题专练附带答案详解2套试卷
- 前程无忧在线测试题库及答案行测
- 第15课+列强入侵与中国人民的反抗斗争(教学设计)-中职历史(高教版2023基础模块)
- GB/T 46831-2025塑料聚丙烯(PP)等规指数的测定低分辨率核磁共振波谱法
评论
0/150
提交评论