6算法复杂性渐近阶的分析

6算法复杂性渐近阶的分析

ID:12638219

大小:74.00 KB

页数:5页

时间:2018-07-18

6算法复杂性渐近阶的分析_第1页
6算法复杂性渐近阶的分析_第2页
6算法复杂性渐近阶的分析_第3页
6算法复杂性渐近阶的分析_第4页
6算法复杂性渐近阶的分析_第5页
资源描述:

《6算法复杂性渐近阶的分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、算法复杂性渐近阶的分析前两段讲的是算法复杂性渐近阶的概念和对它进行分析的重要性。本段要讲如何具体地分析一个算法的复杂性的渐近阶,给出一套可操作的规则。算法最终要落实到用某种程序设计语言(如Pascal)编写成的程序。因此算法复杂性渐近阶的分析可代之以对表达该算法的程序的复杂性渐近阶的分析。如前所提出,对于算法的复杂性,我们只考虑最坏、最好和平均三种情况,而通常又着重于最坏情况。为了明确起见,本段限于针对最坏情况。仍然以时间复杂性为例。这里给出分析时间复杂性渐近阶的八条规则。这八条规则已覆盖了用Pascal语言程序所能表达的各种算法在最坏情况下的时间复杂性渐近阶的分析。在逐条地列出

2、并解释这入条规则之前,应该指出,当我们分析程序的某一局部(如一个语句,一个分程序,一个程序段,一个过程或函数)时,可以用具体程序的输入的规模N作为复杂性函数的自变量,也可以用局部的规模参数作为自变量。但是,作为最终结果的整体程序的复杂性函数只能以整体程序的输入规模为自变量。对于串行的算法,相应的Pascal程序是一个串行的Pascal语句序列,因此,很明显,该算法的时间复杂性(即所需要的时间)等于相应的Pascal程序的每一个语句的时间复杂性(即所需要的时间)之和。所以,如果执行Pascal语句中的每一种语句所需要的时间都有计量的规则,那么,执行一个程序,即执行一个算法所需要的时

3、间的计量便只是一个代数问题。接着,应用本节第三段所提供的Ο、Ω和θ等运算规则就可以分析出算法时间复杂性的渐近阶。因此,我们的时间计量规则只需要针对Pascal有限的几种基本运算和几种基本语句。下面是这些规则的罗列和必要的说明。规则(1)赋值、比较、算术运算、逻辑运算、读写单个常量或单个变量等,只需要1个单位时间。规则(2)条件语句"ifCthenS1elseS2"只需要Tc+max(Ts1,Ts2)的时间,其中Tc是计算条件表达式C需要的时间,而Ts1和Ts2分别是执行语句S1和S2需要的时间。规则(3)选择语句"Case A of a1:S1;a2:S2;…;am:Sm; en

4、d",需要max(Ts1,Ts2,…,Tsm)的时间,其中Tsii是执行语句Si所需要的时间,i=l,2,…,m。规则(4)访问一个数组的单个分量或一个记录的单个域,只需要1个单位时间。规则(5)执行一个for循环语句需要的时间等于执行该循环体所需要的时间乘上循环的次数。规则(6)执行一个while循环语句"whileCdoS"或一个repeat循环语句"repeatSuntilC",需要的时间等于计算条件表达式C需要的时间与执行循环S体需要的时间之和乘以循环的次数。与规则5不同,这里的循环次数是隐含的。例如,b_search函数中的while循环语句。按规则(1)-(4),计算

5、条件表达式"(notfound)and(U≥=L)"与执行循环体I:=(U+L)div2;ifc=A[I]thenfound:=trueelseifc>A[I]thenL:=I+1elseU:=I-1;只需要θ(1)时间,而循环次数为logm,所以,执行此while语句只需要θ(logm)时间。在许多情况下,运用规则(5)和(6)常常须要借助具体算法的内涵来确定循环的次数,才不致使时间的估计过于保守。这里举一个例子。考察程序段:  Size:=m;1i:=1;1whilei

6、then1        begin         在1到Size的范围内任选一个数赋值给t;θ(1)            Size:=Size-t;2            forj:=l to t do                 S2θ(n)        end;    end;   程序在各行右端顶格处标注着执行相应各行所需要的时间。如果不对算法的内涵作较深入的考察,只看到1≤t≤Size≤m,就草率地估计while的内循环for的循环次数为Ο(m),那么,程序在最坏情况下的时间复杂性将被估计为Ο(n2+m·n2)。反之,如果对算法的内涵认真地分析,结果将两样。

7、事实上,在while的循环体内t是动态的,size也是动态的,它们都取决while的循环参数i,即t=t(i)记为ti;size=size(i)记为sizei,i=l,2,…,n-1。对于各个i,1≤i≤n-1,ti与m的关系是隐含的,这给准确地计算for循环的循环体S2被执行的次数带来困难。上面的估计比较保守的原因在于我们把S2的执行次数的统计过于局部化。如果不局限于for循环,而是在整个程序段上统计S2被执行的总次数,那么,这个总次数等于,又根据算法中ti的取法及sizei+

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。