算法复杂度分析
复杂度分析
文章目录
- 复杂度分析
- 一、时间复杂度
- 二、空间复杂度
一、时间复杂度
- 计算时间复杂度的方法:
只保留去掉系数的最高阶项,且一般讨论的都是最坏情况下的复杂度,如:
T(n) = 2n2 + 7n + 1 => O(n2)
- 常见的时间复杂度及排序:
O(1) < O(logn) < O(n) < O(nlogn) < O(n2) < O(n3) < O(nk) < O(2n) < O(n!)
- 常见的时间复杂度分析:
① 常数阶:O(1)
只要代码中没有循环结构(仅有赋值,比较等),无论代码多长,时间复杂度总为常数阶
② 对数阶:O(logn)
while(i < n) {
i = i * 2; //时间复杂度为O(log2n)
}
while(i < n) {
i = i * 3; //时间复杂度为O(log3n)
}
③ 线性阶:O(n)
for (int i = 0; i < n; i++) {
//常数复杂度的操作
}
④ 线性对数阶:O(nlogn)
for (int i = 0; i < n; i++) {
while (i < n) {
i = i * 2;
}
}
⑤ 平方阶:O(n2)
for (int i = 0; i < n; i++) {
for (int j = 0; j < n ; j++) {
//常数复杂度的操作
}
}
//持续嵌套for循环可形成三次方、四次方...
- 时间复杂度的注意事项:
(1) 并列的循环复杂度不叠加
(2) 嵌套的循环复杂度叠加
二、空间复杂度
指的是在原数据结构的基础上为完成某一操作而额外申请的空间
常见的空间复杂度有:O(1),O(n)
注意:常数的空间复杂度都当作O(1)
还没有评论,来说两句吧...