新人,记录学习--算法

187 阅读1分钟

一、算法复杂度

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)