docs: unify algorithm explanation and update teaching video

This commit is contained in:
Yaossg 2026-10-16 17:50:08 +08:00
parent a1e43bb679
commit dd5fab9540
15 changed files with 1680 additions and 1050 deletions

View file

@ -1,7 +1,12 @@
# 史莱姆搜索科普视频 · Manim / uv
以 `show/` 的教学实现与实测为基础。中文字幕、深色背景、16:9;绘图使用 Manim Community 的 Cairo 渲染器。
当前版本是带字幕的动画初稿,没有配音或背景音乐;渲染同时输出口播稿和可用于剪辑的 SRT 字幕。
2026-10-16 版依据统一正文 DOCUMENT.md:先讲单区块的 Random 代码与完整坐标公式,
再讲 CPU → CUDA 按 seed 分工 → 按坐标分工 → outer sum。
后半段先建立有效种子的反推关系,再引入唯一的 5×5 窗口,
沿 p = 218767、m = 40302 的路径求出并验证世界种子 15959335054446。
章节顺序见 [STORYBOARD.md](STORYBOARD.md)。
当前输出是带字幕的动画,没有配音或背景音乐;同步生成完整口播稿和 SRT 字幕。
## 环境与运行
@ -20,6 +25,10 @@ FFmpeg 由 `imageio-ffmpeg` 提供,渲染脚本会自动配置。数学公式
公式采用 Computer Modern 数学字体,指数、下标、取整分式与集合符号均由 LaTeX 排版。
渲染优先使用系统的 `latex`、`dvisvgm`;本环境的本地 TeX Live 已解包到 `.native/texlive`,随项目目录保留。
也可通过 `SLIME_TEX_ROOT` 指向相同目录结构的本地 TeX Live,`tex_environment.py` 会配置路径并构建 `latex.fmt`。
本地解包版使用 `ls-R` 数据库查找,避免 WSL 下重复遍历目录;需要保留解包环境中的数据库。
本地转换器跳过 PostScript specials,保留 TeX 字形轮廓和 Manim 的原始 SVG 分组;
本工程公式没有 PostScript 插图,紧边界由字形计算,避免依赖本地 Ghostscript 设备初始化。
系统安装的 TeX / dvisvgm 使用正常转换路径。
换一台机器时,请按上面的系统安装命令补齐工具链。
中文字体优先使用 Microsoft YaHei / Noto Sans CJK SC / WenQuanYi Zen Hei。
WSL 会尝试使用 `/mnt/c/Windows/Fonts/msyh.ttc`,也可设置 `SLIME_FONT_PATH` 为已有中文字体路径。
@ -31,9 +40,9 @@ WSL 会尝试使用 `/mnt/c/Windows/Fonts/msyh.ttc`,也可设置 `SLIME_FONT_P
## 场景与输出
- `SlimeFilm`:七个章节的完整动画。
- `ParallelEpisode`:问题、CPU、CUDA、固定坐标、outer sum。
- `RandomEpisode`:Random 性质、高位解析、结尾。
- `SlimeFilm`:15 个章节的完整动画。
- `ParallelEpisode`:任务、CPU、CUDA 按 seed 分工、按坐标分工、outer sum。
- `RandomEpisode`:Random 状态公式、归一化与窗口、low18、类缓存、预计算、组 mask、θ 高位求解、完整验证与效果。
```bash
uv run python render.py --scene ParallelEpisode --quality preview
@ -50,16 +59,27 @@ uv run python render.py --scene RandomEpisode --quality final
`scenes.py` 定义动画、字幕与停留时间。每个 `say()` 同时记录字幕时间轴,修改口播时请在这里修改。
字幕支持中文与 LaTeX 行内公式混排:`say(caption, seconds, display=r"中文 $2^{48}$")`。中文使用 Pango,`$...$` 内的公式使用 `MathTex`;`caption` 保留口播文字,供 SRT 与配音稿使用。时间轴同时保存实际画面用的 `display`,便于核对。
固定坐标与 outer sum 两章包含原始坐标公式分组、Java 回绕语义、广播相加的矩阵恒等式及 2×3 数值示例;完整推导见 [OUTER_SUM.md](OUTER_SUM.md)。
Random 章节逐步推导 XOR 常量的 35 位边界、输出高位平移、模 5 条件与回绕区间,并用数值例子解释 upper13 求解。完整数学与 effective seed 的区别见 [RANDOM_PROPERTIES.md](../RANDOM_PROPERTIES.md)。公式独立核验:`uv run python check_lower35.py`(逐个核对全部 8192 个高位,另核对完整 25 格区间求交)。
`data/benchmarks.json` 是渲染所用的固定数据快照,保留来源文件与 SHA256,避免一次视频渲染混入不同批次数据。
A/B/C 来自 `../results/latest.json`。
前半段保留 CPU/CUDA 与计算复用的演进,A/B/C 各自比较相同任务。
后半段沿当前算法的数据流讲解,每章先说明解决的问题,再解释条件与实现,最后展示效果。
不加入固定 seed 的坐标余数对分支、未接入的补扫算法或全世界成本外推。
数学与当前实现说明见 [最终算法数学原理](../DOCUMENT.md)。
当前候选生成只覆盖普通分支;完整 Java 验证保证输出正确,尚未补回依赖拒绝重抽的全部解。
- A:65536 seed ×257²,CPU 搜索时间 / GPU scan。
- B:65536 seed ×4097²,只比较相同工作量的 02/03 kernel。
- C:1 seed ×8193²,重新测量 03,再比较 04 kernel。
后半段与 [统一正文](../DOCUMENT.md) 使用同一条数值路径。公式与案例分开展示,案例使用黄色标签与引用线;不再使用临时假设的坐标项、输出差或高位参数。θ 与坐标项 T 分开,11 在基准状态中的去向单独展开。
不同组不连乘加速比。GPU diagram 简化线程数量;outer sum 图示为 5×5,实际 block 为 16×16。
Random 的高 16 位等价性质覆盖重抽路径,但后续首次输出候选模型仍可能漏掉依赖拒绝重抽的解。
独立筛轴章节已删除,历史结果见 [试错报告](../../research/XZ_FILTER_TRIAL_REPORT.md)。含旧章节的渲染视频、字幕与口播稿已删除;需用当前源码重新渲染。
最终视频须在配音、节奏审核后再作为发布版本。
`data/benchmarks.json` 冻结测量数据和本次实际使用的来源 SHA256:
- A/B/C:CPU → GPU、按坐标分工、outer sum;不同负载不连乘。
- ROOT:已知 5×5 窗口,262144 → 84 个低位根,11010048 → 36 个输出差幸存者。
- P/G:同一窗口预计算 0.323584 → 0.268288 ms,成组筛选再降到 0.156672 ms;两步合计约 2.07×。
- D:同窗口的输出差过滤+区间求交,63.750 → 约 0.324 ms;这是组合效果。
数据文件保留 E/F/CLI 等历史测量,当前影片不展示另一批坐标或 CLI 案例。窗口演算最终展示 25 格完整原始输出表,与开头 Java 代码相互对应。
P/G 包含每轮公共项准备,不包含低位根生成、初始化和传输。
不能把不同输入、版本或计时范围的倍数连乘为应用总加速。
`verify.py` 核对章节顺序、口播导出、字幕时间、来源哈希和各项实测数据,并逐帧解码 MP4。
数学式与同窗口演算另用 `uv run python check_lower35.py` 核验,包含完整 25 格输出、组掩码及全部 8192 个高位对照。
正式输出为 `output/SlimeFilm-final.mp4`;同名 `.srt`、`.narration.md`、`.timeline.json`、
`.render.json` 与 `-contact.png` 同步生成。