UNIT 41 / 78 · W05-5
开始唯一主项目的顺序正确性
本单元预计 6 核心小时。可以分成多个学习时段,按完整小节推进;停下来时留下输入、命令、结果和下一步。
时间包含阅读、编码与检查,是学习预算而非期限。打开此页只保存阅读位置,不代表通过验收。
开始本单元前
固定种子输入的独立小节 →
只读这一独立小节并按已给步骤记录引擎、seed和分布,再写本人的小规模随机检查;此处不要求提前学习26整章或测量。
先知道自己在观察什么
复习空、重复及无解输入如何形成独立期望,把方法用于整数求和。
重读局部状态与共享状态边界;本次先完成顺序 oracle,线程版本以后接上。
先备不清楚时,沿章节入口补读;不要依赖翻过页数判断进度。
本单元另列的补授
以下时间加在原单元预算之外;完成对应读法后再进入依赖它的任务。
- 固定种子、引擎与分布 → · 20min
- 项目CMake、CTest与Threads构建选项 → · 15min
先留下自己的预测或独立尝试
运行前手推 abba 左端点不后退,观察边界检查怎样独立于实现;不把该算法复制成主项目。
窗口左边界只能向右 →源码下载与编译入口
下载到自己的练习目录。按本节给出的完整命令编译;多文件与driver要求见原任务。需要时查阅文件保存与编译操作 →
15-b.cpp先保存预测,再核对正文标明的预期或诊断。完整构建、多文件与设备实验按原任务命令执行。
通过一个变动看清原因
在副本增加 dvdf 与 tmmzuxt 两个窗口输入,同时保留 abba、空输入检查。
修改后应观察到什么
最长无重复长度分别为3和5,abba仍为2。
换一组条件,独立解决
在已有 Reduction Lab learner starter 中只实现顺序合同:最多一百万个整数,每项在±一百万内,返回精确 int64_t 总和;其他未做阶段仍保留未完成状态。
用这些条件检查自己的实现
- []为0、[3,-1,3,0]为5、[1000000,-1000000]为0;越界值和过长输入拒绝。
- 本人增加固定种子的小规模测试,与独立手算/朴素oracle比对;不宣称尚未完成的并行测试通过。
接回贯穿练习
Reduction Lab:仅顺序正确性 →
完整G0实际通过后在本人learner starter开始;后续并行/测量阶段按原单元逐步完成。
用证据决定是否进入下一单元
- 为什么这个输入界保证整数总和不会溢出?
- 顺序正确性通过后,下一步要保护哪些线程借用?
本单元的验收依据
保存本人顺序实现、合同、边界测试和构建记录;只记录已完成阶段,整套starter未完成项不伪装为通过。
留下自己的代码或推演、测试输入、真实输出和仍不确定的问题。未达到要求时,下一次继续本单元。