1、什么是时间复杂度和空间复杂度?
如何区分一个算法的好坏,如果在程序上执行,会被各种因素所干扰,所以引出了时间复杂度和空间复杂度的概念。
时间复杂度就是这个算法执行的是不是很快,空间复杂度就是这个算法是不是很耗费程序的空间。
算法的渐进时间复杂度:T(n) = O(F(n))------>大O表示法
2、时间复杂度怎么算?
比如我们这个算法要执行很多次,那么它的表达式是怎么样的?取最高次项即可。
- 比如一行最基本的代码,它的就是O(1);
- 如果某个算法中计算的时间相同,它肯定是次数越多时间越长,而且是线性增长,比如每次吃鸡腿都是1分钟,那么它执行n次,时间就是n分钟,所以它的时间复杂度就是O(n);
- 如果计算1到100的和,计算的表达式就是(1 + n)* n/2-->也就是0.5n² + 0.5n,忽略掉n的一次方,那么它的时间复杂度就是O(n²)
- 再比如一根绳子16厘米,每次剪掉剩余的一半,那么多久会剩下1厘米,那么就需要用到对数了,这个时候时间复杂度是O(log16)
......
3、空间复杂度?
空间复杂度不需要过于深入了解,但是要知道它不是描述占用多少内存,而是比较的内存变化。
- 比如一个变量=1,然后每次都对它进行++赋值运算,变量还是一个,只不过不断的赋值,内存占用不会变化,所以还是1
- 再比如一个for循环,每次都创建一个新的变量,肯定它的空间复杂度是n
- 如果是一个二维数组,再用双层for循环赋值,它的空间复杂度就是n²