数据结构和算法001——时间复杂度和空间复杂度

304 阅读2分钟

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²