《学习JavaScript数据结构与算法》---读书笔记
常用数据结构的时间复杂度速查表
| 数据结构 | 一般情况 | 最差情况 |
|---|---|---|
| 数组/栈/队列 | O(1)[插入] O(1)[删除 ] O(n)[搜索] | O(1)[插入] O(1)[删除 ] O(n)[搜索] |
| 链表/双向链表 | O(1)[插入] O(1)[删除 ] O(n)[搜索] | O(1)[插入] O(1)[删除 ] O(n)[搜索] |
| 散列表 | O(1)[插入] O(1)[删除 ] O(1)[搜索] | O(n)[插入] O(n)[删除 ] O(n)[搜索] |
| 二分搜索树 | O(log(n))[插入] O(log(n))[删除 ] O(log(n))[搜索] | O(n)[插入] O(n)[删除 ] O(n)[搜索] |
图的时间复杂度速查表
| 节点/边的管理方式 | 存储空间 | 增加顶点 | 增加边 | 删除顶点 | 删除边 | 轮询 |
|---|---|---|---|---|---|---|
| 相邻列表 | O(|V|+|E|) | O(1) | O(1) | O(|V|+|E|) | O(|E|) | O(|V|) |
| 相邻矩阵 | O(|V|^2) | O(|V|^2) | O(1) | O(|V|^2) | O(1) | O(1) |
排序算法的时间复杂度速查表
| 算法(用于数组) | 最好情况 | 一般情况 | 最差情况 |
|---|---|---|---|
| 冒泡排序 | O(n) | O(n^2) | O(n^2) |
| 选择排序 | O(n^2) | O(n^2) | O(n^2) |
| 插入排序 | O(n) | O(n^2) | O(n^2) |
| 归并排序 | O(nlog(n)) | O(nlog(n)) | O(nlog(n)) |
| 快速排序 | O(nlog(n)) | O(nlog(n)) | O(n^2) |
搜索算法
| 算法 | 数据结构 | 最差情况 |
|---|---|---|
| 顺序搜索 | 数组和链表 | O(n) |
| 二分搜索 | 排好序的数组或二分搜索树 | O(log(n)) |
| 深度优先搜索(DPS) | |V|为顶点而|E|为边的图 | O(|V|+|E|) |
| 深度优先搜索(BFS) | |V|为顶点而|E|为边的图 | O(|V|+|E|) |