算法时间复杂度的计算
2010-12-24 19:48
288 查看
近几年的信息学奥林匹克竞赛中,所有的试题都要求1秒钟内出结果,那么如何度量一个算法的时间复杂度就成为每个OI选手必须具有的基本功,要能在数据范围给定的情况下作出正确算法的选择。
算法的时间复杂度是一个算法运行时间的相对量度。一个算法的运行时间是指在计算机上从开始到结束运行所花费的时间长短,它大致等于计算机执行一种基本操作(如赋值、比较、计算、转向、返回、输入、输出等)所需的时间与算法中进行基本操作次数的乘积。因为执行一种基本操作所需的时间随机器而异,它是由机器本身硬软件环境决定的,与算法无关,所以我们只讨论影响运行的另一个因素——算法中进行基本操作次数的多少,以该基本操作重复执行的次数作为算法的时间度量。
求解算法的时间复杂度的具体步骤:
⑴ 找出算法中的基本语句;
算法中执行次数最多的那条语句就是基本语句,通常是最内层循环的循环体。
⑵ 计算基本语句的执行次数的数量级;
只需计算基本语句执行次数的数量级,这就意味着只要保证基本语句执行次数的函数中的最高次幂正确即可,可以忽略所有低次幂和最高次幂的系数。这样能够简化算法分析,并且使注意力集中在最重要的一点上:增长率。
⑶ 用大Ο记号表示算法的时间性能。
将基本语句执行次数的数量级放入大Ο记号中。
如果算法中包含嵌套的循环,则基本语句通常是最内层的循环体,如果算法中包含并列的循环,则将并列循环的时间复杂度相加。
常见的算法时间复杂度由小到大依次为:
常数阶Ο(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所示。
从图中可见,我们应该尽可能选用多项式阶算法,而不希望用指数阶的算法。
算法的时间复杂度是一个算法运行时间的相对量度。一个算法的运行时间是指在计算机上从开始到结束运行所花费的时间长短,它大致等于计算机执行一种基本操作(如赋值、比较、计算、转向、返回、输入、输出等)所需的时间与算法中进行基本操作次数的乘积。因为执行一种基本操作所需的时间随机器而异,它是由机器本身硬软件环境决定的,与算法无关,所以我们只讨论影响运行的另一个因素——算法中进行基本操作次数的多少,以该基本操作重复执行的次数作为算法的时间度量。
求解算法的时间复杂度的具体步骤:
⑴ 找出算法中的基本语句;
算法中执行次数最多的那条语句就是基本语句,通常是最内层循环的循环体。
⑵ 计算基本语句的执行次数的数量级;
只需计算基本语句执行次数的数量级,这就意味着只要保证基本语句执行次数的函数中的最高次幂正确即可,可以忽略所有低次幂和最高次幂的系数。这样能够简化算法分析,并且使注意力集中在最重要的一点上:增长率。
⑶ 用大Ο记号表示算法的时间性能。
将基本语句执行次数的数量级放入大Ο记号中。
如果算法中包含嵌套的循环,则基本语句通常是最内层的循环体,如果算法中包含并列的循环,则将并列循环的时间复杂度相加。
例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所示。
从图中可见,我们应该尽可能选用多项式阶算法,而不希望用指数阶的算法。
相关文章推荐
- 常用排序算法的时间和空间复杂度及算法时间复杂度的简单计算
- 算法复杂性和如何计算时间复杂度
- 简单算法学习之时间复杂度的计算
- 【算法数据结构Java实现】递归的简单剖析及时间复杂度计算
- 算法的时间复杂度计算
- 【算法】算法的时间复杂度计算
- 算法的时间复杂度(计算实例)
- 计算算法的时间和空间复杂度
- 算法-如何计算时间复杂度?
- 【数据结构与算法】时间复杂度的计算
- 算法初级01——认识时间复杂度、对数器、 master公式计算时间复杂度、小和问题和逆序对问题
- 算法-计算时间复杂度
- 算法的复杂度包括时间复杂度和空间复杂度分别如何计算?
- 【算法与数据结构】关于代码运行时间复杂度的计算方法
- 算法的时间复杂度(计算实例)
- 算法的时间复杂度(计算实例)
- 算法的时间复杂度(计算实例)
- 第14话:如何计算算法的时间复杂度
- 计算算法时间复杂度的主方法的一种较为简洁的记忆方法
- 关于大整数的乘法的算法时间复杂度的计算过程推导(纯属个人推测,请高人指正)