复杂度也叫渐进复杂度,包括时间复杂度和空间复杂度,时间复杂度表示执行的快慢,空间复杂度表示执行的消耗
时间复杂度
- 只关注循环执行最多的一段代码
 - 加法法则:总复杂度等于量级最大的那段代码的复杂度。
 - 乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积
 常见时间复杂度分析
- O(1) 常数阶
 O(logn) 对数阶, O(nlogn)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16function total1(n) {
var sum = 0;
var i = 1;
while (i <= n) {
sum += i;
i = i * 2;
}
}
function total2(n) {
var sum = 0;
for (var i = 1; i <= n; i = i * 2) {
sum += i;
}
}
2^x = n, x = log2n, O(log2n)O(m+n), O(m*n)
| 操作数量事例 | 大O表示法 | 术语 | 
|---|---|---|
| 10 | O(1) | 常数阶 | 
| 2logn | O(logn) | 对数阶 | 
| 3n+5 | O(n) | 线性阶 | 
| 5n^2 + 2n | O(n^2) | 平方阶 | 
| 2^n+1 | O(2^n) | 指数阶 | 
| n!+3 | O(n!) | 阶乘阶 | 
空间复杂度
表示算法的存储空间和数据规模的关系。
- 常见的只有O(1), O(n), O(n^2)
 
思考题
1  | function total(n) {  | 
此函数时间复杂度为O(n),怎么降为O(1)1
2
3function total(n){
    return n * (n + 1) / 2;
}