算法效率分析包括时间复杂度和空间复杂度。详解一下时间复杂度。
(一)什么是算法的时间复杂度
通常认为一个算法所需的运行时间与所要解决问题的规模大小有关。规模越大,所消耗的时间越多,时间复杂度就越大。通常,用n作为表示问题规模,把规模为n的算法的执行时间称为时间复杂度(time complexity)。算法执行所需时间T表示为n的函数,记为T(n)。通常把算法中基本操作重复执行的次数作为算法的时间复杂度 记为:
T(n)=f(n)
而我们经常研究的是“渐进时间复杂度”,即随着n的增大,T(n)的极限情况,一般,时间复杂度用数量级的形式表示,记为:
T(n)=O(f(n))
其中,大写字母O为order(数量级)的第一个字母,f(n)为函数形式,eg:T(n)=O(n²)。可以看出,时间复杂度往往不是精确的执行次数,而是估算的数量级,它着重体现的随着n的增大,算法执行时间的变化趋势。
当T(n)为多项式时,只可取其最高次幂,并且将系数省略,eg:T(n)=12n³+6n²+n+5 则 T(n)=O(n³)。
(二)计算时间复杂度
1.如何计算?
在计算时间复杂度时,先找出算法的基本操作,然后根据相应的各语句确定它的执行次数,再找出T(n)的同数量级(它的同数量级有以下:1,Log2n ,n ,nLog2n ,n的平方,n的三次方,2的n次方,n!),找出后,f(n)=该数量级,若T(n)/f(n)求极限可得到一常数c,则时间复杂度T(n)=O(f(n))。
2.常见的时间复杂度
按数量级递增排列,常见的时间复杂度
常数阶 O(1)
对数阶 O(log2n)
线性阶 O(n)
平方阶 O(n²)
立方阶 O(n³)
k次方阶 O(n^k)
指数阶 O(2^n)
一般地,对于足够大的n,常用的时间复杂性存在如下顺序:
O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)
3.例子如下:
eg1: x=x+1 解:T(n)=O(1) //该算法只执行了一次
eg2: sum=0;
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
sum=sum+1;
}
}
解:T(n)=2n²+n+1=O(n²)
eg3: i=1;
while (i<=n) i=i*2;
解:T(n)=O(log2n )
目录: