时间复杂度
O(1) 一次就够(执行一次计算)
O(n) 和传输的数据量一样
O(n^2) 数据量的平凡 (比如n为2,cpu计算4次)
O(logn) 数据量的对数 (比如输入100,计算10次,1010=100) 比如二分查找,每次砍掉二分之一
O(nlogn) 数据量数据量的对数 (比如输入100,计算10次,1010=100)
// 1. O(1) :这两行代码只会被执行一次,没有循环
let i=0
i +=1
// 2. O(n) :循环n次,即cpu计算n次
for(let i=0;i<n;i+=1){
console.log(i)
}
// 3. 两个时间复杂度先后排列,取增长趋势更快的时间复杂度 O(1)+O(n)=O(n)
let i=0
i +=1
for(let j=0;j<n;j+=1){
console.log(j)
}
// 4. O(n)*O(n)=O(n^2)
for(let i=0;i<n;i+=1){
for(let j=0;j<n;j+=1){
console.log(i, j)
}
}
// 5. O(logN):以2为底的logN 2的多少次方为N
let i=1
while(i<n){ // 不断乘以2,直到大于或等于n,就是在求2^1,2^2...2^i=n
console.log(i)
i*=2
}
// 6. O(n*logn)
for(){ // 一个嵌套一个二分
// 二分
}
空间复杂度
- 空间复杂度和时间复杂度一样,也是一个函数,用大O表示,O(1)\O(n)\O(n^2)
- 算法在运行过程中临时占用存储空间大小的量度(代码占用存储空间越小,代码就越好)
// 1. O(1):只声明了单个变量,单个变量所占内存永远是1
let i=0
i+=1
// 2. O(n):声明一个数组,给数组添加n个值,相当于占用了n个内存单元
const list=[]
for(let i=0; i<n;i+=1){
list.push(i)
}
// 3. O(n^2):矩阵,嵌套两层的数组,存储了n^2次方个变量
const matrix=[]
for(let i=0;i<n;i+=1){
martix.push([])
for(let j=0;j<n;j+=1){
matrix[i].push(j)
}
}