《数据结构&算法入门》全 25 集 | 逐集带读 + 宏观框架
25 集全量带读筑基期·算法筋骨目标:会选型、会算复杂度
如果说 Python 是让你「能写出程序」,这门课是让你「写出好的程序」。25 集的骨架是一条清晰的递进:线性结构 → 树 → 图,每引入一种结构,都在回答两个问题:数据怎么存(结构)、怎么取最快(算法与复杂度)。复杂度(O(1)/O(log n)/O(n)/O(n²))是这门课唯一的评判尺子。
修仙路线把筑基期定义为「扎马步 + 练内力」。Python 课给了内力(会写),本课给的是<b>经脉走向</b>(写得好):哈希表为什么 O(1)、BST 为什么会退化成链表、Dijkstra 与 Floyd 各自的适用面。这些都是判断「AI 系统哪里会成为性能瓶颈」的底层直觉。
"程序就是数据结构加上算法。"—— 第1集《数据结构第一课:数据结构和算法有什么用》· 转写校正版
"数据结构是特意设计的数据的存储和组织方式,就是为了让某些算法能够运行。"—— 第1集《数据结构第一课:数据结构和算法有什么用》· 转写校正版
转写质量:好。平台字幕轨,校正记录清晰,口误(如"屠杀"→"字典树"、"ATD"→"ADT")已修正,语义连贯。
"数组其实是一块连续的内存空间,用于存放一组相同类型的数据。"—— 第2集《数组:内存世界的原住民》· 转写校正版
"随机访问就是我指哪儿打哪儿,你告诉我第五个是什么,我张嘴就来。"—— 第2集《数组:内存世界的原住民》· 转写校正版
转写质量:好。校正记录详尽,修正了 sizeof/ malloc/ cache line/ prefetch/ next/ O(n)/ O(log n) 等术语,代码与复杂度记号规范。
"数组要求存储的数据在内存中的连续存储,我们可以称之为内存中的原住民;那么链表它在内存中是分散在各处的,我们可以称之为内存的散居游民。"—— 第3集《重要程度仅次于数组的数据结构——链表》· 转写校正版
"链表牺牲了随机访问这个特性来换取了动态性。"—— 第3集《重要程度仅次于数组的数据结构——链表》· 转写校正版
转写质量:好。校正记录清晰,修正了 next/ NULL/ prev/ 遍历/ O(1)/ O(n) 等术语;少数口误("武警""他杠")无把握未改但标注存疑,不影响理解。
"栈是一种操作受限的线性表,它的受限在哪啊,就只能对尾部进行插入和删除。"—— 第4集《栈:只在尾部操作的 List》· 转写校正版
"栈呢是先进去的要最后被处理,最后进去的反而就是先要处理。"—— 第4集《栈:只在尾部操作的 List》· 转写校正版
转写质量:好。平台字幕轨,大量"站/占/战/债→栈"已系统校正;peek、栈帧、rear、top=-1 等术语与约定已规范;"E盘→一摞盘"等 ASR 错误已修。
"队列是一个和栈特别相似的数据结构,区别就是对于进出元素的处理顺序是不同的。"—— 第5集《队列:四大线性数据结构的最后一环》· 转写校正版
"留空法:牺牲一个空间,rear 的下一个位置等于 front 就表示满了。"—— 第5集《队列:四大线性数据结构的最后一环》· 转写校正版
转写质量:好。校正记录清晰,修正了"对头→队头/rear/PCB/Kafka/削峰填谷"等术语;个别口误("就叫深度优先")存疑已标注。
"哈希表就是利用一个键 key,根据这个关键值直接定位它的其他值的一个数据结构。"—— 第6集《哈希表:Java HashMap、Python Dict 底层都是它》· 转写校正版
"哈希表无论是插入删除还是查找,平均都是 O(1)——这是一个典型的空间换时间的操作。"—— 第6集《哈希表:Java HashMap、Python Dict 底层都是它》· 转写校正版
转写质量:好。校正记录清晰,修正了"哈哈希→哈希/buckets/Hash DoS/next/学习树了"等;"well去找"存疑保留,不影响主干理解。
"树是以有 N 个节点的有限集合……当 N 大于零的时候,它一定有一个特殊的根节点。"—— 第7集《树的基础概念和代码实现》· 转写校正版
"树的度其实是它们最大的……分叉的最大值,不是加起来的值。"—— 第7集《树的基础概念和代码实现》· 转写校正版
转写质量:好。校正记录清晰,修正了"数→树/subtree/parent/TreeNode/setRoot/2i+1"等术语与公式;"站在地面"中"站"为站立义,正确保留。
"所谓的前中后序,都是指的是根节点在什么时期被出现:根节点在第一就叫前序,在中间叫中序,在最后叫后序。"—— 第8集《树的遍历:递归思想之始》· 转写校正版
"深度优先就用栈来模拟(后进先出),广度优先 BFS 就是用队列来模拟。"—— 第8集《树的遍历:递归思想之始》· 转写校正版
转写质量:好。校正记录系统,修正了"调用栈/栈帧/帧/TreeNode/BFS/遍历"等;"站在地面"保留为站立义,无误。
"对于任意节点,它的左子树所有节点的值都比根节点要小,它的右子树所有节点都比根节点要大——这就叫二叉搜索树。"—— 第9集《BST:二分法、递归的巧妙运用》· 转写校正版
"对 BST 做中序遍历,得到的就是一个有序的数组。"—— 第9集《BST:二分法、递归的巧妙运用》· 转写校正版
转写质量:好。校正记录清晰,修正了"subtree/根节点/BST(原 BSD)/栈帧"等;二分查找中 left/right 方向口误("找前半段"应为"找后半段")已标注存疑并修正。
"堆是一种为极值而生的数据结构。"—— 第10集《为极值而生的堆,解决Top K与优先队列难题》· 转写校正版
"堆的有序性其实是一个弱的有序性——父子之间有序,但是兄弟之间无序。"—— 第10集《为极值而生的堆,解决Top K与优先队列难题》· 转写校正版
转写质量:好。校正记录清晰,修正了"max heap/mini heap、大根堆/小根堆、heapify、largest、B+树、0-based、break"等术语;个别 parent 下标计算表述含混处存疑但标注,不影响主干。
"这两个堆各自存一半的数据,其中大顶堆存较小的一半数,小顶堆存较大的一半数。"—— 第11集《堆的应用——LeetCode295》· 转写校正版
"中位数就是两个堆顶的平均数,或者是其中哪一个(奇数时较多的堆的堆顶)。"—— 第11集《堆的应用——LeetCode295》· 转写校正版
转写质量:好。校正记录清晰,修正了"LeetCode/peekMax/10、27、13、49、35/10、13、27"等数字与术语;内容短(集数少、仅 246 段),聚焦一题,信息密度高。
"哈夫曼树的核心思想是:权重越大(出现频率越高)就让它离根节点越近,权重越小离根越远,使总 WPL 最小。"—— 第12集《哈夫曼树:如何实现高效数据压缩》· 转写校正版
"所有字符编码都在叶子节点,保证无任何编码是另一个编码的前缀——解码无需分隔符。"—— 第12集《哈夫曼树:如何实现高效数据压缩》· 转写校正版
转写质量:好。校正记录清晰,修正了"哈夫曼树/权重/父节点/13、14/29/27/取最小的"等;"冒号"为举例语气词存疑保留,不影响理解。
"字典树本质上是一个 N 叉树,利用公共前缀做复用,用空间换时间,效率基本是 O(L)。"—— 第13集《大厂面试必问:如何设计自动补全功能?——字典树》· 转写校正版
"字典树特别擅长的场景就是各种各样自动补全、拼写检查、最长前缀匹配。"—— 第13集《大厂面试必问:如何设计自动补全功能?——字典树》· 转写校正版
转写质量:好。校正记录清晰,修正了"字典树/ASCII/retrieval/time#/前缀树/O(L)/平衡树"等;"加1bell"举例语气词存疑保留,不影响理解。
"AVL 树是一种自平衡的二叉搜索树,在树中任意节点的左子树和右子树的高度的差值都小于等于一。"—— 第14集《AVL树:平衡的二叉搜索树,解决 BST 退化问题》· 转写校正版
"无论怎么旋转,中序遍历顺序不能变(旋转之后还要能做排序,不然他就不是 BST 了)。"—— 第14集《AVL树:平衡的二叉搜索树,解决 BST 退化问题》· 转写校正版
转写质量:好。校正记录清晰,修正了"AVL树/LL型/LR型/中序遍历/BST/死记硬背/临近考试"等;"应用也非常多"存疑但标注,不影响主干。
"红黑树通过放弃了绝对平衡,来换取了更高效的动态的修改能力,是工程上性价比最高的二叉搜索树。"—— 第15集《红黑树:适度平衡的艺术,哈希表、Map 底层都是它》· 转写校正版
"核心三性质:根叶黑、不红红、黑路同(任一节点到叶子路径上的黑色节点数相同)。"—— 第15集《红黑树:适度平衡的艺术,哈希表、Map 底层都是它》· 转写校正版
转写质量:好。校正记录清晰,修正了"根叶黑/不红红/黑路同/黑高/父节点/uncle/HashMap/LL型/NIL空节点"等;GP 为代码变量名保留未改。
"B 树的核心思想就是把高瘦的二叉树变成了矮胖的 B 树,用胖的节点来换取(减少)磁盘 IO——用空间换时间。"—— 第16集《B-Tree:为大数据而生的多路平衡搜索树》· 转写校正版
"B 树是一种多路(且自平衡)的查找树,通过控制树的高度来减少对磁盘的 IO 次数。"—— 第16集《B-Tree:为大数据而生的多路平衡搜索树》· 转写校正版
转写质量:好。字幕/校正已系统规范化"B树/M/2/父节点/页空间/平衡"等;大量"B数→B树"修正,主干清晰。
"B+ 树是一个工程的智慧,相对于 B 树进一步优化:非叶子节点只存 K,叶子节点用链表连起来。"—— 第17集《B+树:数据库索引基石》· 转写校正版
"B+ 树查询比较稳定(路径长度肯定都在叶子节点),范围查询比较快,对磁盘更友好。"—— 第17集《B+树:数据库索引基石》· 转写校正版
转写质量:中。本集为 B 站无字幕、本地 ASR 转写,长句错乱较多("B加数/分列/柚子树/负节点/更顺了"等),校正记录已大幅修正"B+树/分裂/右子树/父节点/关系型数据库/MongoDB/M/2"等术语,主干可读但口语残留略多;是 25 集中转写质量偏弱的一集。
"图是由若干个顶点及其把这些顶点连接起来的边组成的集合,最核心的是表达多对多的关系。"—— 第18集《图 1:图的现实应用与基础概念》· 转写校正版
"线性结构是一对一,树是一对多,到了图我们就可以理解为多对多的关系了。"—— 第18集《图 1:图的现实应用与基础概念》· 转写校正版
转写质量:好。字幕/校正已规范"最小生成树/degree/出度/邻接矩阵/邻接表/环"等;"J代表graph"中 J 疑为 G 存疑保留,不影响理解。
"邻接矩阵是用二维数组实现的,特别适合稠密的图,查边比较快,但是特别浪费空间;邻接表用链表和数组存储,适合稀疏的图,比较省空间。"—— 第19集《图的存储:邻接矩阵与邻接表》· 转写校正版
"选择数据结构要根据图的规模,还有最常见的操作类型来决定。"—— 第19集《图的存储:邻接矩阵与邻接表》· 转写校正版
转写质量:中。本集为 B 站无字幕、本地 ASR 转写,错乱较多("连接矩阵/165535/I=G/临临接"等),校正记录已大幅修正"邻接矩阵/graph[i][j]/65535/firstEdge/O(V+E)/邻接表"等术语,主干可读但口语残留略多;是 25 集中偏弱的一集。
"深度优先就像走迷宫一条路走到黑撞到南墙才回头;广度优先就像水波纹扩散一层层来。"—— 第20集《图的遍历:深度优先与广度优先》· 转写校正版
"广度优先能保证在无权图中肯定能找到最短的(路径);深度优先能保证走全但不能保证最短。"—— 第20集《图的遍历:深度优先与广度优先》· 转写校正版
转写质量:好。字幕轨,系统校正"遍历/栈/队列/连通/邻接点/LeetCode/分治/小根堆"等,主干清晰。
"最小生成树:含所有顶点、用 V-1 条边连接且无环、边权之和最小。"—— 第21集《最小生成树 (MST)》· 转写校正版
"Prim 每次把离当前生成树最近的顶点拉入伙;Kruskal 每次挑最小的边加入,用并查集判断是否成环——两者都是贪心的经典应用。"—— 第21集《最小生成树 (MST)》· 转写校正版
转写质量:好。字幕轨,校正"lowcast/Prim/Kruskal/连通/上溯/逐边加/无向连通"等;lowcast 为教材变量名保留,主干清晰。
"迪杰斯特拉每次都在未确定的节点中选离起点最近的,一旦选定就认为最优了,不回头。"—— 第22集《单源最短路径:迪杰斯特拉 (Dijkstra)》· 转写校正版
"迪杰斯特拉就是一种典型的贪心:每一步都做当前看起来最优的解,不考虑长期规划;只要权值是正的,选了就一定是最近的。"—— 第22集《单源最短路径:迪杰斯特拉 (Dijkstra)》· 转写校正版
转写质量:好。字幕轨,校正大量术语(DISS→dist、PRE→prev、OA方→O(V²)、父权→负权、有全图/带权的途中→带权图、广度优先便利→遍历、跌斯拉→迪杰斯特拉),主干清晰。
"弗洛伊德可理解为用动态规划的思想,并行解决每一个迪杰斯特拉问题。"—— 第23集《多源最短路径:弗洛伊德 (Floyd)》· 转写校正版
"如果我们是最优解,那么包含的子路径肯定也是最优的——这就是最优子结构。"—— 第23集《多源最短路径:弗洛伊德 (Floyd)》· 转写校正版
转写质量:好。字幕轨,校正术语统一(迪杰斯拉克/杰斯拉克→迪杰斯特拉)、矩阵代号(DIG→d[i][j]、DIK→d[i][k]、DKG→d[k][j]、DIGPP→d[i][j] 矩阵)、复杂度记号(OV方→O(V²)、V³ 等),主干清晰。
"拓扑排序本质是解决先做什么后做什么的依赖顺序问题。"—— 第24集《拓扑排序 (Topological Sort)》· 转写校正版
"只要处理的顶点数量等于总顶点数,就说明没有环;小于的话就肯定有环——拓扑排序处理不了带环的场景。"—— 第24集《拓扑排序 (Topological Sort)》· 转写校正版
转写质量:好。字幕轨,校正术语(临界点→邻接点、入站/出战→入栈/出栈、贝塔→data、加加top→++top、nest→next、连接表→邻接表),主干清晰。
"关键路径上的活动一分钟都马虎不得,只要出问题整体必然延期。"—— 第25集《AOE网与关键路径 (Critical Path)》· 转写校正版
"想缩短整个工期,就必须缩短关键活动的持续时间——关键活动不变,整体完成时间就变不了。"—— 第25集《AOE网与关键路径 (Critical Path)》· 转写校正版
转写质量:好。字幕轨,校正术语(编→边、EARLIST→earliest、洗盘茄→洗碗、DL/delay、没发→无法、A3A5A七→A3、A5、A7),主干清晰。
| 模块 | 关键概念 | 常见误解 / 口径校正 | 与修仙路线的接口 |
|---|---|---|---|
| 线性结构 | 数组 vs 链表 | 「链表插入 O(1)」的前提是已经拿到前驱节点,否则仍要 O(n) 查找 | 对应 Python 的 list(数组)与 collections.deque(双端队列) |
| 哈希表 | 哈希函数 + 冲突解决 | O(1) 是均摊期望,不是绝对保证;哈希碰撞攻击可把查询打成 O(n) | AI 安全视角:碰撞退化本身是一种 DoS 攻击面 |
| 树与遍历 | 递归三序 + 层序 | 递归不是「算法」,是「把问题交给同样结构的更小问题」的思维方式 | 递归是理解 Transformer 中树形/层级结构解析的底层能力 |
| BST 与退化 | 有序插入退化为链表 | 这正是 AVL / 红黑树存在的唯一理由:用自平衡保住 O(log n) | 「退化」思想可迁移到模型退化、特征退化等概念 |
| 堆与 Top K | 大根/小根堆 | Top K 不是「排序后取前 K」,而是维护 K 大小堆,把 O(n log n) 降到 O(n log K) | 检索系统、推荐召回的 Top K 取法正是这个套路 |
| B 树 vs B+ 树 | 多路平衡 + 叶子链表 | B+ 树把所有数据放叶子且叶子相连,所以范围查询只需扫链表,这是它成为数据库索引基石的原因 | 理解数据库慢查询、索引失效的必备背景 |
| 图算法选型 | Dijkstra / Floyd / 拓扑 | Dijkstra 是单源且边权非负;有负权要 Bellman-Ford;多源全点对才用 Floyd | 依赖解析(如构建系统、任务编排)本质是拓扑排序 |
数据结构与算法 · 课程导读 | 基于 25 集转写校正版生成 | 修仙学 AI 路线