一、算法复杂度
1. 时间复杂度
一个算法所需要的时间需要具体上机运行才知道,很显然不可能每个都验证一遍再做选择。我们可以对算法耗时进行合理的预测。
一个算法中语句的执行次数我们叫做时间频度,记做T(n) ,n表示问题规模,n增大T(n)也随之增大。而我们预估算法的效率,就是对T(n)的变化趋势进行分析,为了方便分析,我们需要简化一下T(n)函数,所以我们引入时间复杂度的概念:若有某个辅助函数 f(n) ,使得当n趋近与无穷大时,T(n)/f(n) 的极限值为不等于0的常数,则称 f(n) 是 T(n)的同数量级函数,记做 T(n) = O( f(n) ) 。*O( f(n) )*就是时间复杂度的表示法。
二、常用算法
数组去重
//基础写法
function fn(arr){
let newArr = [...arr];
for(let i=newArr.length-1;i>=0;i--){
for(let j=i-1;j>=0;j--){
if( newArr[i] === newArr[j] ){
newArr.splice(j,1);
i --;
}
}
}
return newArr;
}
//O(n^2)
//优化算法复杂度
function fn(arr){
let tmp = {};
let newArr = [];
for(let i=0,length=arr.length;i<length;i++){
let value = arr[i];
if( !tmp[value] ){
tmp[value] = true;
newArr.push(value);
}
}
return newArr;
}
//O(n)