(转载请注明出处:http://blog.csdn.net/buptgshengod)
1.背景知识
大O标记就不用我说了吧。O(n)这种时间复杂度的意义自己google吧。这里简单讲下从代码推算。
2.具体案例
(1)案例一
int a=0; //第一行
for(int i=0;i<=N;i++)//第二行
{
a+=i*i*i; //第三行
}
我们来看下。
第一行,声明变量并赋值用一个时间单元;
第二行,首先给i赋值,一个时间单元。i<=N是N+1个时间单元。i++是N个时间单元。第二行总共2N+2个时间单元。
第三行,一个加法,一个赋值,两个乘法,一共四个时间单元。执行N次,一共4N个时间单元。
所以这段代码一共6N+3个时间单元。时间复杂度为O(N);
(2)案例二
一个for循环
for(int i=0;i<=N;i++)
时间复杂度O(n)
嵌套for循环
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{}
}
时间复杂度O(n²)
三层嵌套语句
if/else语句
for(m=0;m<n;m++)
{
int a=0;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{}
}
}
时间复杂度为
O(n³)。
时间复杂度,是if和else中最长的那个。
简单的递归函数如
public static int test(int n)
{
if(n<=1)
{
return 1;
}
else
{
return n*test(n-1);
}
}
相当与一个for的循环,时间复杂的是O(n)