一、算法优化方向
- 用尽量少的存储空间
- 用尽量少的执行步骤(执行时间)
- 具体情况,具体分析(空间换时间,时间换空间)
二、时间复杂度
估算程序指令的执行次数(执行时间)
大O估算法
忽略常数、系数、低阶(对数利用换底公式,相当于加了一个常数系数,所以为log(n))
常见的复杂度
Ο(1)<Ο(logn)<Ο(n)<Ο(nlogn)<Ο(n^2)<Ο(n^3)<…<Ο(2^n)<Ο(n!)<O(n^n)
当数据规模较小的时候
当数据规模较大的时候
三、空间复杂度
估算所需占用的存储空间
空间复杂度是算法运行过程中所需存储空间的量度。它表示算法解决问题所需的内存空间与问题规模之间的关系。通常用大O符号表示。
在分析空间复杂度时,我们考虑算法在运行过程中使用的额外空间,不包括输入数据占用的空间。以下是一些常见的空间复杂度情况:
- O(1) - 常数空间复杂度: 算法的额外空间需求是固定的,与输入规模无关。例如,一个固定大小的变量或常数大小的数组。
- O(n) - 线性空间复杂度: 算法的额外空间需求与输入规模成正比。例如,一个数组,其大小与输入数据的规模相同。
- O(log n) - 对数空间复杂度: 算法的空间需求与输入规模的对数成正比。这通常出现在使用递归分治策略的算法中。
- O(n^2)、O(n^3) 等 - 多项式空间复杂度: 算法的额外空间需求与输入规模的某个幂次关系成正比。例如,嵌套循环的算法可能具有二次或三次空间复杂度。
- O(2^n)、O(n!) 等 - 指数空间复杂度: 算法的额外空间需求随着输入规模的指数增长。这样的算法通常效率较低,应该尽量避免使用。
评论区