Bell 實驗室,1947 年
Richard Hamming 於 1946 年加入貝爾電話實驗室。那裡的中繼計算機只在工作日運作,技術人員可在出錯後重新啟動。週末時,機器一旦出現故障就會停止運行,直到週一才能重啟任務。
Hamming 非常憤怒。他想:「如果機器能檢測到錯誤,為什麼不能定位它並修正它呢?」這種挫折感,加上他對二進制算術和奇偶檢查的深入了解,奠定了基礎。
首次洞察:矩形碼
Hamming 的第一個想法:將消息位排列成 m×n 矩形,為每一行和每一列添加奇偶檢查。單一錯誤會導致恰好一個失敗的行檢查和一個失敗的列檢查。它們的交點指出錯誤的位置。
冗餘比例:(m+1)(n+1) / mn。微積分告訴你,對於固定的消息大小,正方形最小化這個比例。但隨著 m 和 n 增大,雙重錯誤變得更可能,這是一個沒有通用答案的工程判斷。
最小化矩形冗餘
4×4 矩形攜帶 16 個消息位,加上 4 個行檢查和 4 個列檢查,加上 1 個角奇偶位 = 9 個檢查位,用於 16 個消息位。
冗餘比例:(m+1)(n+1) / mn = 25/16 ≈ 1.56。
對於 10×10 矩形:100 個消息位,121 個總位,冗餘 ≈ 1.21。
症狀作為二進制數
在矩形碼洞察出現幾週後,Hamming 騎車前往紐約,經過新澤西農場,心中反覆審視他的成就。三角碼浮現在他腦海中,冗餘更好。然後是立方體。然後是四維、五維...
每增加一個維度都會改善冗餘。n 維度中邊長為 2 的超立方體僅使用 n+1 個奇偶檢查來處理 2^n 個頂點。但這是最優的嗎?
計數論證
n+1 個奇偶位產生一個症狀:一個 (n+1) 位二進制數。該症狀需要識別 2^n + 1 個不同的結果:2^n 個錯誤位置中的每一個,加上特殊的「無錯誤」結果。
2^(n+1) = 2·2^n,幾乎足夠。差一個因子 2。Hamming 放置了這個問題。
關鍵洞察
後來,Hamming 帶著新想法回到這個問題:使用症狀本身作為二進制數,為錯誤位置編址。位置 1 = 二進制 001,位置 2 = 二進制 010,位置 3 = 二進制 011,等等。保留全零表示「無錯誤」。
這將症狀從奇偶檢查的輸出轉變為一個地址。奇偶檢查設計得以至於當任何單一位翻轉時產生恰好正確的地址。
設計 (7,4) 碼
對於 7 位碼(3 個奇偶位,4 個消息位),位置 1 到 7 的二進制表示是:001、010、011、100、101、110、111。
奇偶檢查 1 涵蓋位 0 = 1 的位置:位置 1、3、5、7。
奇偶檢查 2 涵蓋位 1 = 1 的位置:位置 2、3、6、7。
奇偶檢查 3 涵蓋位 2 = 1 的位置:位置 4、5、6、7。
奇偶位佔據 2 的冪次位置:1、2、4。消息位佔據其餘位置:3、5、6、7。
如果位 6 翻轉,奇偶檢查 2 和 3 失敗(二進制 110 = 6)。症狀讀取 110 = 6。翻轉位置 6。完成。
單錯誤修正、雙錯誤檢測
(7,4) Hamming 碼修正單個錯誤。但如果有兩位翻轉呢?沒有額外保護,解碼器應用症狀規則並「修正」碼字為錯誤的消息,造成無聲的誤修正。
SECDED:再加一個奇偶位
添加一個覆蓋整個碼字的單個奇偶位 p₀(所有 7 位)。現在症狀有 4 個條目:原始的 3 個檢查加上 p₀。
``
舊症狀 新 p₀ 含義
000 0 正確
000 1 只有 p₀ 中的錯誤
xxx 1 單個錯誤,舊症狀命名它
xxx 0 雙錯誤,標記它
``
四種情況是窮盡的。雙錯誤翻轉兩位:舊症狀不會讀取 000(兩位共同破壞了它的兩個檢查),但 p₀ 翻轉兩次並返回到 0。模式 xxx + 0 是不可否認的。
為什麼 SECDED 有效
SECDED 規則利用奇偶的模運算結構。使用偶奇偶,任何單一翻轉都會改變 p₀。任何雙翻轉都會使 p₀ 保持不變。所以 p₀ 計數錯誤模 2。
幾何圖景
Hamming 從另一個方向到達同一位置:分析幾何。將每個 n 位字符串表示為 n 維超立方體的頂點。單位翻轉沿一個軸移動一個邊長。兩次翻轉:兩條邊。度量是 Hamming 距離。
定義圍繞碼字 c 的 Hamming 球,半徑 t:所有在 c 的 t 位翻轉內的點。對於單錯誤修正,t = 1。
單錯誤修正條件:圍繞每對不同碼字的半徑 1 的球不得重疊。如果它們重疊,接收到的字可能屬於任一碼字,解碼器失敗。
這直接轉換為最小距離:如果碼字至少相隔 3(d_min ≥ 3),兩個半徑 1 的球就不重疊。
(7,4) 碼達到 d_min = 3。Hamming 界限:2^7 / (1 + 7) = 16 = 2^4。恰好 16 個碼字。一個完美碼:16 個半徑 1 的球用沒有間隙或重疊的方式拼磁 {0,1}^7。
工程判斷
Hamming 是明確的:錯誤更正碼涉及工程判斷,而不是純粹數學。
消息長度:較長的消息允許更有效的編碼(n 個消息位的 log n 個奇偶位)。但更長的消息也會累積更多噪聲,增加雙錯誤通過作為虛假單個修正通過的風險。
修正水平 vs 檢測:以一個錯誤修正交換兩個額外的錯誤檢測。最優分割取決於通道的噪聲特徵。
現場維護價值:隨著設備變得更複雜,現場技術人員無法從第一原則診斷每個故障。自我診斷系統大大降低了維護所需的技能。Hamming 稱這為最重要的好處之一,通常比原始可靠性增益更重要。
風格:幸運眷顧有備而來的心智
Hamming 用直接挑戰關閉了第 12 章。他描述發現需要三至六個月的工作,大多是在執行他在 Bell 實驗室的主要職責的奇數時刻進行。
他識別了使其可能的三件事:
1. 準備:在問題出現之前,對奇偶檢查、二進制算術和群論的深入熟悉。
2. 審視成功:習慣性地重播過去的解決方案以內化它們的風格。三角碼在他穿過通勤車乘時心理回顧矩形碼時浮現。
3. 不滿足於『看起來不錯』:他曾經因接受明顯的最優性而燒傷過手指。他推動直到他能證明碼是最佳的。