【前端算法系列】时间复杂度和空间复杂度

时间复杂度

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)
	}
}
经验分享 程序员 微信小程序 职场和发展