时间复杂度
时间复杂度指的是算法语句的执行次数,并不是运行时间。一个算法语句的执行次数最终都是可以通过函数f(n)来表示的
eg:
这里的x++就是算法语句,其f(n)=10-x
f(n)=n*n
i++即算法语句,被执行次数为f(n)=n-i
但f(n)并不是时间复杂度,它还需要进行下转换
1.选取相对增长最高的项
2.最高项系数是都化为1
3.若是常数的话用O(1)表示
如f(n)=2*n^3+2n+100则O(n)=n^3。
根据以上3个规则,前面三个例子的时间复杂度分别为
空间复杂度
空间复杂度就是一个算法在运行过程中临时占用的存储空间大小,换句话说就是被创建次数最多的变量,它被创建了多少次,那么这个算法的空间复杂度就是多少
eg:
前者空间复杂度就是O(n),而后者空间复杂度就是O(1)常数阶。很好理解,前者每循环一次都会重新创建一个temp对象,而后者只在循环外面创建了一个temp对象,每次循环只是给他不同的引用而已。所以有个规律,如果算法语句中就有创建对象,那么这个算法的时间复杂度和空间复杂度一般一致,很好理解,算法语句被执行了多少次就创建了多少对象。
很多简单点的算法空间复杂度都是O(1),而且很多时候空间复杂度是不那么重要的,它远没有时间复杂度重要,很多时候会牺牲空间来迁就时间。
以下的这篇博客非常详尽的解释了时间和空间复杂度