概念:
时间复杂度:当前算法执行的时间;由于一个算法执行时花费的时间与执行次数成正比,所以可以通过执行
次数来表示;
空间复杂度:当前算法需要占用的内存空间;
使用:
表示法:大O表示法,即T(n)=O(f(n));
例如:
for(i=0;i<n;i++){ j=i; j++; }
分析:时间复杂度公式T(n)=O(f(n)),其中 f(n) 表示每行代码执行的次数之和,而O表示正比例关系;
故上面的时间复杂度为O(n);
常见的时间复杂度量级:
int i=1,j=2;
++i;
j++;
int sum=i+j;
分析:上述代码的执行不跟随某个变量而变,所以无论多长的代码都只执行一次,时间复杂
度可以用O(1)表示;
int i=1; while(i<n){ i=i*2; }
分析:从上面代码可以得到当每次*2的时候等价于2的x次方等于n;故可以得到这样的一个
公式:2^x=n,故x=log2^n;因此时间复杂度为O(logN)
for(i=0;i<=n;i++){ j=i; j++; }
分析:for 循环中的代码执行次数为n次,因为时间随着n的变化而变化,故这类代码可以用
O(n)来表示时间复杂度;
for(m=1;m<n;m++){ i=1; while(i<n){ i=i*2; } }
分析:有了上面对数阶的理解,针对线性对数阶来讲只是在外面加了一个循环体而已,所
有就是n*O(logN)即O(nlogN);
for(x=1;x<=n;x++){ for(y=1;y<=n;y++){ j=i; j++; } }
分析:平方阶很容易理解就是2层n循环;
int i=1,j=2; ++i; j++; int sum=i+j;
分析:上面代码不随处理数据而变化,故空间复杂度为O(1);
int[] m=new int[n];
for(i=1;i<=n;i++){
j=i;
j++;
}
分析:上面代码只是在循环体外声明了变量占用了一定的内存,而循环体内却没有,因此空间
复杂度为O(n);
原文:https://www.cnblogs.com/gamecc666/p/14630202.html