第 5 章 与算法成为好朋友的七个要点
从有限明确步骤、机械执行、典型算法、处理速度、技巧、数列规律和纸上推演掌握算法。
直觉起点
、、、、共同构成本页的观察坐标。算法是有限、明确、可机械执行的问题求解步骤;掌握典型模式后仍要结合输入规模估算成本,用规律和数据减少工作,并先在纸上证明过程再编码。
学习时不要背孤立名词。先预测一个输入进入系统后会改变哪些位、寄存器、内存单元、控制状态、对象、数据行或网络消息,再用最小实验逐层核对。只看到最终输出会丢失中间因果,无法解释边界与失败。
六阶段运行链
1. 定义输入输出
先把设备现象还原为输入、运算、输出,再分别登记指令和数据的数字编码。新硬件可以改变速度与界面,却不能省略输入条件、状态转换和可观察结果。
实验从“定义输入输出”开始:固定初始状态,先预测寄存器、内存、对象、数据表或网络消息的下一步变化;每次只改变一个输入、容量、时序、地址、密钥或依赖条件,在首个偏离点保存证据。恢复后重放相同样本,不能只凭最终界面判断正确。
2. 写出有限步骤
算法必须有限、明确并可机械执行。用正常、空输入、最大输入和反例在纸上回放,统计关键操作次数;优化只能减少成本,不能悄悄改变输出或终止条件。
实验从“写出有限步骤”开始:固定初始状态,先预测寄存器、内存、对象、数据表或网络消息的下一步变化;每次只改变一个输入、容量、时序、地址、密钥或依赖条件,在首个偏离点保存证据。恢复后重放相同样本,不能只凭最终界面判断正确。
3. 选择典型模式
选择典型模式 必须放回“定义输入输出、写出有限步骤、选择典型模式、估算操作次数、利用数据规律、纸上回放验证”的完整运行链,明确输入编码、状态变化、接口边界、失败出口和恢复条件。
实验从“选择典型模式”开始:固定初始状态,先预测寄存器、内存、对象、数据表或网络消息的下一步变化;每次只改变一个输入、容量、时序、地址、密钥或依赖条件,在首个偏离点保存证据。恢复后重放相同样本,不能只凭最终界面判断正确。
4. 估算操作次数
估算操作次数 必须放回“定义输入输出、写出有限步骤、选择典型模式、估算操作次数、利用数据规律、纸上回放验证”的完整运行链,明确输入编码、状态变化、接口边界、失败出口和恢复条件。
实验从“估算操作次数”开始:固定初始状态,先预测寄存器、内存、对象、数据表或网络消息的下一步变化;每次只改变一个输入、容量、时序、地址、密钥或依赖条件,在首个偏离点保存证据。恢复后重放相同样本,不能只凭最终界面判断正确。
5. 利用数据规律
算法必须有限、明确并可机械执行。用正常、空输入、最大输入和反例在纸上回放,统计关键操作次数;优化只能减少成本,不能悄悄改变输出或终止条件。
实验从“利用数据规律”开始:固定初始状态,先预测寄存器、内存、对象、数据表或网络消息的下一步变化;每次只改变一个输入、容量、时序、地址、密钥或依赖条件,在首个偏离点保存证据。恢复后重放相同样本,不能只凭最终界面判断正确。
6. 纸上回放验证
算法必须有限、明确并可机械执行。用正常、空输入、最大输入和反例在纸上回放,统计关键操作次数;优化只能减少成本,不能悄悄改变输出或终止条件。
实验从“纸上回放验证”开始:固定初始状态,先预测寄存器、内存、对象、数据表或网络消息的下一步变化;每次只改变一个输入、容量、时序、地址、密钥或依赖条件,在首个偏离点保存证据。恢复后重放相同样本,不能只凭最终界面判断正确。
核心机制深挖
算法是有限、明确、可机械执行的问题求解步骤;掌握典型模式后仍要结合输入规模估算成本,用规律和数据减少工作,并先在纸上证明过程再编码。 本页统一登记六类证据:输入与编码、当前状态、转换规则、接口所有者、首个失败、恢复结果。硬件页观察引脚和寄存器,程序页观察控制流与数据结构,网络页观察逐层地址和消息,系统页观察阶段文档与运营状态;对象不同,证据方法一致。
本页签发不变量是:算法对所有约定输入都会在有限步骤后结束并给出正确输出;优化前后结果等价,成本估算依据操作次数和输入规模而不是主观快慢。。先预测再运行能迫使学习者明确因果;正常样本证明基本路径,边界样本暴露容量和时序,失败样本确定责任边界,恢复样本证明系统可以回到受控状态。
2015 版语境与现代对照
原书以 Z80、手工汇编、流程图、Java/.NET、关系数据库、TCP/IP、公开密钥、XML 和传统系统开发流程为实例。重构保留 12 章 114 个公开目录条目,不用云原生、现代前端或机器学习主题替换原书身份;现代实现只用于说明相同的输入、状态、接口与恢复原则。
Z80 的地址与控制引脚可对应现代处理器的总线事务,纸上算法可对应自动化测试,传统 DBMS 和 XML 可对应今天的数据服务与交换协议。工具会变化,但有限状态、可验证契约、分层地址、事务边界、密钥责任和灾难恢复仍需重新证明。
完整公开目录逐项讲解
第5章 与算法成为好朋友的七个要点
算法必须有限、明确并可机械执行。用正常、空输入、最大输入和反例在纸上回放,统计关键操作次数;优化只能减少成本,不能悄悄改变输出或终止条件。
实验从“定义输入输出”开始:固定初始状态,先预测寄存器、内存、对象、数据表或网络消息的下一步变化;每次只改变一个输入、容量、时序、地址、密钥或依赖条件,在首个偏离点保存证据。恢复后重放相同样本,不能只凭最终界面判断正确。
5.1 算法是程序设计的“熟语”
算法必须有限、明确并可机械执行。用正常、空输入、最大输入和反例在纸上回放,统计关键操作次数;优化只能减少成本,不能悄悄改变输出或终止条件。
实验从“写出有限步骤”开始:固定初始状态,先预测寄存器、内存、对象、数据表或网络消息的下一步变化;每次只改变一个输入、容量、时序、地址、密钥或依赖条件,在首个偏离点保存证据。恢复后重放相同样本,不能只凭最终界面判断正确。
5.2 要点1:算法中解决问题的步骤是明确且有限的
算法必须有限、明确并可机械执行。用正常、空输入、最大输入和反例在纸上回放,统计关键操作次数;优化只能减少成本,不能悄悄改变输出或终止条件。
实验从“选择典型模式”开始:固定初始状态,先预测寄存器、内存、对象、数据表或网络消息的下一步变化;每次只改变一个输入、容量、时序、地址、密钥或依赖条件,在首个偏离点保存证据。恢复后重放相同样本,不能只凭最终界面判断正确。
5.3 要点2:计算机不靠直觉而是机械地解决问题
算法必须有限、明确并可机械执行。用正常、空输入、最大输入和反例在纸上回放,统计关键操作次数;优化只能减少成本,不能悄悄改变输出或终止条件。
实验从“估算操作次数”开始:固定初始状态,先预测寄存器、内存、对象、数据表或网络消息的下一步变化;每次只改变一个输入、容量、时序、地址、密钥或依赖条件,在首个偏离点保存证据。恢复后重放相同样本,不能只凭最终界面判断正确。
5.4 要点3:了解并应用典型算法
算法必须有限、明确并可机械执行。用正常、空输入、最大输入和反例在纸上回放,统计关键操作次数;优化只能减少成本,不能悄悄改变输出或终止条件。
实验从“利用数据规律”开始:固定初始状态,先预测寄存器、内存、对象、数据表或网络消息的下一步变化;每次只改变一个输入、容量、时序、地址、密钥或依赖条件,在首个偏离点保存证据。恢复后重放相同样本,不能只凭最终界面判断正确。
5.5 要点4:利用计算机的处理速度
算法必须有限、明确并可机械执行。用正常、空输入、最大输入和反例在纸上回放,统计关键操作次数;优化只能减少成本,不能悄悄改变输出或终止条件。
实验从“纸上回放验证”开始:固定初始状态,先预测寄存器、内存、对象、数据表或网络消息的下一步变化;每次只改变一个输入、容量、时序、地址、密钥或依赖条件,在首个偏离点保存证据。恢复后重放相同样本,不能只凭最终界面判断正确。
5.6 要点5:使用编程技巧提升程序执行速度
算法必须有限、明确并可机械执行。用正常、空输入、最大输入和反例在纸上回放,统计关键操作次数;优化只能减少成本,不能悄悄改变输出或终止条件。
实验从“定义输入输出”开始:固定初始状态,先预测寄存器、内存、对象、数据表或网络消息的下一步变化;每次只改变一个输入、容量、时序、地址、密钥或依赖条件,在首个偏离点保存证据。恢复后重放相同样本,不能只凭最终界面判断正确。
5.7 要点6:找出数字间的规律
算法必须有限、明确并可机械执行。用正常、空输入、最大输入和反例在纸上回放,统计关键操作次数;优化只能减少成本,不能悄悄改变输出或终止条件。
实验从“写出有限步骤”开始:固定初始状态,先预测寄存器、内存、对象、数据表或网络消息的下一步变化;每次只改变一个输入、容量、时序、地址、密钥或依赖条件,在首个偏离点保存证据。恢复后重放相同样本,不能只凭最终界面判断正确。
5.8 要点7:先在纸上考虑算法
算法必须有限、明确并可机械执行。用正常、空输入、最大输入和反例在纸上回放,统计关键操作次数;优化只能减少成本,不能悄悄改变输出或终止条件。
实验从“选择典型模式”开始:固定初始状态,先预测寄存器、内存、对象、数据表或网络消息的下一步变化;每次只改变一个输入、容量、时序、地址、密钥或依赖条件,在首个偏离点保存证据。恢复后重放相同样本,不能只凭最终界面判断正确。
状态与失败矩阵
| 对象 | 正常状态 | 常见边界 | 失败证据 | 恢复条件 |
|---|---|---|---|---|
| 输入与编码 | 类型和范围明确 | 空值、最大值、非法字节 | 原始输入与解析位置 | 拒绝或规范化 |
| 运行与存储 | 状态转换可追踪 | 容量、时序、并发 | 首个错误状态 | 回到已知快照 |
| 接口与网络 | 地址和协议一致 | 丢包、乱序、超时 | 分层日志与消息 | 重试不破坏结果 |
| 系统与运营 | 文档和责任明确 | 依赖故障、节点失效 | 告警、切换与影响 | 业务结果恢复 |
最小可运行实验
function linearSearch(values, target) {
for (let index = 0; index < values.length; index += 1) {
if (values[index] === target) return index;
}
return -1;
}book: 计算机是怎样跑起来的
edition: 2015-05
page: hcw-05-algorithms
sample: normal | boundary | failure | recovery
predict_before_run: true
capture_first_divergence: true
replay_same_input: truefreeze initial state and input
predict the next observable state
change exactly one condition
stop at the first divergent boundary
remove the fault and replay
verify state, output, and recovery常见误区与故障注入
四类样本与验收
| 样本 | 注入方式 | 必查证据 | 通过条件 |
|---|---|---|---|
| 正常 | 固定合法输入 | 全阶段状态与输出 | 与预测一致 |
| 边界 | 空、满、最大值、慢时钟 | 容量和终止状态 | 不越界不悬挂 |
| 失败 | 错地址、断链、错钥、节点失效 | 首个错误与所有者 | 失败被隔离 |
| 恢复 | 删除故障后重放 | 状态、接口、业务结果 | 回到受控状态 |
目录证据:第5章 与算法成为好朋友的七个要点、5.1 算法是程序设计的“熟语”、5.2 要点1:算法中解决问题的步骤是明确且有限的、5.3 要点2:计算机不靠直觉而是机械地解决问题、5.4 要点3:了解并应用典型算法、5.5 要点4:利用计算机的处理速度、5.6 要点5:使用编程技巧提升程序执行速度、5.7 要点6:找出数字间的规律、5.8 要点7:先在纸上考虑算法。本页按完整公开目录独立教学重构,不复制原书正文;9 个条目全部进入输入、状态、接口、失败和恢复证据链。
练习
小结
- 算法:对应“定义输入输出”的核心观察量。
- 有限性:对应“写出有限步骤”的核心观察量。
- 机械执行:对应“选择典型模式”的核心观察量。
- 复杂度:对应“估算操作次数”的核心观察量。
- 纸上推演:对应“利用数据规律”的核心观察量。
- 9 个本页公开目录条目已全部映射到状态链和实验账本。
- 最终输出只是证据之一,过程状态、边界失败与恢复共同决定是否通过。