手记

【九月打卡】第2天 程序员必须掌握算法复杂度?

第一模块:


课程名称:2周刷完100道前端优质面试真题


课程章节:第二章第三节


主讲老师:双越


第二模块:


课程内容概述


一. 什么是复杂度?


程序执行时需要的计算量和内存空间(和代码是否简洁无关).


复杂度是数量级(方便记忆/推广),不是具体的数字


一般是针对一个具体的算法,而非一个完整的系统.


表格如下:



O(1): 一次就够(数量级)


O(n): 和传输的数据量一样(数量级)


O(n^2):数据量的平方(数量级)


O(logn): 数据量的对数(数量级)


O(n*logn): 数据量*数据量的对数(数量级)


代码演示:

O(1):
function fn(obj={}){
    return obj.a+obj.b+obj.c;
}
O(n):
function fn(arr=[]){
    for(let i=0;i<arr.length;i++){
        console.info(arr[i]);
    }
}
O(n^2):
function fn(arr=[]){
    for(let i=0;i<arr.length;i++){
      for(let j=0;j<arr.length;j++){
          console.info(arr[j]);
      }
    }
}


二.空间复杂度


概念:程序运行时需要的内存空间


O(1):有限,可数的空间(数量级)


O(n):和输入的数据量相同的空间(数量级)


其他的不常见,只做这2个的拓展


O(1):
const a = arr[1]
O(n):
const arr2 = [];
for(let i=0;i<arr.length;i++){
    arr2[i] = arr[i]+10;
    ......
}


程序员必须掌握算法复杂度


如果达到O(n^2),算法基本不可用级别


重点:


算法复杂度是学习算法的基础,非常重要,不理解就先背诵


复杂度是数量级,用O(...)表示,内部是一个函数表达式


前端开发:重时间 轻空间



第三模块:


如果你没有复杂度的概念和敏感度,写程序是非常危险的


例如,代码工程测试正常,蛋数量大了,程序就会崩溃


对于前端开发,尤其是时间复杂度


第四模块:







1人推荐
随时随地看视频
慕课网APP