手记

【学习打卡】第1天 初识JavaScript算法

课程名称:JavaScript版数据结构与算法

课程章节:第2章 时间/空间复杂度计算

主讲老师:lewis


课程内容:

今天学习的内容包括:

2-1 时间复杂度计算——时间复杂度越小,运行时间越快。

2-2 空间复杂度计算——空间复杂度占用越小,代码越好。


课程收获:

时间复杂度:描述算法的运行时间,详见【图一】

相加:当同时存在两个时间复杂度时,以更大的时间复杂度为准 如:O(1) + O(n) = O(n)

相乘:嵌套循环复杂度相乘如:O(n) * O(n) = O(n²)

代码示例记录如下:

O(1)

let i = 0;
i+=1;

O(n)

for (let i = 0; i < n; i +=1){
    console.log(i);
}

O(1) + O(n) = O(n)

let i = 0;
i += 1;
for (let j = 0; j < n; j += 1){
    console.log(j);
}

O(n) * O(n) = O(n²)

for (let i = 0; i < n; i += 1){
    for (let j = 0; j < n; j += 1){
        console.log(i,j);
    }
}

O(logN)

let i=1;
while (i<n){
    console.log(i);
    i *= 2;
}

通过这些了解到:

时间复杂度排序:O(1) < O(logn) < O(n) < O(n²)

O(1):代码中没有循环,代码本身只执行一次

O(n):代码中有循环,代码会循环n次

当同时存在两个时间复杂度时,以更大的时间复杂度为准,如:O(1) + O(n) = O(n)

如存在嵌套循环,则复杂度相乘,如:O(n) * O(n) = O(n²)



空间复杂度:算法在运行过程中临时占用存储空间大小的量度

一个函数,用大O表示,比如O(1)、O(n)、O(n²)......

代码示例记录如下:

O(1)

let i = 0;
i+=1;

O(n)

const list = [];
for (let i = 0; i <n; i += 1) {
    list.push(i);
}

O(n²)

const matrix = [];
for (let i = 0; i<n; i += 1) {
    matrix.push([]);
    for (let j= 0; j <n; j += 1) {
        matrix[i].push(j);
    }
}



根据这两节内容,初步了解了时间复杂度和空间复杂度对程序的影响,初步了解到要想写出优秀的代码需要把控算法细节。初步了解了算法的魅力。



坚持学习,学习JavaScript算法,提升个人能力,写出优秀的代码,做出优秀的产品。








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