Skip to content

复杂度速查表

所有数据结构的 Big O 时间复杂度与空间复杂度速查。


线性结构

结构访问搜索插入删除空间
数组 ArrayO(1)O(n)O(n)O(n)O(n)
栈 StackO(n)O(n)O(1)¹O(1)¹O(n)
队列 QueueO(n)O(n)O(1)¹O(1)¹O(n)
优先级队列O(n)O(n)O(n)O(1)¹O(n)
双端队列 DequeO(n)O(n)O(1)²O(1)²O(n)
循环队列O(1)O(n)O(1)O(1)O(n)

¹ 仅在端点操作。² 两端均可。


链式结构

结构访问搜索插入删除空间
单向链表O(n)O(n)O(1)¹O(n)O(n)
双向链表O(n)O(n)O(1)¹O(1)²O(n)
跳表O(log n)³O(log n)³O(log n)³O(log n)³O(n log n)

³ 平均情况,最差 O(n)。


散列与集合

结构搜索插入删除空间
字典/MapO(1)¹O(1)¹O(1)¹O(n)
集合/SetO(1)¹O(1)¹O(1)¹O(n)
哈希表O(1)¹O(1)¹O(1)¹O(n)
布隆过滤器O(k)²O(k)O(m)

¹ 平均 O(1),最差 O(n)。² k = 哈希函数数量。


结构搜索插入删除空间
BST(平衡)O(log n)O(log n)O(log n)O(n)
BST(倾斜)O(n)O(n)O(n)O(n)
AVL 树O(log n)O(log n)O(log n)O(n)
O(n)¹O(log n)O(log n)²O(n)
前缀树 TrieO(k)³O(k)³O(k)³O(n × k)

¹ 堆不用于通用搜索,peek() 是 O(1)。² 提取最值是 O(log n)。³ k = 键长度。


表示方式查边遍历邻居加顶点加边空间
邻接矩阵O(1)O(V)O(V²)O(1)O(V²)
邻接表O(度数)O(度数)O(1)O(1)O(V+E)

缓存

结构GetPut淘汰空间
LRU 缓存O(1)O(1)O(1)O(capacity)

其他

结构合并查找连通空间
并查集O(α(n))O(α(n))O(α(n))O(n)

α(n) = 反阿克曼函数 — 实际使用中相当于 O(1)。


** 速记**

  • O(1) → 常数时间。最佳。哈希查找、数组索引。
  • O(log n) → 非常快。二分搜索、树操作。
  • O(n) → 线性。单次遍历。
  • O(n log n) → 高效排序(归并排序、快速排序)。
  • O(n²) → 平方。嵌套循环。大数据集避免。

MIT Licensed | 用 ❤️ 为 JS 初学者制作