什么是数据结构?
数据结构是指计算机存储、组织数据的方式(栈、队列、链表...)
什么是算法?
算法是指解决问题的一系列清晰步骤或指令
数据结构与算法有何关系?
- 数据结构是为算法提供服务的
- 算法是围绕着数据结构进行操作
- 程序 = 数据结构 + 算法
衡量算法好坏的标准是什么?
时间复杂度
-
时间复杂度是定性描述算法运行时间的大概趋势,用函数表示(大 O 表示法),如O(1)、O(n)、O(logN)等
-
常见的时间复杂度
O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(2^n) < O(n!)
-
示例
// O(1)
let i=0;
i++;
// O(logn)
while(i<n) {
console.log(i)
i*=2
}
// O(n)
let i = 1;
for(let i=0; i<n; i++) {
console.log(i)
}
// O(n^2)
for(let i=0; i<n; i++) {
for(let j=0; j<n; j++) {
console.log(i,j)
}
}
空间复杂度
- 空间复杂度是衡量算法在运行过程中临时占用存储空间的大小,通常也是用大 O 表示,如O(1)、O(n)、O(logN)等
- 算法占用的存储空间越小,则性能越好
- 示例
// O(1) -- 占用 1 个内存单元
let i=0;
i++;
// O(n) -- 占用 n 个内存单元
const arr = []
for(let i=0; i<n; i++) {
arr.push(i)
}
// O(n^2) -- 占用 n * n 个内存单元
const matrix = []
for(let i=0; i<n; i++) {
matrix.push([])
for(let j=0; j<n; j++) {
matrix[i].push(j)
}
}