携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第28天,点击查看活动详情
他们说很多公司通过数据结构与算法去鉴别是否为优秀工程师(考虑鉴别成本+成功率)
科普:算法复杂度
什么是复杂度?
即复杂的程度----程序执行时需要的计算量和内存空间(和代码是否简洁无关)指的是计算机cpu和内存占用多少。
复杂度是一个数量级(方便记忆,推广),不是具体的数字。
一般针对一个具体的算法,而非一个完整的系统。
1.O(1)可数的。几次几次。
2.O(logn)随着原始数据输入,趋近于平缓。好现象。
3.O(n)一条分割线。也行。
4.O(nlogn)计算量增加时,曲线增大越来越明显。
5.O(n*2)这个不太好,增的非常非常快,不是我们想看到的。
时间复杂度?
O(1)一次就够。
function fn(){
//O(1)
return obj.a; //1
return obj.a+obj.b+obj.c; //3
}
O(logn)数据量的对数(数量级)
//O(logn)
二分查找
O(n)和传输的数据量一样。
//O(n)
function fn(arr=[]){
for(let i = 0;i<arr.length;i++){
console.log(n)
}
}
O(nlogn)数据量*数据量的对数。
//O(n*logn)
一个for循环+一个二分查找
}
O(n*2)数据量的平方。 算法基本不可用
//O(n*2)
function(arr=[][]){
for (var i = 0; i < arr.length; i++) {
for (var j = 0; j < arr.length; j++) {
console.log(n)
}
}
}
空间复杂度?
程序执行时需要的内存空间。
function fn(arr=[]){
//以下代码空间复杂度为O(1)
const a = arr[1]
//以下代码空间复杂度为O(n)
const arr2 = [];
for(let i =0;i<arr.length;i++){
arr2[i] = arr[i]+10;
}
}
如果没有复杂度的概念和敏感度,写程序是非常危险的。
他们说前端有些重时间 轻空间。
还说普通tree diff算法是O(n*3)
react优化vdom tree ---------O(n)
所以,过段时间我重新学习一下react.