知识全景图/ 软件工程与系统/ 数据结构与算法底座

数据结构与算法底座

把问题组织成可计算的形状:复杂度、结构选择、遍历搜索、递推优化与工程性能入口

阅读定位: 这页是计算机专业里的“数据结构与算法”主线入口。它不替代刷题手册,也不替代某门语言的集合类速查;它负责把数组、链表、栈队列、树、图、哈希、排序、搜索、贪心、动态规划和复杂度分析接成一张可复用的判断地图。

边界原则: 本页解释“为什么选这种结构和方法”。具体语言实现、面试题细节、框架源码和生产性能证据,应继续回到 Java、系统底座、性能工程、数据库、缓存和分布式专题。
一、算法学习不是背题,而是三件事
把问题建模成结构 选择可控的操作代价 证明结果正确并能扩展
层级核心问题典型能力常见误读
结构层数据之间是什么关系线性、层级、网状、映射、优先级、区间只按题型记“用什么模板”
代价层时间和空间怎样增长Big-O、摊还、最坏 / 平均、递归深度、内存局部性只会说 O(n),不知道常数和真实机器也会改变表现
策略层怎样从局部动作得到整体结果遍历、分治、贪心、动态规划、回溯、剪枝、随机化把算法当成魔法公式,而不是约束下的选择
证明层为什么它一定对循环不变量、归纳证明、交换论证、反例构造只跑过样例,就以为算法正确
二、核心结构怎么分工
数组 / 动态数组
适合按下标访问、连续扫描和缓存友好场景。代价是中间插入删除昂贵,扩容需要搬迁。很多工程性能问题都先从数组局部性开始。
链表 / 指针结构
适合频繁局部插入删除和结构重连。代价是随机访问慢、缓存不友好、对象分配多。真实工程里常被数组或块状结构替代。
栈 / 队列 / 双端队列
适合处理“最近未完成”“先进先出”“滑动窗口”这类顺序约束。函数调用栈、BFS、单调队列都从这里长出来。
哈希表
适合把查找降到均摊 O(1)。真正难点在哈希函数、冲突、扩容、内存占用和顺序语义,不是“查得快”四个字。
树 / 堆 / Trie
适合层级、排序、优先级和前缀问题。二叉搜索树、堆、B+ 树、LSM Tree、Trie 分别连接内存结构、数据库和检索系统。
适合表达依赖、路径、连通、匹配和流。社交网络、包依赖、调度、路由、权限继承、知识图谱都可以回到图模型。
三、常见算法策略
策略一句话理解典型问题判断要点
排序与二分先建立有序性,再用有序性换查询效率排序、查找边界、区间判断、Top K是否能付出预处理成本,是否有单调性
双指针 / 滑动窗口用两个边界维护一段可控区间子数组、字符串窗口、去重、合并窗口是否能单调移动,状态是否可增量维护
BFS / DFS按层或按深度遍历状态空间树图遍历、连通块、最短步数、拓扑排序状态是否会重复,是否需要 visited 和路径恢复
分治把大问题拆成相似小问题再合并归并排序、快速排序、线段树、最近点对子问题是否独立,合并成本是否可控
贪心每一步选局部最优,并证明不会影响全局最优区间调度、最小生成树、哈夫曼编码必须有交换论证或最优子结构,不能凭直觉贪
动态规划把重复子问题缓存起来,用状态转移组织答案背包、编辑距离、路径计数、序列匹配状态定义、转移方向、边界条件、空间压缩
回溯 / 搜索剪枝系统枚举候选解,并尽早丢掉不可能分支排列组合、约束满足、棋盘、子集搜索剪枝是否正确,复杂度是否还能接受
四、从课程到工程:算法不是只服务面试
工程问题背后的结构 / 算法继续看
代码 Big-O 没变,但数据量一大性能断崖数组、对象布局、Cache 局部性、分支预测计算机体系结构底座
数据库索引为什么不是普通二叉树B+ 树、磁盘页、范围扫描、局部性数据库图谱
缓存淘汰为什么不只用 LRU队列、哈希表、频率估计、TinyLFU缓存工程
服务依赖为什么会出现环和级联故障有向图、拓扑排序、连通性、传播路径依赖治理
消息积压和任务调度怎样优化队列、优先队列、背压、调度策略消息队列 / 事件驱动
搜索推荐为什么要分召回和排序倒排索引、向量检索、Top K、图关系搜索 / 推荐
分布式系统为什么需要共识算法状态机、日志复制、图中的多数派、故障模型分布式系统图谱
五、学习顺序
阶段先学什么能做什么就算过关
入门阶段数组、字符串、链表、栈、队列、哈希表、基础排序能解释每种结构的增删查改代价,并能用它们写出清晰代码
核心阶段递归、树、堆、二分、双指针、BFS / DFS、图的基础遍历能把问题建成状态图或树,并能处理 visited、边界、路径恢复
进阶阶段动态规划、贪心证明、并查集、拓扑排序、最短路、最小生成树能说清状态、转移、正确性和复杂度,不只会套模板
工程阶段缓存、索引、调度、批处理、流处理、依赖图、Benchmark能把结构选择和真实系统性能、内存、IO、并发约束接起来
六、和相邻页面怎么分工
如果你关心继续看分工说明
编程语法和零基础代码组织Java 编程语言基础语言基础页负责变量、控制流、函数、对象和错误处理;本页负责结构与复杂度
Java 集合、JVM、并发和面试题Java 面试深度指南面试页适合做 Java 语境下的题目和知识点补充,本页负责专业课主线
代码在真实机器上为什么快慢不同计算机系统底座本页看抽象复杂度,系统底座看 CPU、内存、OS 和运行时约束
怎么验证优化是否真的有效性能工程性能页负责 profile、压测和回归治理,本页只提供算法与结构侧的候选解释
大学计算机专业课怎么串大学计算机专业课程主线课程页负责整体先修关系,本页是其中“数据结构与算法”这一门的正入口
七、维护边界
规则原因执行方式
不把本页写成题库题库会快速膨胀,也会压住主线结构只保留结构、策略、分工和典型工程连接
不按单一语言解释全部结构数据结构是跨语言概念,语言只是实现载体Java、Go、Python 的具体容器差异放到语言页或面试页
复杂度和系统性能同时保留课程里只看 Big-O,工程里还要看内存、局部性、分配和并发本页同时回链体系结构、性能工程、数据库和缓存页