跳转至
跳转到正文

10. 全课复杂度速查

附录导引

本页保留原讲义复杂度速查、结构选择模板和维护区锚点,集中放置复习辅助内容与后续扩展边界。

参考资料与引用边界

  • 整理者:Lumner。
  • 课程来源:根据 FDS/ 目录下现有数据结构课件整理。
  • 原始讲义文件:note/FDS_数据结构基础讲义.md
  • 引用边界:附录用于辅助复习,不替代课程正式教材、教师课件或考试要求。
结构/算法 关键操作 时间复杂度 备注
数组表 第 k 个元素 \(O(1)\) 随机访问
数组表 中间插入/删除 \(O(N)\) 需要移动元素
单链表 已知位置后插入 \(O(1)\) 查找位置另算
单链表 查找元素 \(O(N)\) 顺序扫描
Push/Pop/Top \(O(1)\) 数组或链表均可
队列 Enqueue/Dequeue \(O(1)\) 循环数组或链表
二叉树遍历 访问所有节点 \(O(N)\) 每节点一次
BST 查找/插入/删除 \(O(h)\) 平衡时 \(O(\log N)\),退化时 \(O(N)\)
二叉堆 FindMin \(O(1)\) 根节点
二叉堆 Insert/DeleteMin \(O(\log N)\) 上滤/下滤
二叉堆 BuildHeap \(O(N)\) 自底向上下滤
并查集 Union/Find 近似均摊 \(O(1)\) 按秩合并 + 路径压缩
线段树 建树 \(O(N)\) 节点数线性
线段树 区间查询/点更新 \(O(\log N)\) 查询可拆成少量节点
线段树 区间更新 \(O(\log N)\) 需要懒标记
邻接矩阵 判断边 \(O(1)\) 空间 \(O(V^2)\)
邻接表 遍历边 \(O(V+E)\) 适合稀疏图
拓扑排序 输出拓扑序 \(O(V+E)\) 队列维护零入度点

11. 选结构的思考模板

面对一道数据结构题,可以按以下顺序拆解:

  1. 明确对象:数据是序列、集合、树、图,还是区间?
  2. 明确操作频率:查询多、修改多、插入删除多,还是合并多?
  3. 找不变量:结构要维护有序性、堆序性、连通代表元,还是区间聚合值?
  4. 估复杂度:最频繁操作必须足够快,偶尔操作可以慢一些。
  5. 处理边界:空结构、单元素、重复值、越界、负数、环、懒标记下传。

几个典型匹配:

需求 首选结构
频繁按下标访问 数组
频繁在已知位置插入删除 链表
最近未匹配对象
先来先服务 队列
动态最小/最大优先级
动态连通性/等价类 并查集
动态区间聚合查询 线段树
依赖顺序安排 图 + 拓扑排序

12. 后续扩展区

后续新增 FDS 课件时,建议按这个流程维护本文:

  1. 在“资料来源索引”新增文件、主题和页数。
  2. 判断它属于已有章节还是新章节。
  3. 如果属于已有章节,在对应小节中追加“定义、算法、复杂度、例子、易错点”。
  4. 如果是新主题,先在本节登记,再扩展为正式章节。
  5. 若新增算法有代码,优先补充 C 风格模板和复杂度表。

后续扩展登记表

新文件 主题 处理状态 应补章节
暂无新增文件 暂无新主题 未触发 后续确认

新主题记录格式

## X. 主题名称

### X.1 问题背景

说明这个结构/算法解决什么问题,朴素做法为什么不够好。

### X.2 核心定义

列出对象、操作、不变量。

### X.3 算法过程

给出步骤、图示和必要伪代码。

### X.4 复杂度分析

说明时间、空间复杂度,以及复杂度来自哪里。

### X.5 实现例子与易错点

补充代码模板、边界条件和常见错误。