您的位置:首页 > 其它

算法时间复杂度的计算

2010-12-24 19:48 288 查看
近几年的信息学奥林匹克竞赛中,所有的试题都要求1秒钟内出结果,那么如何度量一个算法的时间复杂度就成为每个OI选手必须具有的基本功,要能在数据范围给定的情况下作出正确算法的选择。
算法的时间复杂度是一个算法运行时间的相对量度。一个算法的运行时间是指在计算机上从开始到结束运行所花费的时间长短,它大致等于计算机执行一种基本操作(如赋值、比较、计算、转向、返回、输入、输出等)所需的时间与算法中进行基本操作次数的乘积。因为执行一种基本操作所需的时间随机器而异,它是由机器本身硬软件环境决定的,与算法无关,所以我们只讨论影响运行的另一个因素——算法中进行基本操作次数的多少,以该基本操作重复执行的次数作为算法的时间度量。

求解算法的时间复杂度的具体步骤:
⑴ 找出算法中的基本语句;
算法中执行次数最多的那条语句就是基本语句,通常是最内层循环的循环体。
⑵ 计算基本语句的执行次数的数量级;
只需计算基本语句执行次数的数量级,这就意味着只要保证基本语句执行次数的函数中的最高次幂正确即可,可以忽略所有低次幂和最高次幂的系数。这样能够简化算法分析,并且使注意力集中在最重要的一点上:增长率。
⑶ 用大Ο记号表示算法的时间性能。
将基本语句执行次数的数量级放入大Ο记号中。
如果算法中包含嵌套的循环,则基本语句通常是最内层的循环体,如果算法中包含并列的循环,则将并列循环的时间复杂度相加。
例1:for i:= 1 to n do inc(x);
for i:= 2 to n do
for j:= 2 to i-1 do
begin
inc(x) ; a[i,j]:= x ;
end;
时间复杂度为Ο(n)
时间复杂度为O((n-1)(n-2)/2)=Ο(n^2)
则整个算法的时间复杂度为Ο(n+ n^2)=Ο(n^2)
常见的算法时间复杂度由小到大依次为:
常数阶Ο(1)<对数阶Ο(logn)<线性阶Ο(n)<线性对数阶Ο(nlogn)<平方Ο(n^2)<立方阶Ο(n^3)<…<指数阶Ο(2^n)<阶乘阶Ο(n!)。
Ο(1)表示基本语句的执行次数是一个常数,一般来说,只要算法中不存在循环语句,其时间复杂度就是Ο(1)、Ο(logn)、Ο(n)、Ο(nlogn)、Ο(n^2)和Ο(n^3)称为多项式时间,而Ο(2^n)和Ο(n!)称为指数时间。计算机科学家普遍认为前者是有效算法,把这类问题称为P类问题,而把后者称为NP问题。
常见的不同数量级时间复杂度的性状如图1所示。
从图中可见,我们应该尽可能选用多项式阶算法,而不希望用指数阶的算法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: