复杂度
复杂度可以衡量算法的好坏。分析复杂度的同时,也是模拟运算的过程。
时间复杂度
实际是指程序运行次数,而不是程序运行时间
- O(1):常数阶
- O(log2 n):对数阶
- O(n):线性阶
- O(nlog2n):线性对数阶
- O(n^2):平方型
- O(n^3):立方型
- O(2^n):指数型
- O(2^n):阶乘阶
空间复杂度
算法执行时创建的变量(包括临时变量)个数
- 忽略常数,用O(1)表示
- 递归算法的空间复杂度 = 递归深度N * 每次递归所要的辅助空间
- 对于单线程来说,递归有运行时堆栈,求的是递归最深的那一次压栈所耗费的空间的个数,因为递归最深的那一次所耗费的空间足以容纳它所有递归过程。递归是要返回上一层的,所以它所需要的空间不是一直累加起来的