其实,时间复杂度和空间复杂度就是衡量一个算法好坏的标准,比如我们平时买苹果,肯定最想买到最便宜而又最甜的苹果,苹果甜不甜,吃一口,味觉就会给我们一个最直观的感受,去对比两个苹果哪个更甜,时间复杂度和空间复杂度就是干这事的,名字不同,目的一样,就是去判断算法好坏程度的。
那说一说什么是算法,大家都一定听过高斯小时侯的故事吧,高斯四五年级的时候,高斯的数学老师给高斯出了一道题,让他从1加到100,高斯的老师以为他会老老实实的一个数一个数的去加,没想到高斯思维敏捷,用了等差数列的方法,先把1和100相加等于101,2和99相加等于101,100个数共有50组101,50乘以101等于5050,高斯很快就算出来了,确实很聪明啊。这其中就设计到算法的问题,一个数一个数去加可以算法出来,但是速度很慢,等差数列可以很快高效的算出来,还是那个道理,大家肯定都喜欢吃甜的苹果,喜欢好的算法。
所以我们在写代码的时候,目标就是写出运行速度快,占用空间小的代码,这样的代码就是理想型的代码。T(n)便是记录时间复杂度的标志,一般代码时间复杂度就是常见的4种:
T(n) =O(1)
T(n) =O(logn)
T(n) =O(n)
T(n) =O(n^2)
他们之间的关系是这样的:
O(1)<O(logn)<O(n)<O(n^2)
另外还有很多时间复杂度
T(n) =O(nlogn)
T(n) =O(n^3)
T(n) =O(mn)
T(n) =O(2^n)
时间复杂度主要是针对大量数据的,因为在大量数据的情况下才能体现出两个算法的好坏,就向你和一个胖子一起跑步,刚开始你俩没啥明显区别,但是时间久了,胖子就开始喘了。
空间复杂度主要的表示方法:S(n)=O(f(n)),其中n为问题的规模,f(n)为算法所占存储空间的函数。算法所用的时间一样,当然所占空间越小越好,常见的空间复杂度从低到高的顺序如下
O(1),O(n),O(n^2),递归深度越多,所占空间越大