一。用到的数学定义及数学公式
1. 若存在正常数c和n0,使得当N≥n0时,T(N)≤cf(N),则机位T(N)=O(f(N))。例如,一个程序的执行时间为T(n)=5n²+4,则这个程序的时间复杂度为T(n)=O(n²).
2.T₁(N)=O(f(N)),且T₂(N)=O(g(N)),则
T₁(N)+T₂(N)=O(max(f(N),g(N)));
T₁(N)*T₂(N)=O(f(N)*g(N));
二。运行时间的计算
1.赋值语句的运行时间
每条赋值语句的运行时间为1。
例如: x=3; //运行时间O(1)
2.for循环的运行时间
一次for循环运行时间至多是该for循环语句的运行时间乘以迭代的次数
例如: for(i=0;i<N;i++) k++; //运行时间为O(1)*O(N)=O(N)
3.嵌套for循环的运行时间
从里面到外面分析这些循环。每一层的运行时间等于该层的for循环语句的运行时间乘以循环内
所有的for循环的运行时间
例如: for(i=0;i<N;i++)
for(j=0;j<N;j++)
k++;
运行时间为O(N)*O(N)=O(N²)
4.顺序语句的运行时间
将各个语句的运行时间求和即可,根据T₁(N)+T₂(N)=O(max(f(N),g(N)))法则,总的运行时间为其中的最大值
例如: for(i=0;i<N;i++)
for(j=0;j<N;j++)
k++;
for(i=0;i<N;i++) k++;
总运行时间为O(N)+O(N²)=O(N);
5.if else语句的运行时间
对于以下程序片 段
if(condition)
S1
else
S2
他的运行时间不超过判断再加上S1与S2中的运行时间的最长者。
例如:
if(k>0)
{
for(i=0;i<N;i++) k++;
}else
{
for(i=0;i<N;i++)
for(j=0;j<N;j++)
k++;
}
运行时间为max(O(N+1),O(N²+1))=O(N²+1)=O(N²);