Appearance
题目
用海明码对长度为 8 位的数据进行检/纠错时,若能纠正一位错,则校验位数至少为( )。
错因
A
只用 这种"覆盖数据位数即可"的简化估算: 已经能编码 4 个数据位置,但远远小于 8——根本连数据都不够编码,更别提加上校验位本身和"无错"状态。海明码必须能区分 n + k + 1 种情况(n 个数据位的错位置 + k 个校验位的错位置 + 1 个"无错"),不止 n 种。
B
用了 的版本:n=8 时 满足,得 k=3。这是最常见的脑回路漏洞——忘了校验位本身也可能出错(k 个位置)、还要一个"无错"状态(+1)。正确不等式是 ,n=8、k=3 时右边是 12,左边 8,不够。
D
可能用了 严格大于、或多算了一位"双错检测"的位(SEC-DED 编码会再加 1 位)。题目只问"纠 1 位错",不要求双错检测,所以 SEC(单纠错)级别下 k=4 足矣,不需要 5。
总解析
核心不等式:海明码要纠正 1 位错,校验位数 k 必须满足
含义解释: 个校验位组合可以表示 种状态。这些状态需要分别对应:
| 需要区分的状态 | 数量 |
|---|---|
| 没有错误 | 1 |
| 数据位有 1 位错(n 个位置) | n |
| 校验位有 1 位错(k 个位置) | k |
| 合计 | n + k + 1 |
只有 不小于这个总数,每种错误才能被唯一识别 → 才能定位 → 才能纠正。
第二步:代入 n = 8,逐个试 k
| k | 满足? | ||
|---|---|---|---|
| 2 | 4 | 11 | ✗ |
| 3 | 8 | 12 | ✗ |
| 4 | 16 | 13 | ✓ |
| 5 | 32 | 14 | ✓(但不是最少) |
最小的 k 是 4。
第三步:与课本结论对照
408 海明码的常见小结:
| 数据位 n | 最少校验位 k |
|---|---|
| 1–4 | 3 |
| 5–11 | 4 |
| 12–26 | 5 |
| 27–57 | 6 |
n=8 落在 5–11 区间 → k=4 ✓
最终答案是 C(4)。
易错点速记:
- 不等式右边是 n + k + 1,不是 n、不是 n+1、不是 n+k
- "纠 1 位错"对应的是 SEC(Single Error Correction);如果题目还要求"检 2 位错"(SEC-DED),需再加 1 位整体校验位