【前端算法系列】时间复杂度和空间复杂度
时间复杂度
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) } }
下一篇:
散列(hash)算法与应用