int sum(int N){
int i,P ;
P = 0; //1
for(i=0;i<=N;i++) //2
P += i * i * i ; //3
return P; //4
}
分析:
声明不计时间, 第一句,第四句各占用一个时间单位。
第三句每执行一次占用四个时间单位,两次乘法,一次加法,一次赋值。而执行N次共占用4N个时间单位。
第二行初始化i,(一个时间单位), 测试i<=N,(N+1个时间单位), i++(N个时间单位) 。总共2N+2。
忽略调用,返回值的开销,以上总共为6N+4,故该函数 是O(N)。第三行每次执行是O(1)语句,故O(N)
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
一般法则:
1,for循环:一次for循环的运行时间至多是循环内语句的运行时间*迭代的次数。
2,嵌套的for循环:内部的一条语句总的运行时间是该语句的运行时间*该组所有的for循环的大小的乘积
3,顺序语句:各个语句的运行时间之和。
4,if/else:if(判断) 语句1 ; else 语句2 ;
一个if/else语句的时间不超过 判断+(语句1,2中运行时间长的其总的运行时间)。