时间复杂度:
-》大O表示法只是对程序执行时间的一个估算(大O是一个渐进表示法,不会去表示精确的次数,cpu的运算速度很快,估计精确的没有意义。)
-》大O表示法只保留最高阶项
-》大O表示法一般表示的是算法最差的运行时间
时间复杂度O(1)
直接执行一些O(1)的简单语句;不包括递归、循环
时间复杂度O(n)
如果在一个大小为n循环中,循环变量按照一个常量C递增或递减,这个循环的复杂度就为O(n)
for(int i = 0 ; i < n ;i += c){
//执行O(1)的语句
}
for(int i = 0 ; i < n ;i -= c){
//执行O(1)的语句
}
如果在一个大小为n循环中,循环变量按照一个常量C的进行倍数的递增或递减,这个循环的复杂度就为O(Log n).
1 for (int i = 1; i <=n; i *= c) {
2 // some O(1) expressions
3 }
4 for (int i = n; i > 0; i /= c) {
5 // some O(1) expressions
6 }
---------------------------------------------------------------------------------------------------------------------------------
例:
void fun(int n) {
int i=l;
while(i<=n)
i=i*2;
}
O为log2(n)
如果在一个大小为n循环中,循环变量是指数级的递增或递减,这个循环的复杂度就为O(Log log n).
1 // c为比1大的常量
2 for (int i = 2; i <=n; i = pow(i, c)) {
3 // some O(1) expressions
4 }
5 //这里的 fun 函数可以是sqrt 或 cuberoot 或任何其他恒定的根
6 for (int i = n; i > 0; i = fun(i)) {
7 // some O(1) expressions
8 }
如何计算连续循环的复杂性?
当有连续的循环,我们计算时间复杂度为时间各个循环的复杂总和