本文参考节选自 《数据结构与算法分析 Java语言描述》
法则1—— for循环
一个for循环的运行时间至多是该for循环内部的那些语句(包括测试)的运行时间乘以迭代器的次数。
法则2——嵌套的for循环
从里向外分析这些for循环。在一组嵌套循环内部的语句总的运行时间为该语句的运行时间乘以该组的所有的for循环的大小的乘积。
例如, 下列的程序段为O(N^2)
for(i = 0;i<n;i++) //外循环的次数为:初始化1单位+比较次数N单元+自增N单元,共2N+1
for(j = 0;j<n;j++) //内循环的次数为:初始化1单位+比较测试N单元+自增N单元,共2N+1
k++;
//所以整个嵌套循环的运行时间为(2N+1)*(2N+1),最高次为N^2
法则3——顺序语句
将各个语句的运行时间求和即可(这意味着,其中最大值就是所得的运行时间)
例如,下面的程序段先是花费O(N),接着是O(N^2),因此总量也是O(N^2);
for(i = 0;i<n;i++)
a[i] = 0;
for(i = 0;i<n;i++)
for(j = 0;j<n;j++)
a[i]+=a[j]+i+j;
法则4——if/else语句
对于程序片段
if(condition) //此句话拥有判断的运行时间 T(if)
S1 //T(S1)
else
S2 //T(S2)
一个if/else运行时间从不超过判断的运行时间再加上S1 和S2 之间运行时间的长者的总的运行时间:T(总)<=T(if)+T(S1)orT(S2)。