这页补大学计算机专业里最核心、也最容易被误读成“刷题课”的一组课:数据结构、算法设计、算法分析、复杂度、递归、图、动态规划、贪心、搜索、排序和算法工程。它承接编程基础与离散数学,向后连接系统、数据库、编译器、AI、搜索推荐和性能工程。核心问题不是“哪题用哪招”,而是怎样把问题组织成可计算、可证明、可度量、可工程化的形状。
编程基础教你把规则写成代码,算法课继续追问:代码面对规模增长时还能不能正确、快速、可解释地工作。
| 课程 / 模块 | 主问题 | 关键对象 | 继续下钻 |
|---|---|---|---|
| 数据结构 | 怎样组织数据以支持高效操作 | 数组、链表、栈、队列、哈希表、树、堆、图、Trie | 数据结构与算法底座 |
| 算法设计 | 怎样选择求解策略并保证结果正确 | 排序、搜索、分治、贪心、动态规划、回溯、剪枝 | 算法底座 |
| 算法分析 / 复杂度 | 时间和空间代价怎样随规模增长 | Big-O、递归式、摊还分析、最坏 / 平均、下界、NP 难 | 理论计算机科学课群 |
| 图论与图算法 | 关系、路径、依赖和网络怎样被建模 | BFS、DFS、拓扑排序、最短路、最小生成树、连通性、匹配 | 分布式系统 / 搜索推荐 |
| 字符串与文本算法 | 文本、模式、前缀和匹配怎样高效处理 | 字符串匹配、Trie、后缀结构、编辑距离、分词、倒排索引 | 搜索推荐专题 |
| 算法工程 / 性能验证 | 理论复杂度如何落到真实机器和真实数据 | 缓存局部性、内存分配、Benchmark、Profiling、压测、常数因子 | 性能工程 |
| 算法与建模求解 | 连续、约束、随机和仿真问题怎样转成可求解过程 | 优化、线性代数、数值稳定、启发式、模拟、搜索空间 | 大学数学 |
数组、引用、递归、集合、图、归纳法和循环不变量不稳,算法课就会变成背模板。先回到编程基础和离散数学。
数组为什么快,链表为什么慢,哈希为什么均摊,堆为什么能维护优先级,树和图为什么适合表达层级与关系,这些比刷多少题更底层。
分治、贪心、动态规划、回溯和图算法都要能解释状态、转移、边界、正确性和复杂度。尤其要学会构造反例。
真实机器里 Big-O 只是开始。缓存、内存布局、并发、IO、数据库索引、网络等待和数据分布都会改变算法表现。
| 现象 | 优先回到哪门课 | 为什么 | 不要只做 |
|---|---|---|---|
| 算法题看懂答案,自己写就卡 | 数据结构 + 编程抽象 | 你可能还不能把状态、边界、递归和集合操作稳定写成代码 | 继续看更多题解 |
| 会套动态规划模板,但一换题就不会 | 算法设计 + 正确性证明 | 缺的是状态定义、转移来源、边界条件和最优子结构判断 | 只背状态转移方程 |
| 复杂度分析总是含糊 | 算法分析 / 复杂度 | 需要补递归式、循环嵌套、摊还、空间复杂度和输入规模定义 | 只写一个 O(n) |
| 代码理论上 O(n),真实运行还是慢 | 算法分析 + 组成原理 / 操作系统 | 常数、Cache miss、对象分配、锁竞争、IO 和数据分布可能主导性能 | 只看 Big-O |
| 数据库索引、搜索推荐、缓存策略听不懂 | 树 / 哈希 / 图 / 字符串算法 | 这些系统机制大量依赖 B+ 树、哈希、倒排索引、Top K 和图关系 | 只看产品名或框架配置 |
| 遇到排班、路径规划、组合优化就爆炸 | 复杂度 + 离散数学 / 线性代数 | 可能是组合爆炸或 NP 难,需要近似、启发式、剪枝或约束建模 | 盲目追求全局最优 |
| 页面 | 负责什么 | 什么时候看 |
|---|---|---|
| 本页:数据结构、算法设计与复杂度课群 | 负责把大学计算机里的数据结构、算法设计、复杂度和算法工程接成课程路线 | 你要补算法课,但不想把它学成题库时 |
| 程序设计与编程语言基础课群 | 负责变量、函数、对象、模块、调试和开发者基本功 | 你还不能稳定把算法思路写成代码时 |
| 理论计算机科学课群 | 负责离散数学、自动机、可计算性和复杂度理论边界 | 你想理解算法为什么可证、为什么难、哪里有理论下界时 |
| 组成原理、体系结构与数字硬件课群 | 负责真实机器、内存层级和硬件结构对程序性能的约束 | 你发现复杂度不变但真实性能差很多时 |
| 操作系统课群 | 负责进程、线程、内存、文件和 IO 对算法运行的约束 | 你要理解算法在系统资源上怎样执行时 |
| 数据结构与算法底座 | 负责具体结构、算法范式和工程性能入口的技术细节 | 你已经知道自己要下钻算法机制时 |