int i, j;
for( i=0; i < n; i++ )
{
function(i);
}
void function(int count)
{
printf( "%d" , count);
}
函数体是打印这个参数,这很好理解。function函数的时间复杂度是O(1),所以整体的时间复杂度就是循环的次数O(n)。
int i, j;
for( i=0; i < n; i++ )
{
function(i);
}
void function(int count)
{
int j;
for( j=count; j < n; j++)
{
printf( "%d" , j);
}
}
整体的时间复杂度就是循环的次数O(n^2)。
常见的时间复杂度
例子 | 时间复杂度 | 专业术语 |
5201314 | O(1) | 常数阶 |
3n+4 | O(n) | 线性阶 |
3n^2+4n+5 | O(n^2) | 平方阶 |
3log(2)n+4 | O(logn) | 对数阶 |
2n+3nlog(2)n+14 | O(nlogn) | nlogn阶 |
n^3+2n^2+4n+6 | O(n^3) | 立方阶 |
2^n | O(2^n) | 指数阶 |
其所耗费的时间从小到大依次是:O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)
如果我们查找一个有n个随机数字字数组中的某个数字,最好的情况是第一个数字就是,那么此时,算法的时间复杂度就是O(1),但也有可能这个数字就在最后一个位置,那么时间复杂度为O(n)。
平均运行时间是期望的运行时间。
最坏运行时间是一种保证。在应用中,这是一种最重要的需求,通常除非特别指定,我们提到的运行时间都是最坏情况的运行时间。
在程序设计中,通常时间和空间是可以互相转换的,我们经常使用空间来换取时间,即用大的空间复杂度来保证小的时间复杂度。
算法的空间复杂度:通过计算算法所需要的存储空间实现,算法的空间复杂度的计算公式记作:S(n)=O(f(n)),其中n为问题的规模,f(n)为语句关于n所占存储空间的函数。
通常,我们用“时间复杂度”来指运行时间的需求,用“空间复杂度”指空间需求。
当直接说“复杂度”时,通常指的是时间复杂度。