算法运行时间计算的一般法则

本文参考节选自 《数据结构与算法分析 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)。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值