Skip to content

feat(labs): ch8/ch9 新增 15 道公开题库改编编程题 - #185

Merged
AzenAnn merged 1 commit into
mainfrom
lab/ch08-ch09-exercise-expansion
Sep 14, 2026
Merged

AzenAnn merged 1 commit into
mainfrom
lab/ch08-ch09-exercise-expansion

Conversation

@RichardYi-SYSU

Copy link
Copy Markdown
Collaborator

概要

为第 8 章(查找)与第 9 章(散列与索引)各补齐一批 Program 型 Lab,题目量级对齐其他章节(ch8:4→12;ch9:3→10),全部改编自公开题库(洛谷 / LeetCode / 牛客),按课程 stdio 协议重述题面、独立编写参考实现与测试,不复制来源站点代码或隐藏数据。

ch8 查找(+8)

Lab 来源 挂钩教材
08E02 折半查找首次出现位置 洛谷 P2249 8.1 折半查找
08E03 折半查找首末位置 LeetCode 34 8.1 练习 4(边界更新)
08E04 数对计数 A−B=C 洛谷 P1102 8.1 折半应用
08E05 有序数组转平衡 BST LeetCode 108 8.1 判定树(钉死左中点口径)
08E06 验证二叉搜索树 LeetCode 98 8.2 定义与不变量
08E07 二叉搜索树的最近公共祖先 LeetCode 235 8.2 查找
08E08 平衡二叉树判断 LeetCode 110 8.3 AVL 平衡条件
08E09 【模板】普通平衡树 洛谷 P3369 8.3 手写带 size 的 AVL(核心题)

ch9 散列与索引(+7)

Lab 来源 挂钩教材
09E02 去重保首次 洛谷 P4305 9.2 从关键字到地址 / 链地址法
09E03 点名状态机 洛谷 P2580 9.2 存在性查询
09E04 学生信息查询 牛客 KY53(王道机试指南) 9.2 散列函数设计
09E05 设计哈希映射·线性探测 LeetCode 706 9.2 开放定址 + 墓碑删除(专杀用例 50 分)
09E06 设计哈希集合·链地址 LeetCode 705 9.2 链地址法(B=3 极端冲突)
09E07 字符串哈希计数 洛谷 P3370 9.2 散列函数构造
09E08 最长连续序列 LeetCode 128 9.2 散列表与有序结构的取舍

配套改动:ch8 三篇文章与 00-overview、ch9 散列文章的"配套理论题与 Lab / 配套 Labs"清单同步加入链接。9.1 B 树部分公开 OJ 无合适完整实现题(已检索确认),编程覆盖维持 ch5 E-05-26/27 与 P-09-01 现状,未强行自拟。

验证证据(按 Lab 指南 §10)

  • 环境:macOS (darwin 25.5.0, arm64) · Node v25.8.1 · pnpm 11.1.1 · Apple clang 21.0.0(g++ 别名,C++17)
  • 每题 lab:validatelab:verify 均通过:solution=100、student 编译可过且非满分(0~55 分不等)、expectedStable/oracle 无漂移;每题 6~7 个用例、分值合计 100,覆盖 sample/normal/boundary/stress(固定种子生成,单文件 ≤ 3MB,未超仓库既有压力数据惯例)
  • 08E09 手写 AVL:额外 200 组随机小规模数据暴力对拍全对;压力用例含 5×10⁴ 次升序插入(普通 BST 必超时)
  • 08E06 含"孙辈违规、父子局部合法"用例;09E05 含"删除聚集区中间键后查链尾"用例(直接清空槽的写法 WA)
  • pnpm run validate(content + typecheck + lint)、test:tree-demostest:bootstraptest:lab-docstest:discoveryvitepress buildcheck:site(475 页 HTML、319 个 Lab、无死链)全部通过

未执行项与原因

  • tests/lab-tools.test.mjs 中 1 个用例("single stdio case feedback cannot replace a full Task grade…",期望 45 得 0)在 main 干净 worktree 上同样失败,属既有环境问题,与本次改动无关;链条中位于该测试之后的步骤(lab-docs / discovery / build / check:site)已单独补跑通过
  • test:pages(Playwright)未跑:本次不涉及侧栏范围、样式或 Pages base 变更
  • lab:pack 学生包抽查未做,可在 Review 阶段补

Review 提示

  • Reviewer 可从任一新 Lab 复现:cd labs/chapter-08/exercise/E-08-09-balanced-tree-template && make doctor && make run && make score,或仓库根 pnpm lab:verify -- <lab路径>
  • 08E05 的判定树口径钉死为"取左中点 mid=l+(r−l)/2",README/样例/测试三方一致

ch8 查找 4→12:折半首现/首末位置/数对计数(改编洛谷 P2249、P1102、
LeetCode 34)、判定树构造与 BST 校验/LCA(LeetCode 108/98/235)、
平衡判断与手写 AVL 模板(LeetCode 110、洛谷 P3369)。

ch9 散列与索引 3→10:去重保首次、点名状态机、学生信息查询
(洛谷 P4305、P2580、牛客 KY53 王道机试)、线性探测哈希映射与
链地址哈希集合(LeetCode 706/705,墓碑删除与冲突对照)、字符串
哈希计数(P3370)、最长连续序列(LeetCode 128)。

全部题目改编自公开题库,按课程 stdio 协议重述并独立编写参考实现
与测试;15 题 validate/verify 全过(solution=100、starter 可编译
非满分、oracle 无漂移);教材文章配套 Lab 清单同步更新。
@AzenAnn
AzenAnn merged commit c2b40ba into main Sep 14, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants