前言
算法的效率评估分为:
-
时间效率,即时间复杂度 (\text{Time Complexity})(Time Complexity);
-
空间效率,即空间复杂度(\text{Space Complexity})(Space Complexity)。
现在绝大多数情况下,空间复杂度受限的可能性较低,且优化代价高,效果差,所以以考虑时间复杂度为主。
时间复杂度并非指绝对时间,而是评估随着输入规模的增长,消耗时间的增长量级。
定义
nn:输入规模。简单举例,输入为矩阵,nn 可以根据具体场景定义为行数,也可以定义为列数,也可以定义为元素个数,根据需求进行定义。
\text{C}(n)C(n):基本操作次数
\text{t}(n)t(n):一个算法的运行时间(常用 \text{C}(n)C(n) 表示)
\text{g}(n)g(n):一个用来和操作次数做比较的函数
\text{O}O:算法复杂度的上边界,用来评估最恶劣情况,用于算法选取,常写作 \text{O}(\text{g}(n))=n^2O(g(n))=n2 或者 \text{O}(n)=n^2O(n)=n2
ΩΩ:算法复杂度的下边界,用来评估最优情况,用于算法初选
θθ:算法复杂度的上下边界带,用于评估算法时间稳定性
复杂度等级
1<\log<n<n\log{n}<n^2<n^3<2^n<n!1<log<n<nlogn<n2<n3<2n<n!