第二章算法分析基础.ppt
《第二章算法分析基础.ppt》由会员分享,可在线阅读,更多相关《第二章算法分析基础.ppt(44页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 第 二 章 算 法 分 析 基 础 算法分析的任务:对设计出的每一个具体的算法,利用数学工具,讨论其复杂度。上节 下节2.1 2.1 算法分析体系及计量算法分析体系及计量对算法的评价算法的评价有两个大的方面:一是人对算法的维护的方便性。二是算法在实现运行时占有的机器资源的多少即算法的运行的时间和空间效率。上节 下节2.1.1 2.1.1 算法分析的评价体系算法分析的评价体系 人对算法的维护主要有编写、调试、改正和功能扩充等工作,这就需要在算法设计时注重算法的可可读读性性。为了算法的利用率,也要考虑算法的适适用用范围范围,注重算法的通用性通用性、可重用性可重用性和可扩充性可扩充性。机器对算法的
2、运行效率主要包括时间效率和空间效率。算法在完成功能的前题下最好是占用空间少而且执行时间短。另外在算法实现时,要考虑算法在运行过程中与使用者进行交互的情况。这就要求,算法的交互部分要具有友好性友好性和健壮性健壮性。上节 下节 总之,对算算法法的的分分析析和和评评价价,一般应考虑正确性、可维护性、可读性、运算量及占用存储空间等诸多因素。其中评价算法的三条主要标准标准是:(1)算法实现所耗费的时间时间;(2)算法实现所所耗费的存储空间空间,其中 主要考虑辅助存储空间;(3)算法应易于理解理解,易于编码,易于调 试等等。上节 下节 1.1.和算法执行时间相关的因素和算法执行时间相关的因素:1)问题中数
3、据存储的数据结构2)算法采用的数学模型 3)算法设计的策略4)问题的规模 5)实现算法的程序设计语言 6)编译算法产生的机器代码的质量 7)计算机执行指令的速度 上节 下节2.1.2 2.1.2 算法的时间复杂性算法的时间复杂性2 2算法效率的衡量方法算法效率的衡量方法 通常有两种衡量算法效率衡量算法效率的方法:1)事后统计法(有缺点,较少使用)2)事前分析估算法 算法的时间效率是问题规模的函数。假如,随着问题规模n的增长,算法执行时间的增长率和f(n)的增长率相同,则可记作:T(n)=(f(n)T(n)=(f(n),称 T(n)为 算 法 的 渐渐 近近 时时 间间 复复 杂杂 度度(Asy
4、mptotic Time Complexity),简称时时间间复复杂杂度度。是数量级的符号。上节 下节3 3时间复杂度估算时间复杂度估算 因为:算法=控制结构+原操作(固有数据类型的操作)所以:算法的执行时间=原操作的执行次数*原操作 语句的频度语句的频度指的是该语句重复执行的次数。一个算法转换为算法后所耗费的时间,除了与所用的计算软、硬件环境有关外,主要取决于算法中指令重复执行的次数,即语句的频度相关。上节 下节 一个算法中所所有有语语句句的的频频度度之之和和构成了该算法的运行时间。例如:for(j=1;j=n;+j)for(k=1;k=n;+k)+x;语句“+x、k=n、+k”的频度是n2
5、,语句“j=1、k=1”的频度是1,语句“j=n;+j”的频度是n。算法运行时间为:3*n2+2n+2。上节 下节 对较复杂的算法计算算法的运行时间,经常从算法中选取一种对于所研究的问题来说是基基本本(或或者者说说是是主主要要)的原操作,以该基本操作在算法中重复执行的次数作为算法运行时间的衡量准则。这个原操作,多数情况下是最深层次循环体内的语句中的原操作。例如:例如:for(i=1;i=n;+i)for(i=1;i=n;+i)for(j=1;j=n;+j)for(j=1;j=n;+j)ci,j=0;ci,j=0;for(k=0;k=n;+k)for(k=0;k=n;+k)ci,j=ci,j+a
6、i,k*bk,j;ci,j=ci,j+ai,k*bk,j;该算法的基本操作是乘法操作,时间复杂度为n3 3。上节 下节 当一个算法的算法运行时间为n2+n+1时,由于n2+n+1与n2的数量级相等(该表达式当n足够大时约等于n2),我们说这个算法的渐进时间复杂度算法的渐进时间复杂度(简称算法的时间复算法的时间复杂度杂度)为:T(n)=O(n2)。数量级相等是这样定义的,设f(n)是一个关于正整数n 的函数,若存在一个常数C,使 则称f(n)与g(n)是同数量级的函数。上节 下节算法(渐进渐进)时间复杂度,一般均表示为以下几种数量级的形式(n为问题的规模,c为一常量):(1)称为常数级 (log
7、n)称为对数级 (n)称为线性级 (nc c)称为多项式级 (cn n)称为指数级 (n!)称为阶乘级 上节 下节 以上时间复杂度级别是由低到高排列的,其随规模n的增长率,由图2-1可见一斑:图2-1 T(n)与规模n的函数关系上节 下节 一般来说如果选用了阶乘级的算法,则当问题规模等于或者大于10时就要认真考虑算法的适用性问题算法的适用性问题。所以,原则上一个算法的时间复杂度,最好不要采用指数级和阶乘级的算法,而应尽可能选用多项式级或线性级等时间复杂度级别较小的算法。对于较复杂的算法,可将它分隔成容易估算的几个部分,然后再利用O的求和原则得到整个算法的时间复杂度。例:若算法的两个部分的时间复
8、杂度分别为 T1(n)=O(f(n)和 T2(n)=O(g(n),则总的时间复杂度为:T(n)=T1(n)+T2(n)=O(max(f(n),g(n)。上节 下节4 4问题时间复杂度的上界和下界问题时间复杂度的上界和下界 复杂度的上界和下界是用以估计问题所需某资源的复杂程度的界限函数。如果找到解某问题的算法,其资源的复杂度为u(n),则u(n)是问题本身复杂度的一个上界上界。如果对任何算法,其复杂度都必需大于l(n),则l(n)是问题复杂度的一个下界下界。上节 下节 定义定义1:1:如果存在两个正常数如果存在两个正常数c c和和n0n0,对于所有的对于所有的n=n0,n=n0,有有|f(n)|
9、c|g(n)|f(n)|c|g(n)|,则记作则记作 :f(n)=(g(n)f(n)=(g(n)。定义定义2 2:如果存在两个正常数:如果存在两个正常数c c和和n0n0,对于所有的对于所有的nn0nn0,有有|f(n)|c|g(n)|,f(n)|c|g(n)|,则记作则记作 :f(n)=(g(n)f(n)=(g(n)。定义定义3 3:当:当 f(N)=(g(N)f(N)=(g(N)且且 f(N)=(g(N)f(N)=(g(N)时,则记时,则记 f(N)=(g(N)f(N)=(g(N)。也就是说也就是说f(N)f(N)与与g(N)g(N)同阶。同阶。定义定义4 4:如果对于任意给定的:如果对于
10、任意给定的S0S0,都存在非负整数都存在非负整数N0N0,使使得当得当NN0NN0时有时有f(N)f(N)SgSg(N)(N),则称函数则称函数f(N)f(N)当当N N充分大时,比充分大时,比g(N)g(N)低阶,记为低阶,记为f(N)=o(g(N)f(N)=o(g(N)。定义定义5:5:若若g(N)=o(f(N),g(N)=o(f(N),即当即当N N充分大时充分大时,f(N)f(N)的阶比的阶比g(N)g(N)高,则记高,则记f(N)=W(g(N)f(N)=W(g(N)。上节上节 下节下节5.5.算法时间复杂度的最好情况和最坏情况算法时间复杂度的最好情况和最坏情况 我们要确定能反映出算法
11、在各种情况下工作的数据集,选取的数据要能够反映、代表各种计算情况下的估算,包括最好情况下的时间复杂度(时间复杂度下界,一般记为Tmax)、最坏情况下的时间复杂度(时间复杂度上界,一般记为Tmin)、平均情况下的时间复杂度(一般记为Tavg)和有代表性的情况,通过使用这些数据配置来运行算法,以了解算法的性能。上节 下节 以上三种情况下的时间复杂性,各从某一个角度来反映算法的效率,各有各的用处,也各有各的局限性。但实践表明可操作性最好的,且最有实际价值的,是最坏情况下的时间复杂性。一般来说,最好情况和最坏情况的时间复杂性是很难计量的。有时也按平均情况计量时间复杂性,但要对输入不同数据的概率做人为的
12、假设(一般是假设等概率)之后才能进行,所做的假设缺乏必要的根据。因此,在最好情况和平均情况下的时间复杂性分析还仅仅是停留在理论上。上节 下节算法的存储量包括:1)输入数据所占空间;2)算法本身所占空间;3)辅助变量所占空间。上节 下节2.1.3 2.1.3 算法的空间复杂性算法的空间复杂性 研究算法的空间效率,只需要分析除输入和算法之外的额外空间。若所需额外空间相对于输入数据量来说是常数,则称此算法为原地工作,否则,它应当是规模的一个函数。算法的空间复杂度是指算法在执行过程中所占辅助存储空间的大小(也有课本定义为所占全部存储空间的大小),用S(n)表示。与算法的时间复杂度相同,算法的空间复杂度
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第二 算法 分析 基础
限制150内