这个文件只给课程制作阶段使用,不进入学生版 PPT。正式页面中不要出现“原 PPT”“补充”“正确讲法”“制作提示”等教师侧措辞。
course-branding-data.js,每章加载统一脚本,不要在每个章节手写署名、二维码、logo。drafts/ 下的草稿或进度文件中。Prev、Next、Run、Final、Reset。Next 要体现一步一步变化,不要一次性把多次 probe 或多次比较全部显示出来。Run 用于连续推进;Final 用于直接看最终状态;Reset 应清空高亮、箭头和临时状态。H(key)、i、h+i^2、双散列步长等。Entry 中 key 可以是模板变量,value 示例可用 int,不要出现无法编译的 int/string 混用。main 中全部测试过。本节是后续章节制作的唯一进度真源。正式学生版 PPT 中不得出现本节中的制作说明、原始 PPT 批注、纠错说明或内部判断。
每一章必须按以下步骤顺序推进,且同一章不得跳步:
执行规则:
| 章节 | 原始文本 | 当前状态 | 下一步 |
|---|---|---|---|
| 第 1 章 绪论 | reference-text/chapter1.0_Introduction.md |
Step 4 基线已生成 | Step 5:覆盖与质量校验 |
| 第 2 章 算法分析 | reference-text/chapter2_AlgorithmAnalysis.md |
Step 4 基线已生成 | Step 5:覆盖与质量校验 |
| 第 3.0 章 线性表 | reference-text/chapter3.0_List.md |
Step 4 基线已生成 | Step 5:覆盖与质量校验 |
| 第 3.1 章 栈和队列 | reference-text/chapter3.1_StackQueue.md |
Step 4 基线已生成 | Step 5:覆盖与质量校验 |
| 第 4.0 章 树 | reference-text/chapter4.0_Tree.md |
Step 4 基线已生成 | Step 5:覆盖与质量校验 |
| 第 4.1 章 特殊树 | reference-text/chapter4.1_SpecialTree.md, reference-text/chapter4.1_SpecificTrees.md |
Step 4 基线已生成 | Step 5:覆盖与质量校验 |
| 第 5 章 散列 | reference-text/chapter5_Hashing.md |
Step 4 初版已存在,迁移未完成 | Step 5:覆盖与质量校验 |
| 第 6 章 优先队列 | reference-text/chapter6_PriorityQueue.md |
Step 4 基线已生成 | Step 5:覆盖与质量校验 |
| 并查集 | reference-text/chapter7_DisjointSet.md |
Step 4 基线已生成 | Step 5:覆盖与质量校验 |
| 排序 | reference-text/chapter7_Sorting.md, reference-text/chapter9.0_Sorting.md |
Step 4 基线已生成 | Step 5:覆盖与质量校验 |
| 图 | reference-text/chapter8_Graph.md |
Step 4 基线已生成 | Step 5:覆盖与质量校验 |
状态:已完成。
完成日期:2026-07-17。
原始文本:reference-text/chapter1.0_Introduction.md,共 88 页。
原始内容覆盖清单:
Data_Structure = {D, R}、线性结构与非线性结构。IntCell、访问控制、构造函数、this、static main、对象创建、方法调用。Object 方案、强制类型转换、包装类、Java 泛型、自动装箱/拆箱。Comparable、泛型 findMax、接口/约束。try/catch/finally;throw;throws。BufferedReader、readLine、parseInt、StringTokenizer、顺序文件读取。DataStructures 包、Overflow / Underflow 异常类。1..n 中取 r 个数组合、Hanoi 塔。需要修正和现代化的点:
soluting、stap、templete、memble、meanimg、NaturalNunber 等,学生版统一改为准确中文讲义表述。fib(0)=0, fib(1)=1,但后续代码对 n==0 返回 1,这是错误;学生版必须修正。{D, R},需要补充“操作集合”视角,避免学生误以为数据结构只有元素和关系。本章教学定位:
学生学习目标:
Object 泛化、包装类、泛型、Comparable 与 C++ template 的作用和代价。try/catch/finally、throw、throws。面向 PPT 的逻辑重排建议:
Step 1 结论:
下一步只允许推进 Step 2:制定详细的动图图解计划。
状态:已完成。
完成日期:2026-07-17。
全章图解主线:
动图和图解计划:
intro-scenario-map:三栏场景映射图。游戏下一步选择逐步展开为树,图书目录逐步整理为线性表,交通路口冲突逐步抽象为图。course-dependency-map:课程依赖图。栈连接编译原理,队列连接操作系统,B/B+tree 连接数据库,图连接网络和路径规划。data-structure-triple:D / R / Ops 分层图。先出现数据对象,再出现关系边,最后出现操作接口。logical-vs-physical:学生表例子。逻辑上线性表,物理上数组与链式存储并排,插入删除操作在两个物理表示上产生不同代价。adt-boundary:ADT 使用者和实现者隔离图。左侧是调用者只看接口,右侧切换数组/链表实现,接口保持不变。algorithm-checklist:算法定义检查器。给出选择排序、操作系统循环两个例子,逐项检查输入、输出、确定性、有限性、有效性。selection-sort-intro:选择排序小数组逐帧比较、更新最小值、交换,为第 2 章复杂度分析铺垫。growth-curves-lite:n、n log n、n^2 小规模曲线,展示排序算法增长差异。math-toolbox:指数、对数、级数、模运算、归纳法、反证法作为后续章节工具箱卡片,点击或分帧展开用途。recursion-rules:递归规则动画。base case 高亮,progress 箭头向更小规模移动,bad recursion 展示规模不下降导致无限递归。factorial-call-stack:阶乘调用树与调用栈联动,从 factorial(5) 下探到 base case,再回填返回值。fib-call-tree:Fibonacci 调用树,突出重复子问题,并纠正 fib(0)=0。array-sum-recursion:数组求和,数组区间逐步缩短,调用栈累加返回。permutation-tree:abc 全排列递归树,swap/restore 动画展示回溯。hanoi:三柱移动动画,先 3 个盘逐帧,再抽象为 move(n-1), move(1), move(n-1)。generic-container:IntCell -> MemoryCell<Object> -> GenericMemoryCell<T> 演化图,展示类型安全逐步增强。comparable-findmax:数组扫描找最大,比较接口 compareTo 高亮,说明泛型算法对类型的约束。exception-flow:异常传播图。语句触发异常,沿调用链上传,匹配 catch,finally 总执行。io-pipeline:System.in -> InputStreamReader -> BufferedReader -> parseInt 数据流图。代码讲解计划:
findMax<T> 与比较器/operator<。习题图解预留:
permutation-tree。hanoi。Step 2 结论:
状态:已完成。
完成日期:2026-07-17。
答案方案:
ones(n)=ones(n/2)+(n%2),ones(0)=0。图解使用除 2 调用链和二进制位回填。permute(a, low, high);每层固定 low 位,遍历交换 low..high,递归后 swap restore。图解复用全排列递归树。max(a,n)=max(max(a,n-1),a[n-1]),base 为 n=1。图解用数组前缀收缩。n;或返回 (sum,count),避免每层重复除法。图解用返回值气泡。len(p)=0 if p==nullptr else 1+len(p->next)。图解逐节点推进。C(n,r):递归分支“选当前数/不选当前数”;当 r=0 输出组合,当剩余数不足剪枝。图解用二叉选择树。move(n,A,C,B)=move(n-1,A,B,C), A->C, move(n-1,B,C,A);移动次数 2^n-1。图解复用 Hanoi 动画。答案页要求:
状态:已完成。
完成日期:2026-07-17。
原始文本:reference-text/chapter2_AlgorithmAnalysis.md,共 46 页。
原始内容覆盖清单:
n、渐进增长。需要修正和现代化的点:
O、Θ、Ω 的用途和区别,避免学生只把复杂度理解为“大概上界”。本章教学定位:
学生学习目标:
O、Θ、Ω 描述上界、紧确界和下界。面向 PPT 的逻辑重排建议:
Step 1 结论:
状态:已完成。
完成日期:2026-07-17。
动图和图解计划:
complexity-roadmap:从输入规模到运行资源的路线图,分为时间、空间、正确性。statement-counter:代码行频度计数器,左侧代码逐行高亮,右侧累加执行次数。loop-growth:单循环、嵌套循环、三角循环的网格计数图,逐步形成 n、n^2、n(n-1)/2。space-stack:递归调用栈增长图,对比迭代辅助变量和递归栈空间。selection-sort-cost:选择排序逐帧比较次数计数,复用第 1 章选择排序动画但增加计数条。bubble-sort-cost:冒泡排序比较和交换过程,展示最好情况可提前停止,最坏情况移动多。insertion-sort-cost:插入排序在近乎有序与逆序输入下的差异。rank-sort-cost:名次排序的二维比较矩阵,展示每对元素比较一次。asymptotic-curves:1, log n, n, n log n, n^2, 2^n 曲线,可切换线性/对数纵轴。notation-compare:O/Theta/Omega 三层界限图,使用函数曲线和上下包络。recurrence-tree-lite:简单递归式的递归树,用于引出后续递归算法分析。代码讲解计划:
习题图解预留:
statement-counter。space-stack。Step 2 结论:
状态:已完成。
完成日期:2026-07-17。
答案方案:
selectkth(a,k,n):外层执行 k 次,第 i 次内层比较 n-i-1 次,总比较次数 sum_{i=0}^{k-1}(n-i-1)=kn-k(k+1)/2,交换 k 次,时间复杂度 Theta(kn);当 k=n 为 Theta(n^2)。图解使用三角计数网格,只涂前 k 行。Theta(n),倍增循环 Theta(log n),嵌套三角循环 Theta(n^2),含几何增长内层按求和处理。答案页要求:
k 从小到大时 selectkth 从接近线性到二次的变化。状态:已完成。
完成日期:2026-07-17。
原始文本:reference-text/chapter3.0_List.md,共 78 页。
原始内容覆盖清单:
需要修正和现代化的点:
List<T> 或示例类型,避免 Java/C++ 混排。本章教学定位:
学生学习目标:
面向 PPT 的逻辑重排建议:
Step 1 结论:
状态:已完成。
完成日期:2026-07-17。
动图和图解计划:
list-roadmap:线性表 ADT -> 顺序表 -> 链表 -> 应用的路线图。list-adt-contract:接口卡片,逐步出现 size/get/insert/remove/find。array-list-access:连续数组和下标访问,展示地址计算。array-list-insert:在中间插入元素,右侧元素从后向前移动,目标空位出现后放入新值。array-list-delete:删除元素,右侧元素左移,最后 size 减一。linked-list-node:节点由数据域和指针域组成。linked-list-search:current 指针逐节点移动。linked-list-insert:新节点先孤立出现,再连 new.next,再改 prev.next,强调顺序。linked-list-delete:先定位前驱,再跨过目标节点,最后释放/移除目标。array-vs-linked:多维比较卡片:访问、插入、删除、空间局部性、额外指针。josephus-circle:循环链表报数出列动画。polynomial-list:多项式项按指数排序,两个链表 merge 合并同类项。radix-bucket-list:基数排序桶分配和收集作为扩展图。代码讲解计划:
List<T> ADT 接口。ArrayList<T> 插入/删除。SinglyLinkedList<T> 查找/插入/删除。add 作为应用代码。习题图解预留:
Step 2 结论:
状态:已完成。
完成日期:2026-07-17。
答案方案:
prev -> x -> y -> next,依次设置 x->next = y->next,y->next = x,prev->next = y。若交换头两个结点,使用哨兵头结点统一处理。prev/next 四条边,建议用局部节点 a,b 和左右邻居 L,R,最终 L<->b<->a<->R。图解必须显示旧边何时消失。O(m+n)。O(m+n)。prev=null, cur=head,循环保存 next=cur->next,改 cur->next=prev,推进三指针。图解显示三指针滑动。m 个;答案图用圆环出列序列。答案页要求:
状态:已完成。
完成日期:2026-07-17。
原始文本:reference-text/chapter3.1_StackQueue.md,共 61 页。
原始内容覆盖清单:
Create、IsEmpty、IsFull、Top、Add/Push、Delete/Pop。需要修正和现代化的点:
Add/Delete 不如 push/pop、enqueue/dequeue 清晰;学生版保留 ADT 对照,但主讲标准术语。topOfStack 的变化必须逐帧展示,避免学生只背 ++top、top--。本章教学定位:
学生学习目标:
面向 PPT 的逻辑重排建议:
Step 1 结论:
状态:已完成。
完成日期:2026-07-17。
动图和图解计划:
stack-queue-roadmap:受限线性表路线图,List -> Stack/Queue/Deque。array-stack-push-pop:数组栈 push/pop,top 指针逐步变化。linked-stack-push-pop:链式栈头插/头删。multi-stack-space:多个栈共享数组空间的静态对比图。paren-match:括号匹配,输入流、栈和错误位置联动。expression-eval:中缀/后缀表达式求值,操作数栈和运算符栈。call-stack:函数调用栈,与第 1 章递归栈复用。queue-linked:链式队列 enqueue/dequeue,front/rear 指针变化。circular-queue:循环队列数组,front/rear 绕回,空/满判定对比。queue-scheduler:作业调度队列,展示 FIFO 语义。代码讲解计划:
Stack<T> 接口与数组实现。Stack<T> 链式实现。CircularQueue<T>,重点讲 front/rear/size。习题图解预留:
Step 2 结论:
状态:已完成。
完成日期:2026-07-17。
答案方案:
p 时,严格 O(1) 前插通常需要复制/搬移数据技巧或持有前驱;答案必须说明模型假设。若不能改数据,只给 p 无法 O(1) 前插。rear 和 length,队首位置为 (rear - length + 1 + m) % m;空条件 length==0,满条件 length==m;入队更新 rear=(rear+1)%m,length++,出队更新 front=(rear-length+1+m)%m 后取出并 length--。答案页要求:
状态:已完成。
完成日期:2026-07-17。
原始文本:reference-text/chapter4.0_Tree.md,共 124 页。
原始内容覆盖清单:
需要修正和现代化的点:
本章教学定位:
学生学习目标:
面向 PPT 的逻辑重排建议:
Step 1 结论:
状态:已完成。
完成日期:2026-07-17。
动图和图解计划:
tree-roadmap:树术语 -> 二叉树 -> 性质 -> 表示 -> 遍历 -> 转换。tree-terminology:根、父子、兄弟、叶子、度、层次、深度、高度逐一高亮。tree-vs-binary:普通树与二叉树对比,强调二叉树左右子树有序。binary-tree-properties:用节点计数和边计数演示叶子数、分支数、高度上界。full-complete-perfect:满/完全/完美二叉树定义对比图,固定术语。complete-tree-array:完全二叉树数组编号,父子下标公式联动。binary-linked-representation:二叉链表节点 data,left,right。preorder-traversal:边上访问箭头,节点访问序列实时追加。inorder-traversal:左-根-右过程,回溯箭头显示。postorder-traversal:左右子树完成后访问根。level-order:队列和树联动。recursive-vs-iterative:递归栈与显式栈对比。tree-forest-conversion:左孩子右兄弟转换。代码讲解计划:
习题图解预留:
Step 2 结论:
状态:已完成。
完成日期:2026-07-17。
答案方案:
答案页要求:
状态:已完成。
完成日期:2026-07-17。
原始文本:reference-text/chapter4.1_SpecialTree.md 与 reference-text/chapter4.1_SpecificTrees.md。
原始内容覆盖清单:
leftSize 字段。需要修正和现代化的点:
本章教学定位:
学生学习目标:
面向 PPT 的逻辑重排建议:
Step 1 结论:
状态:已完成。
完成日期:2026-07-17。
动图和图解计划:
search-tree-roadmap:BST -> AVL -> m-way -> B-tree -> B+tree。bst-search:从根开始比较 key,路径高亮,失败位置显示插入点。bst-insert:逐步查找插入位置,再放入新节点。bst-delete-leaf:删除叶子。bst-delete-one-child:子树接替父边。bst-delete-two-children:用后继/前驱替换,再删除后继/前驱原节点。bst-degeneration:有序插入导致链状退化,高度曲线随插入增长。indexed-bst:leftSize 字段与按排名查找联动。avl-insert-path:插入路径、回溯检查平衡因子。avl-rotations:LL/RR/LR/RL 四类,使用标准模板的渐变移动。mway-search-tree:多关键字节点划分区间。btree-insert-split:B-tree 插入、结点满、分裂、中间 key 上升。btree-delete-brief:删除只做概念图,详细程度按课时控制。bplus-range-query:B+tree 内部索引导航到叶子,叶子链表范围扫描。btree-vs-bplus:内部结点是否存数据、叶子链、范围查询对比。代码讲解计划:
习题图解预留:
Step 2 结论:
状态:已完成。
完成日期:2026-07-17。
答案方案:
3,1,4,6,9,2,5,7:逐个插入,最终根 3,左子 1,1 的右子 2,右子 4,4 的右子 6,6 左子 5,右子 9,9 左子 7;删除根 3 时可用后继 4 替换,再删除原 4。rank = leftSize;若 k==rank 返回当前,k<rank 去左子树,k>rank 去右子树查 k-rank。{16,3,7,11,9,28,18,14,15}:答案页逐次展示平衡因子和旋转类型;生成 PPT 时用 AVL 模板自动列所有中间树。(low, high),每个节点必须满足 low < key < high,比单纯比较父子更正确。S1,S2,S3 命题:不总有对任意 a in S1, b in S2, c in S3 满足 a<=b<=c,需根据路径节点和左右分支具体位置判断;答案用反例树说明。DEC,FEB,NOV,OCT,JUL,SEP,AUG,APR,MAR,MAY,JUN,JAN:逐步插入并标 LL/RR/LR/RL。N(h)=N(h-1)+N(h-2)+1,N(0)=1,N(1)=2;最大高度为满足该递推的最大 h,最小高度约为完全树高度 ceil(log2(n+1))-1。答案页要求:
状态:已完成。
完成日期:2026-07-17。
原始文本:reference-text/chapter5_Hashing.md,共 44 页。当前已有 chapters/05-hashing.qmd 初版,后续不从零重写,但要迁移到标准模板组件。
原始内容覆盖清单:
Address = hash(key),目标是平均常数时间查找。需要修正和现代化的点:
hash-demo.js 动画需要逐步迁移到 course-viz.js 标准组件。本章教学定位:
学生学习目标:
Step 1 结论:
course-viz 组件替换旧版散乱动画,并做完整覆盖校验。状态:已完成。
完成日期:2026-07-17。
动图和图解计划:
hash-roadmap:函数映射 -> 碰撞 -> 开放寻址 -> 链式 -> 再散列 -> 工程权衡。search-comparison:顺序/二分/散列查找,迁移到标准数组和哈希表组件。hash-basic-process:基本插入和查找,展示 hash(key)、mod m、bucket。mod-hash:取余法和碰撞。collision-probability:20 桶扔球 + 500 次 G2 统计图。prime-vs-composite:质数/合数表长分布对比。middle-square:竖式/二进制对齐计算。string-hash:简单求和 vs 多项式滚动。linear-probing:7 桶逐步探测。clustering:线性探测聚集扩张。tombstone-delete:删除不能清空,墓碑保持探测链。quadratic-probing:h+i^2 中间变量。double-hashing:h1、h2、互质步长。rehash:旧表装载过高到新表的静态迁移图。separate-chaining:链式哈希头插/查找/删除。cuckoo24:仅作为扩展或前沿页,使用模板页当前标准动画。代码讲解计划:
OpenAddressHashTable。std::vector<std::list<Entry>> 或自写节点,和动画语义一致。习题图解预留:
Step 2 结论:
05-hashing.qmd 中旧动画全部换成 course-viz 标准组件。状态:已完成。
完成日期:2026-07-17。
答案方案:
{4371,1323,6173,4199,4344,9679,1989},h(x)=x mod 10:
h+i^2 mod 10,由于表长 10 非质数且探测序列覆盖不足,可能无法插入所有冲突 key;答案必须展示失败路径并说明原题设计不良。h2=7-(x mod 7) 配表长 10 时部分步长与 10 不互质,不能保证覆盖全表;答案图展示具体探测路径并提示约束。12,23,45,57,20,03,78,31,15,36:
(1+1+1+2+1+1+1+5+2+1)/10 = 1.6。答案页要求:
状态:已完成。
完成日期:2026-07-17。
原始文本:reference-text/chapter6_PriorityQueue.md,共 39 页。
原始内容覆盖清单:
需要修正和现代化的点:
DeleteMax 的最后元素下滤过程必须逐步比较左右孩子,不能直接跳到结果。O(n) 分析。本章教学定位:
学生学习目标:
O(log n)。O(n)。面向 PPT 的逻辑重排建议:
Step 1 结论:
状态:已完成。
完成日期:2026-07-17。
动图和图解计划:
pq-roadmap:优先级抽象 -> 堆实现 -> 插入 -> 删除 -> 建堆 -> 应用。pq-adt:普通队列与优先队列对比。heap-shape-order:完全二叉树性质和堆序性分开高亮。heap-array-link:树节点与数组下标联动,高亮父子公式。heap-insert:新元素放末尾,上滤逐步交换。heap-delete-max:堆顶删除,末尾元素移到根,下滤比较左右孩子。build-heap:从最后一个非叶子结点开始自底向上下滤。heap-sort:可作为排序章节复用,删除最大并放到数组末尾。pq-applications:任务调度和 Dijkstra frontier 概念图。代码讲解计划:
BinaryHeap<T, Compare> C++17。push、pop、top、buildHeap 分段高亮。习题图解预留:
Step 2 结论:
状态:已完成。
完成日期:2026-07-17。
答案方案:
10,12,1,14,6,5,8,15,3,9,7,4,11,13,2 到二叉堆:答案用 heap-insert 动画逐步生成,不手写大表。deleteMin:每次删除根、末尾补根、下滤,答案用 delete-min 动画。{12,2,16,30,28,10,16*,20,6,18}:先建最大堆,再每轮交换根和末尾、缩小堆、下滤;稳定性用 16 与 16* 展示。答案页要求:
状态:已完成。
完成日期:2026-07-17。
原始文本:reference-text/chapter7_DisjointSet.md,共 22 页。
原始内容覆盖清单:
Find、Union。需要修正和现代化的点:
Union(i, j) 应明确参数是否是元素还是根;课堂和代码必须统一。Find(x) 沿路径上溯再回写父指针。O(alpha(n))。本章教学定位:
学生学习目标:
Find 和 Union。面向 PPT 的逻辑重排建议:
Step 1 结论:
状态:已完成。
完成日期:2026-07-17。
动图和图解计划:
dsu-roadmap:等价关系 -> 集合森林 -> union/find -> 优化 -> 应用。equivalence-classes:关系边逐步生成连通分组。parent-array-forest:森林节点和 parent 数组联动。find-simple:从节点沿父指针到根。union-simple:根接到另一个根。worst-chain:连续错误 union 形成长链。union-by-size:按大小合并,根中负数 size 更新。union-by-rank:按高度/rank 合并,rank 相等时增加。path-compression:Find 回溯时路径上节点直接连根。kruskal-preview:边排序后用并查集判断是否成环,为图章铺垫。代码讲解计划:
DisjointSet C++17,包含 find、uniteBySize、uniteByRank。find 先展示无压缩版本,再展示路径压缩版本。习题图解预留:
Step 2 结论:
状态:已完成。
完成日期:2026-07-17。
答案方案:
Union(1,5), Union(2,1), Union(3,2), Union(4,3), Find(5),分别用普通 union、按大小合并、路径压缩画结果。Find 的路径和压缩回写。答案页要求:
Union 参数是元素还是根;学生版采用 unite(x,y) 内部调用 find。状态:已完成。
完成日期:2026-07-17。
原始文本:reference-text/chapter7_Sorting.md 与 reference-text/chapter9.0_Sorting.md,内容高度重叠。
原始内容覆盖清单:
Comparable 代码。需要修正和现代化的点:
chapter7_Sorting 和 chapter9.0_Sorting 重复,学生版应合并为一个排序章节。本章教学定位:
学生学习目标:
面向 PPT 的逻辑重排建议:
Step 1 结论:
状态:已完成。
完成日期:2026-07-17。
动图和图解计划:
sorting-roadmap:简单排序 -> 改进插入 -> 交换分治 -> 选择堆 -> 归并。sorting-metrics:稳定性、原地性、比较次数、移动次数卡片。insertion-sort:已排序前缀、待插入元素、右移腾空。binary-insertion-sort:二分定位 + 后续移动,突出比较少但移动不变。shell-sort:按 gap 分组,逐步缩小 gap。bubble-sort:相邻比较交换,最大值冒泡到末尾。quick-partition:pivot、左右指针、不变量、一次 partition 后递归区间。quick-worst-random:有序输入退化与随机 pivot/三数取中的改进。selection-sort:选择最小值交换,稳定性反例用 25 和 25*。heap-sort:复用堆章节组件,最大值逐步放到末尾。merge-sort-split:递归拆分树。merge-sort-merge:两个有序段合并到临时数组,再拷回。sort-comparison:多维度比较矩阵,拆多页展示。代码讲解计划:
习题图解预留:
Step 2 结论:
状态:已完成。
完成日期:2026-07-17。
答案方案:
3,1,4,1,5,9,2,6,5:逐轮插入,答案显示已排序前缀和元素右移;重复元素用于稳定性说明。9..1,增量 {7,3,1}:按 gap 分组做插入排序;答案图分三页展示 gap 7、gap 3、gap 1。142,543,123,65,453,879,572,434,111,242,811,102:先建最大堆,再逐轮输出末尾;复用堆排序动画。[low, high]:在子区间上建堆,所有下标映射为 low + localIndex;答案给代码片段和下标映射图。3,1,4,1,5,9,2,6:递归拆分到单元素,再逐层 merge;答案图显示临时数组。答案页要求:
状态:已完成。
完成日期:2026-07-17。
原始文本:reference-text/chapter8_Graph.md,共 134 页。
原始内容覆盖清单:
G=(V,E),无向图、有向图。需要修正和现代化的点:
本章教学定位:
学生学习目标:
面向 PPT 的逻辑重排建议:
Step 1 结论:
状态:已完成。
完成日期:2026-07-17。
动图和图解计划:
graph-roadmap:术语 -> 表示 -> 遍历 -> 连通性 -> MST -> 最短路 -> DAG。graph-terminology:点、边、有向/无向、权重、度、入度/出度逐项高亮。complete-subgraph-path-cycle:完全图、子图、路径、环的对比图。connected-components:无向图 DFS/BFS 染色求连通分量。scc-concept:有向图强连通分量概念图。adjacency-matrix:连续网格表示,行列高亮某条边。adjacency-list:顶点数组 + 链表节点表示。dfs-graph-stack:图和递归栈/显式栈联动,visited/current/frontier 颜色统一。bfs-graph-queue:图和队列联动。prim-mst:当前树、候选边、最小边选择,与优先队列概念联动。kruskal-mst:边排序 + 并查集合并,成环边跳过。dijkstra:图 + dist/prev/settled 表格联动,逐步 relax。floyd:邻接矩阵/距离矩阵按中转点 k 更新。topological-sort:入度表 + 队列 + DAG 输出序列。critical-path:若保留关键路径,则使用 DAG 最早/最迟时间表联动。代码讲解计划:
习题图解预留:
Step 2 结论:
状态:已完成。
完成日期:2026-07-17。
答案方案:
答案页要求:
状态:基线已生成,但未达到最终质量。
完成日期:2026-07-17。
已新增或已有章节源文件:
chapters/01-introduction.qmdchapters/02-algorithm-analysis.qmdchapters/03-list.qmdchapters/03-stack-queue.qmdchapters/04-tree.qmdchapters/04-specific-trees.qmdchapters/05-hashing.qmdchapters/06-priority-queue.qmdchapters/07-disjoint-set.qmdchapters/08-graph.qmdchapters/09-sorting.qmd已更新:
_quarto.yml 导航加入新增章节。scripts/course-viz.js 增加兼容别名:treeTraversal、avlRotation、adjacencyMatrix、graphBfs、dijkstraDemo。已渲染通过:
chapters/00-visual-templates.qmdchapters/01-introduction.qmdchapters/02-algorithm-analysis.qmdchapters/03-list.qmdchapters/03-stack-queue.qmdchapters/04-tree.qmdchapters/04-specific-trees.qmdchapters/06-priority-queue.qmdchapters/07-disjoint-set.qmdchapters/08-graph.qmdchapters/09-sorting.qmd注意:
site_libs 和 .quarto/_freeze 资源,导致文件锁或缺失错误;后续必须顺序渲染。状态:已执行首轮校验,结论为“不通过,需要继续加深”。
完成日期:2026-07-17。
总体验收结论:
主要缺口:
course-viz 标准组件。hash-demo.js 到 course-viz.js 的全面迁移。下一轮必须按章节继续执行:
course-viz.js 标准组件,不在 QMD 中堆 HTML。quarto render chapters/<chapter>.qmd。状态:正式成稿初版已完成,仍需后续视觉运行时抽查与代码包补齐。
完成日期:2026-07-17。
已完成修改:
chapters/01-introduction.qmd 从骨架版重写为学生版课堂讲义。introScenarioMap、courseDependencyMap、dataStructureTriple、logicalVsPhysical、adtBoundary、selectionSortIntro、recursionStack、fibCallTree、hanoiDemo。quarto render chapters/01-introduction.qmd,渲染通过。仍需确认:
node,in-app browser 也不可用,因此本轮未完成浏览器运行时控制台验证。combinationTree、permutationTree、linkedListLength 等组件。第 1 章 Step 5 结论:
状态:按高细粒度动画标准开始重做,尚未达到 4 小时最终版。
完成日期:2026-07-17。
已完成修改:
course-branding.js 现在会把每页标题以外的内容统一放入 .slide-body,让“标题固定、正文区域垂直居中”成为默认行为。course.css:普通正文和列表字号从 0.78em 降到 0.68em,行距从 1.18 降到 1.12,并保留代码和绘图字号。incremental: true,让正文列表按行逐步出现。course-branding.js 增加 applyTeachingFragments():对标题外的普通段落、blockquote、columns、callout、列表项自动加 reveal fragment,使 bullet 之外的正文也能逐步出现;代码块和动画容器默认不自动 fragment。pre 或 .viz-demo 的 .columns。代码与 X6 动画协同展示区不能被普通正文 fragment 机制隐藏,否则 X6 可能在隐藏状态初始化,导致空白或突然跳到末尾。.code-viz-sync .no-fragment 布局:左侧使用 Quarto 标准代码块,右侧使用 .viz-demo;动画 step 中提供 line 字段,由 course-viz.js 的 syncCodeVizLine() 同步高亮左侧代码行。user-select: text,保证标题文字可选中、可复制;logo 保持不可选。Sx.next、设置 S2.next、数组/链表代价对比。callStackExecution:用 main -> f -> g 示例展示参数、局部变量、返回地址、返回值和栈帧弹出。factorialStackLinked:在同一页展示阶乘代码与递归调用栈帧。selectionSortIntro 从 5 帧粗略示意扩展为 12 帧:逐个比较、更新 min、扫描结束、交换元素、扩大已排序区间;交换阶段使用移动 token 表示轨迹。hanoiDemo:盘子大小顺序改为最大盘在底部、最小盘在顶部;3 个盘完整展示 7 次合法移动,不再跳步到错误状态。quarto render chapters/01-introduction.qmd,渲染通过。仍需继续:
selectionSortIntro 已完成第一轮细化,但后续仍可继续增强为完整排序全过程和代码行联动。introScenarioMap、dataStructureTriple、adtBoundary、fibCallTree、hanoiDemo 仍偏简略,需要按同一高标准继续返工。incremental: true 或等效逐行 fragment 机制,确保正文展示和动画步骤连贯。状态:继续向 4 小时正式版扩展,仍未最终完成。
完成日期:2026-07-17。
已完成修改:
drafts/chapter1-4h-blueprint.md,记录第 1 章 4 小时节奏、学生版语言要求、仍需补强的内容和组件目标。structureTaxonomy:用线性、树、图三栏图示比较结构差异。algorithmProperties:逐步展示输入、输出、确定性、有限性、有效性。countOnesTrace:追踪 countOnes(13) 的递归分解和返回结果。combinationTree:展示组合问题的选/不选递归树。permutationTree:展示全排列固定位置的递归树。chapters/01-introduction.qmd 执行学生版污染词扫描,未发现“学生/课堂/下载/下一页/动画/本课程/后续/我们/制作/草稿”等明显制作语气残留。quarto render chapters/01-introduction.qmd,渲染通过。仍需继续:
introScenarioMap 仍需从当前三栏示意升级为更细的场景抽象动画。adtBoundary 仍需细化成接口、表示、数组实现、链表实现和复杂度差异的多帧过程。状态:继续提升关键动画质量,仍未最终完成。
完成日期:2026-07-17。
已完成修改:
introScenarioMap 从一次性三栏示意升级为四步抽象过程:识别对象、识别关系、识别操作、得到结构。三个场景分别展示对象、关系和操作如何导向树、线性表和图。adtBoundary 从静态框图升级为 6 帧:调用者接口、行为契约、数组实现、链表实现、复杂度差异、表示隐藏。get(i)、insert(i)、已知前驱插入、find(i)。chapters/01-introduction.qmd 执行学生版污染词扫描,无匹配。quarto render chapters/01-introduction.qmd,渲染通过。仍需继续:
code-viz-sync 行高亮,形成“代码、状态、复杂度”完整闭环。状态:正式成稿初版已完成,仍需后续视觉运行时抽查、逐段代码高亮和代码包补齐。
完成日期:2026-07-17。
已完成修改:
chapters/02-algorithm-analysis.qmd,避免中断后留下缺失文件。growthRates、nestedLoopCount、binarySearchViz、maxSubarrayViz、euclidViz。quarto render chapters/02-algorithm-analysis.qmd,渲染通过。仍需确认:
第 2 章 Step 5 结论:
状态:继续向标准模板靠拢,已完成一次代码/动画联动校正。
完成日期:2026-07-17。
已完成修改:
chapters/02-algorithm-analysis.qmd 中残留的制作性表述,避免学生版出现“我们”“本课程”“下一章开始”等讲义外措辞。code-viz-sync 联动页。low、再次取中点、更新 high、命中返回、复杂度结论六步。binarySearchViz 每一步绑定对应 C++ 代码行,形成“左侧代码高亮、右侧区间变化、下方计算说明”同步讲解。quarto render chapters/02-algorithm-analysis.qmd,渲染通过。仍需继续:
状态:长版学生讲义初版完成,已覆盖原始 PPT 主体内容并可渲染。
完成日期:2026-07-17。
Step 1 教学目标:
Step 2 动图图解计划:
listAdtContract:线性表对象、位置关系、操作集合和实现选择。arraySearch:顺序查找。arrayInsertDelete:顺序表删除左移和插入右移。x6Pointer:单链表插入时两条关键指针。singlyDelete:单链表删除时寻找前驱、保存目标、重连指针。doubleCircularList:单链表、双向链表、表头结点、循环双向链表。josephusCircle:Josephus 循环链表逐次出列。polynomialAddList:两个有序多项式链表按指数归并。kthFromEnd:快慢指针查找倒数第 k 个结点。cursorListViz:游标链表的数组下标模拟指针。bucketListSort:桶排序中桶用链表实现。Step 3 习题答案:
Step 4 PPT 生成:
chapters/03-list.qmd 为长版学生讲义。quarto render chapters/03-list.qmd,渲染通过。Step 5 覆盖与质量校验:
仍需继续:
arrayInsertDelete 和 polynomialAddList 后续可以继续增强为更多轨迹动画。状态:长版学生讲义初版完成,已覆盖原始 PPT 主体内容并可渲染。
完成日期:2026-07-17。
Step 1 教学目标:
Step 2 动图图解计划:
stackModelViz:push/pop 展示后进先出。twoStacksArray:两个栈在同一数组中从两端向中间增长。parenMatchingViz:括号位置入栈、匹配出栈、错误检测。postfixEvalViz:后缀表达式求值的操作数栈。infixPostfixViz:中缀转后缀时的运算符栈和输出流。circularQueueViz:循环队列的 front、back、size 和取模。wireRoutingViz:网格布线 BFS 标号和反向路径重构。Step 3 习题答案:
rear 与 length 条件、队头公式。Step 4 PPT 生成:
chapters/03-stack-queue.qmd 为长版学生讲义。quarto render chapters/03-stack-queue.qmd,渲染通过。Step 5 覆盖与质量校验:
仍需继续:
状态:覆盖性长版学生讲义初版完成,已渲染通过。
完成日期:2026-07-17。
Step 1 教学目标:
Step 2 动图图解计划:
treeTerminologyViz:根、度、叶、层次和高度。binaryTreePropertyViz:层结点上界、满二叉树和完全二叉树数组编号。traversalOrdersViz:先序、中序、后序、层序遍历结果。preInBuildViz:由先序和中序递归构造二叉树。huffmanBuildViz:Huffman 树反复合并最小权值。Step 3 习题答案:
Step 4 PPT 生成:
chapters/04-tree.qmd 为长版学生讲义。quarto render chapters/04-tree.qmd,渲染通过。Step 5 覆盖与质量校验:
仍需继续:
状态:覆盖性长版学生讲义初版完成,已渲染通过。
完成日期:2026-07-17。
Step 1 教学目标:
leftSize 与第 k 小查询。Step 2 动图图解计划:
avlRotation 展示 AVL 插入和旋转。Step 3 习题答案:
Step 4 PPT 生成:
chapters/04-specific-trees.qmd 为长版学生讲义。quarto render chapters/04-specific-trees.qmd,渲染通过。Step 5 覆盖与质量校验:
仍需继续:
状态:长版学生讲义初版完成,已渲染通过。
完成日期:2026-07-17。
Step 1 教学目标:
Step 2 动图图解计划:
heapOperationViz:用树和数组联动展示插入上滤与删除堆顶下滤。Step 3 习题答案:
Step 4 PPT 生成:
chapters/06-priority-queue.qmd 为长版学生讲义。quarto render chapters/06-priority-queue.qmd,渲染通过。Step 5 覆盖与质量校验:
仍需继续:
状态:长版学生讲义初版完成,已渲染通过。
完成日期:2026-07-17。
Step 1 教学目标:
find、union 和在线合并操作。Step 2 动图图解计划:
disjointSetViz:展示初始集合、union、按大小合并、find 路径和路径压缩。(0,4),(3,1),... 的逐步合并动画。Step 3 习题答案:
Step 4 PPT 生成:
chapters/07-disjoint-set.qmd 为长版学生讲义。quarto render chapters/07-disjoint-set.qmd,渲染通过。Step 5 覆盖与质量校验:
仍需继续:
状态:覆盖性长版学生讲义初版完成,已渲染通过。
完成日期:2026-07-17。
Step 1 教学目标:
Step 2 动图图解计划:
adjacencyMatrix 展示邻接矩阵。graphBfs 展示 BFS。dijkstraDemo 展示 Dijkstra 图和表格联动。Step 3 习题答案:
Step 4 PPT 生成:
chapters/08-graph.qmd 为长版学生讲义。quarto render chapters/08-graph.qmd,渲染通过。Step 5 覆盖与质量校验:
仍需继续:
状态:覆盖性长版学生讲义初版完成,已渲染通过。
完成日期:2026-07-17。
Step 1 教学目标:
Step 2 动图图解计划:
Step 3 习题答案:
Step 4 PPT 生成:
chapters/09-sorting.qmd 为长版学生讲义。quarto render chapters/09-sorting.qmd,渲染通过。Step 5 覆盖与质量校验:
仍需继续:
状态:全部正式章节均已生成 HTML,并通过 Quarto 构建。
完成日期:2026-07-17。
已完成:
course-viz.css,避免脱离统一视觉样式。00-visual-templates.qmd01-introduction.qmd02-algorithm-analysis.qmd03-list.qmd03-stack-queue.qmd04-tree.qmd04-specific-trees.qmd05-hashing.qmd06-priority-queue.qmd07-disjoint-set.qmd08-graph.qmd09-sorting.qmd输出位置:
_site/chapters/00-visual-templates.html_site/chapters/01-introduction.html_site/chapters/02-algorithm-analysis.html_site/chapters/03-list.html_site/chapters/03-stack-queue.html_site/chapters/04-tree.html_site/chapters/04-specific-trees.html_site/chapters/05-hashing.html_site/chapters/06-priority-queue.html_site/chapters/07-disjoint-set.html_site/chapters/08-graph.html_site/chapters/09-sorting.html仍需继续:
hash-demo 系统逐步迁移到统一 course-viz 标准组件,接口保持不破坏。状态:第 6、8、9 章新增一批“先问题状态、再局部操作、再代码/复杂度”的逐步动画。
完成日期:2026-07-17。
新增组件:
heapBuildViz:Floyd 建堆,从最后一个内部结点向前逐步下滤,强调“子树已是堆”的循环不变式。heapSortViz:堆排序中堆区缩小、已排序区扩大的过程。topKViz:维护大小为 k 的最小堆求第 K 大,逐个输入判断保留或丢弃。kruskalViz:Kruskal 按边权选边,展示选中边、跳过成环边和并查集判断含义。topologicalSortViz:拓扑排序中入度为 0 队列、输出序列和删除出边的过程。insertionSortViz:直接插入排序中有序区、当前元素、比较、右移和插入位置。quickPartitionViz:快速排序 partition 中 i、j、pivot 和“小于 pivot 区”的边界含义。mergeSortViz:归并排序从拆分到稳定合并的层次过程。嵌入章节:
chapters/06-priority-queue.qmdchapters/08-graph.qmdchapters/09-sorting.qmd验证:
quarto render chapters/06-priority-queue.qmd,通过。quarto render chapters/08-graph.qmd,通过。quarto render chapters/09-sorting.qmd,通过。scripts/course-viz.js 执行制作性语言扫描,无匹配。仍需继续:
heapBuildViz 和 heapSortViz 后续可增强为节点轨迹移动,而不是只展示状态帧。状态:第 8 章核心图算法补入表格/图联动动画。
完成日期:2026-07-17。
新增组件:
primViz:展示 Prim 中当前生成树集合、选中边、lowcost 与 nearvex 表的变化。dijkstraRelaxViz:展示 Dijkstra 中已确定集合、当前点、dist 与 prev 表,以及松弛操作。floydViz:展示 Floyd 每轮允许一个中转点时距离矩阵如何更新。criticalPathViz:展示 AOE 网中正向计算 Ve、反向计算 Vl,并用 e=l 标识关键活动。嵌入章节:
chapters/08-graph.qmd认知拆解原则:
lowcost/nearvex。prev。验证:
quarto render chapters/08-graph.qmd,通过。chapters/08-graph.qmd 与 scripts/course-viz.js 执行制作性语言扫描,无匹配。仍需继续:
状态:第 9 章主要排序算法已补入更多细颗粒过程动画。
完成日期:2026-07-17。
新增组件:
bubbleSortViz:展示相邻比较、交换、最大值向右冒泡、已排序区形成和提前结束条件。selectionSortViz:展示每趟扫描未排序区、维护 minIndex、交换到已排序区。shellSortViz:展示 gap 分组、长距离移动、最终 gap=1 的插入排序收尾。radixSortViz:展示按个位/十位稳定分配到桶,再按桶顺序收集。嵌入章节:
chapters/09-sorting.qmd验证:
quarto render chapters/09-sorting.qmd,通过。chapters/09-sorting.qmd 与 scripts/course-viz.js 执行制作性语言扫描,无匹配。仍需继续:
状态:按“读代码查偷懒点”的要求,补入四个原先偏文字化的细过程演示。
完成日期:2026-07-17。
新增组件:
dfsTraversalViz:展示 DFS 的访问、深入、回退、再深入,以及递归栈和已访问集合。bellmanFordViz:展示初始化、逐边松弛、负边更新、提前结束和负环检测条件。tournamentSortViz:展示比较树从叶子到根逐层产生胜者,以及删除最小值后的路径重赛思想。linkedMergeViz:展示两个有序链表头结点比较、结果链表接尾部、剩余链表接入。嵌入章节:
chapters/08-graph.qmdchapters/09-sorting.qmd验证:
quarto render chapters/08-graph.qmd,通过。quarto render chapters/09-sorting.qmd,通过。scripts/course-viz.js 执行制作性语言扫描,无匹配。下一轮自检结论:
dfsTraversalViz 与 bellmanFordViz 已经达到“先过程、再代码”的认知顺序。tournamentSortViz 仍偏静态状态树,后续应把“重赛路径”抽象为通用树路径高亮组件。linkedMergeViz 仍偏状态展示,后续应复用链表插入的移动节点与改指针动画,避免学生误以为复制了结点。状态:第 7 章从短讲义扩展为“等价关系 -> 在线合并 -> 森林表示 -> 退化风险 -> 两类优化 -> 应用”的连续讲解。
完成日期:2026-07-17。
新增组件:
dsuEquivalenceViz:按原始等价对逐步合并等价类。dsuWorstCaseViz:展示简单合并如何形成高度为 n-1 的链,并同步 parent 表。dsuWeightedUnionViz:展示按大小合并时比较集合规模、挂接小树、更新根大小。dsuPathCompressionViz:展示 find(6) 先向根走,再沿途改父指针。嵌入章节:
chapters/07-disjoint-set.qmd验证:
quarto render chapters/07-disjoint-set.qmd,通过。chapters/07-disjoint-set.qmd 与 scripts/course-viz.js 执行制作性语言扫描,无匹配。状态:补入离散事件模拟,强化“优先队列按优先级服务而不是按到达顺序服务”的应用理解。
完成日期:2026-07-17。
新增组件:
priorityEventSimViz:展示最小堆保存未来事件、每次 deleteMin 取最早事件、处理时插入新事件。嵌入章节:
chapters/06-priority-queue.qmd验证:
quarto render chapters/06-priority-queue.qmd,通过。chapters/06-priority-queue.qmd 与 scripts/course-viz.js 执行制作性语言扫描,无匹配。自检修正:
graph.getCells().find(...) 回找堆节点,可能误取非堆节点。heapNodes 引用后连边。状态:验证第 5 章提供的 C++ 工程包可以独立编译运行,且 zip 与源码同步。
完成日期:2026-07-17。
验证内容:
cmake -S assets/cpp/hash-table-demo -B <tmp-build>。cmake --build <tmp-build> --config Release,通过。hash_table_demo.exe,linear probing、quadratic probing、double hashing、separate chaining 全部通过自检。assets/hash-table-demo.zip,对 CMakeLists.txt、README.md、include/hash_tables.hpp、src/main.cpp 做 SHA256 对比,均与 assets/cpp/hash-table-demo 当前源码一致。工程结论:
hash-demo.js,但键盘控制已通过 course-keyboard.js 支持 .hash-demo,短期不需要破坏性迁移。自检结论:
状态:第 6 章从“定义和代码为主”补强为“下标映射 -> 插入上滤 -> 删除下滤 -> 建堆 -> 应用”的连续图解。
完成日期:2026-07-17。
新增组件:
heapArrayMappingViz:展示完全二叉树按层映射到 1-based 数组,以及 parent/left/right 公式。heapInsertDetailedViz:展示插入时新元素、父结点下移、空洞上移、最终落位。heapDeleteDetailedViz:展示删除堆顶时取答案、末尾元素暂存、选择较大孩子、空洞下移、最终落位。topKCompareViz:对比全量最大堆与大小为 k 的最小堆。嵌入章节:
chapters/06-priority-queue.qmd验证:
quarto render chapters/06-priority-queue.qmd,通过。chapters/06-priority-queue.qmd 与 scripts/course-viz.js 执行制作性语言扫描,无匹配。自检修正:
x 或 last 仍在外部等待最终落位。状态:第 4.1 章补入 BST / Indexed BST / m-way / B-tree / B+ tree 的关键认知动画。
完成日期:2026-07-17。
新增组件:
bstFindViz:展示 BST 查找 37 时每一步比较和路径选择。bstDeleteCasesViz:展示删除叶结点、删除单子树结点、删除双子树结点并用后继替换。indexedBstSelectViz:展示 leftSize 如何支持第 k 小查询,以及进入右子树时如何更新 k。mwaySearchViz:展示多 key 结点如何把值域划分为多个孩子区间。btreeBplusCompareViz:展示 B-tree 和 B+ tree 的数据位置差异、叶子链表与范围查询。嵌入章节:
chapters/04-specific-trees.qmd验证:
quarto render chapters/04-specific-trees.qmd,通过。chapters/04-specific-trees.qmd 与 scripts/course-viz.js 执行制作性语言扫描,无匹配。状态:补入树章节中原先偏文字化的存储选择与线索二叉树过程。
完成日期:2026-07-17。
新增组件:
binaryStorageCompareViz:对比完全二叉树数组存储、稀疏树数组空洞和链式表示。threadedTreeViz:展示中序序列、E 的前驱/后继线索,以及 first/next 遍历思路。嵌入章节:
chapters/04-tree.qmd验证:
quarto render chapters/04-tree.qmd,通过。chapters/04-tree.qmd 与 scripts/course-viz.js 执行制作性语言扫描,无匹配。状态:补入杨辉三角队列生成过程,完善队列应用链条。
完成日期:2026-07-17。
新增组件:
pascalQueueViz:展示队列保存上一行、按 FIFO 顺序生成下一行、空间为 O(n) 的过程。嵌入章节:
chapters/03-stack-queue.qmd验证:
quarto render chapters/03-stack-queue.qmd,通过。chapters/03-stack-queue.qmd 与 scripts/course-viz.js 执行制作性语言扫描,无匹配。状态:补入动态连通性和 Kruskal 两个应用场景的联动动画。
完成日期:2026-07-17。
新增组件:
dsuConnectivityViz:展示加边合并连通块、查询时比较代表元。dsuKruskalViz:展示 Kruskal 按边权检查边、选边合并集合、跳过成环边。嵌入章节:
chapters/07-disjoint-set.qmd验证:
quarto render chapters/07-disjoint-set.qmd,通过。chapters/07-disjoint-set.qmd 与 scripts/course-viz.js 执行制作性语言扫描,无匹配。状态:公共可视化脚本多轮扩展后,完成一次全章节顺序渲染和全局语言扫描。
完成日期:2026-07-17。
渲染章节:
00-visual-templates.qmd01-introduction.qmd02-algorithm-analysis.qmd03-list.qmd03-stack-queue.qmd04-tree.qmd04-specific-trees.qmd05-hashing.qmd06-priority-queue.qmd07-disjoint-set.qmd08-graph.qmd09-sorting.qmd验证结果:
quarto render chapters/<chapter>.qmd,全部通过。scripts/*.js 执行制作性语言与 TODO/FIXME 扫描,无匹配。当前密度巡检:
01-introduction.qmd:56 页,15 个标准动画引用,16 个代码块,6 个习题/思考页。02-algorithm-analysis.qmd:46 页,8 个标准动画引用,24 个代码块,8 个习题/思考页。03-list.qmd:46 页,11 个标准动画引用,15 个代码块,5 个习题/思考页。03-stack-queue.qmd:35 页,7 个标准动画引用,8 个代码块,4 个习题/思考页。04-tree.qmd:49 页,5 个标准动画引用,17 个代码块,6 个习题/思考页。04-specific-trees.qmd:35 页,8 个标准动画引用,8 个代码块,5 个习题/思考页。05-hashing.qmd:66 页,使用独立 hash-demo 动画系统,3 个代码块,11 个习题/思考页。06-priority-queue.qmd:26 页,8 个标准动画引用,6 个代码块,3 个习题/思考页。07-disjoint-set.qmd:19 页,5 个标准动画引用,7 个代码块,3 个习题/思考页。08-graph.qmd:49 页,11 个标准动画引用,9 个代码块,4 个习题/思考页。09-sorting.qmd:42 页,9 个标准动画引用,11 个代码块,4 个习题/思考页。下一轮建议:
自检修正:
继续项:
状态:补入 B-tree 最容易混淆的插入分裂与删除再平衡过程。
完成日期:2026-07-17。
新增组件:
btreeInsertSplitViz:展示阶为 4 的 B-tree 中插入 25、叶子溢出、提升中间 key、父结点接收、根分裂树高增加。btreeDeleteRebalanceViz:展示删除叶子 key、下溢、向兄弟借位、无法借位时合并、根变矮。嵌入章节:
chapters/04-specific-trees.qmd验证:
quarto render chapters/04-specific-trees.qmd,通过。chapters/04-specific-trees.qmd 与 scripts/course-viz.js 执行制作性语言扫描,无匹配。状态:第 2 章原有习题答案保留,并补入图解化计数过程。
完成日期:2026-07-17。
新增组件:
selectKthCountViz:展示 selectKth 只执行前 k 轮选择排序,以及比较次数如何逐轮减少。loopGrowthExerciseViz:用矩形、几何级数和嵌套求和图形解释循环复杂度。matrixMultiplyCountViz:展示矩阵乘法中一个结果格子的 n 次累加,以及 n^2 个格子带来的 n^3 总次数。嵌入章节:
chapters/02-algorithm-analysis.qmd验证:
quarto render chapters/02-algorithm-analysis.qmd,通过。chapters/02-algorithm-analysis.qmd 与 scripts/course-viz.js 执行制作性语言扫描,无匹配。自检修正:
状态:已补入学生可直接使用的全课程 C++ 语法工具箱。
完成日期:2026-07-17。
新增内容:
nullptr、STL 容器、STL 适配器、auto、比较器、std::optional 与 enum class。验证:
quarto render chapters/01-introduction.qmd,通过。chapters/01-introduction.qmd 执行制作性语言扫描,无匹配。状态:已补强并查集最容易跳步的实现表示和复杂度认知桥梁。
完成日期:2026-07-17。
新增组件:
dsuParentTraceViz:同步展示操作、parent 数组、森林形态与等价类变化。dsuAmortizedCompareViz:用同一组 find 路径长度对照简单合并、按秩合并、路径压缩和二者结合。嵌入章节:
chapters/07-disjoint-set.qmd验证:
quarto render chapters/07-disjoint-set.qmd,通过。chapters/07-disjoint-set.qmd 与 scripts/course-viz.js 执行制作性语言扫描,无匹配。状态:已把关键练习答案从文字过程升级为逐帧图解。
完成日期:2026-07-17。
新增组件:
heapInsertExerciseViz:最小堆插入 3,展示末尾放置、逐级比较、父结点下移、空洞上移和最终放入。heapCheckExerciseViz:判断数组是否为最大堆,展示只检查内部结点以及每个父子关系的局部约束。嵌入章节:
chapters/06-priority-queue.qmd验证:
quarto render chapters/06-priority-queue.qmd,通过。chapters/06-priority-queue.qmd 与 scripts/course-viz.js 执行制作性语言扫描,无匹配。状态:已把循环队列 rear + length 公式练习改为逐帧图解。
完成日期:2026-07-17。
新增组件:
circularQueueExerciseViz:展示由 rear 和 length 反推 front 的代入、加模长、取模、跨尾读取、队空和队满判定。嵌入章节:
chapters/03-stack-queue.qmd验证:
quarto render chapters/03-stack-queue.qmd,通过。chapters/03-stack-queue.qmd 与 scripts/course-viz.js 执行制作性语言扫描,无匹配。状态:本轮新增内容已通过全章节构建和交付语言扫描。
完成日期:2026-07-17。
验证:
quarto render chapters/<chapter>.qmd,全部通过。scripts/*.js 执行制作性语言与 TODO/FIXME 扫描,无匹配。node 命令,未执行 node --check scripts/course-viz.js。当前密度巡检:
01-introduction.qmd:57 页,15 个标准动画引用,17 个代码块,6 个习题/思考页。02-algorithm-analysis.qmd:46 页,8 个标准动画引用,24 个代码块,10 个习题/思考页。03-list.qmd:46 页,11 个标准动画引用,17 个代码块,5 个习题/思考页。03-stack-queue.qmd:35 页,9 个标准动画引用,11 个代码块,4 个习题/思考页。04-tree.qmd:49 页,7 个标准动画引用,20 个代码块,6 个习题/思考页。04-specific-trees.qmd:35 页,8 个标准动画引用,12 个代码块,5 个习题/思考页。05-hashing.qmd:66 页,使用独立 hash-demo 动画系统,17 个代码块,11 个习题/思考页。06-priority-queue.qmd:27 页,11 个标准动画引用,7 个代码块,3 个习题/思考页。07-disjoint-set.qmd:21 页,9 个标准动画引用,7 个代码块,3 个习题/思考页。08-graph.qmd:49 页,11 个标准动画引用,13 个代码块,4 个习题/思考页。09-sorting.qmd:42 页,9 个标准动画引用,12 个代码块,4 个习题/思考页。状态:本轮根据“再检查”要求完成更细的构建、语言、脚本、资源和代码包复查。
完成日期:2026-07-17。
修正:
chapters/01-introduction.qmd 中“算法好不好”改为“算法效率与资源代价”,正式表述更稳定。scripts/course-viz.js 中未被正式章节引用的旧 recursionStack 组件,避免低标准旧动画留在脚本中。验证:
quarto render chapters/<chapter>.qmd,全部通过。scripts/*.js 制作性语言与 TODO/FIXME 扫描,无匹配。data-viz 引用,108 个唯一引用均有 registry 条目。hash-table-demo.zip 资源存在,全部存在。course-viz.js、hash-demo.js、course-branding.js、course-keyboard.js、course-branding-data.js,全部通过。_site/chapters/*.html,无 Unknown viz、SyntaxError、ReferenceError、TODO、FIXME。assets/cpp/hash-table-demo,输出 all hash table demos passed。assets/hash-table-demo.zip 并与源码 SHA256 对比,zip 与源码一致。当前密度巡检:
01-introduction.qmd:57 页,15 个标准动画引用,17 个代码块,6 个习题/思考页。02-algorithm-analysis.qmd:46 页,8 个标准动画引用,24 个代码块,10 个习题/思考页。03-list.qmd:46 页,11 个标准动画引用,17 个代码块,5 个习题/思考页。03-stack-queue.qmd:35 页,9 个标准动画引用,11 个代码块,4 个习题/思考页。04-tree.qmd:49 页,7 个标准动画引用,20 个代码块,6 个习题/思考页。04-specific-trees.qmd:35 页,8 个标准动画引用,12 个代码块,5 个习题/思考页。05-hashing.qmd:66 页,使用独立 hash-demo 动画系统,17 个代码块,11 个习题/思考页。06-priority-queue.qmd:27 页,11 个标准动画引用,7 个代码块,3 个习题/思考页。07-disjoint-set.qmd:21 页,9 个标准动画引用,7 个代码块,3 个习题/思考页。08-graph.qmd:49 页,11 个标准动画引用,13 个代码块,4 个习题/思考页。09-sorting.qmd:42 页,9 个标准动画引用,12 个代码块,4 个习题/思考页。状态:已建立可重复运行的页面/帧逻辑审计流程,并完成第一轮素材化和开场逻辑补强。
完成日期:2026-07-17。
新增文件:
scripts/audit-frame-logic.ps1:从章节 QMD 与 course-viz.js 还原每页标题、动画组件、估计帧数、代码块、公式、表格、bullet 与风险标记。drafts/frame-logic-audit.md:当前全章节页面/帧逻辑审计报告。assets/external/icons/*.svg:从 Simple Icons CDN 下载的 Redis、PostgreSQL、Neo4j、Kafka、Linux、C++、Python、JavaScript 图标素材。assets/external/SOURCES.md:外部素材来源、授权和链接记录。已补强页面:
chapters/01-introduction.qmd:在“这些知识会在哪里用到”加入行业系统素材带;拆分“全课程 C++ 语法”长表,增加读代码顺序。chapters/03-stack-queue.qmd:在开场加入函数调用、Linux、Kafka、JavaScript 事件循环等视觉案例。chapters/05-hashing.qmd:在“大规模系统中的散列”加入 Redis、PostgreSQL、Kafka、Python 等视觉案例。chapters/06-priority-queue.qmd:在开场加入 Linux 调度、Kafka 事件、PostgreSQL Top-N、C++ STL 等视觉案例。chapters/08-graph.qmd:在开场加入 Neo4j、Linux、Kafka、PostgreSQL 等关系网络案例。审计结论:
dense-no-viz、code-no-viz、exercise-no-viz、long-table、viz-short。code-no-viz 中部分是代码页,需要之后继续接入代码走读/行号同步;散列代码页已通过 data-code-walk 处理,审计脚本已识别代码走读。验证:
quarto render chapters/<chapter>.qmd,通过。_site/chapters/*.html 无 Unknown viz、SyntaxError、ReferenceError、未解析 fenced div。状态:已完成一轮跨章节习题答案图解化,把“直接给答案”的页面改为先展示过程、再落到公式或代码结论。
完成日期:2026-07-17。
新增或接入组件:
tripleLoopOneExerciseViz、tripleLoopTwoExerciseViz、nestedSumExerciseViz、whileLoopExerciseViz。arrayDeleteMoveExerciseViz、singlyDeleteExerciseViz、polynomialAddExerciseViz、reverseListExerciseViz。printBufferExerciseViz、stackCapacityExerciseViz、rotateLeftExerciseViz。leafFormulaExerciseViz、completeTreeMaxExerciseViz、generalTreeLeavesExerciseViz、countLeavesExerciseViz、mirrorTreeExerciseViz、huffmanPropertyExerciseViz。hash-demo;新增 hashAslExerciseViz 解释成功查找 ASL。heapSortComplexityExerciseViz。dsuEquivalenceExerciseViz、dsuPathExerciseViz、dsuKruskalExerciseViz。connectedGraphExerciseViz、badShortestGreedyExerciseViz、topologicalExerciseViz、mstCompareExerciseViz。insertionSortExerciseViz、secondPassSortExerciseViz、mergeSortExerciseViz、heapStabilityExerciseViz。审计脚本更新:
scripts/audit-frame-logic.ps1 现在同时识别 data-viz 与哈希章节使用的 data-demo。data-code-walk、code-step-notes、code-viz-sync 继续作为代码页可视化支持信号。验证:
course-viz.js、hash-demo.js、course-branding.js、course-keyboard.js、course-branding-data.js,全部通过。02-algorithm-analysis.qmd、03-list.qmd、04-tree.qmd、05-hashing.qmd、08-graph.qmd、09-sorting.qmd,全部通过。drafts/frame-logic-audit.md,本轮目标习题页均为 ok。状态:已把全章节代码页接入字符串锚点式 data-code-walk-match,并建立原始 PPT 主题覆盖审计。
完成日期:2026-07-17。
新增或强化的机制:
scripts/resolve_code_walks.py:使用代码中的字符串锚点自动生成高亮行号,避免手工硬编码行号漂移。scripts/audit_reference_coverage.py:对照 reference-text/ 中的原始 PPT 文本,逐章检查核心主题覆盖。scripts/audit-frame-logic.ps1:补充识别相邻习题答案页,避免把题面页误报为缺少图解。drafts/reference-coverage-audit.md:记录每章原始页数、新稿页数和主题覆盖结果。drafts/final-course-validation.md:记录本轮最终验收命令、结果和残余风险。当前验证结果:
data-code-walk-match 的章节通过 resolve_code_walks.py --check。PASS。dense-no-viz、code-no-viz、exercise-no-viz 页面行。assets/cpp/hash-table-demo 和 assets/hash-table-demo.zip 解包后均能编译运行;zip 在过长中文路径下触发 MSBuild 路径问题,在短 ASCII 路径下通过。后续章节或重构必须保持:
data-code-walk-match,不要手写行号。scripts/audit_reference_coverage.py 的主题词表。hash-demo,题面页可以由紧随其后的答案页支撑。drafts/final-course-validation.md 中列出的 gate。