《某些有限域上的多項式碼》
多發幾個多項式的取樣點,即便部分出錯,整條訊息也能存活下來。
刮傷一張 CD、撕掉二維碼的一角、丟失四十億公里外探測器傳來的一段資料——訊息卻依舊完好送達。這近乎魔法的本事,就是里德—所羅門碼。
把這個想法拆開看
訣竅在於:把你的訊息當作一條曲線來發送,而不是當作一張清單。把你的資料看成一條光滑數學曲線的「配方」,然後發送的不是配方,而是從那條曲線上讀出的一串點——比畫出這條曲線所必需的還要多。
現在假設其中一些點在途中被弄花了。因為曲線很平緩,而你又多發了點,接收方便能看出:大多數點仍落在同一條曲線上,只有少數幾個偏到一旁。能擬合這多數點的光滑曲線只有一條——於是那些偏離者被揪出、被掰回原位,原訊息得以重建。你多發的富餘點越多,能扛住的損壞就越多。
兩位工程師,走在機器前面
1960 年,在麻省理工學院林肯實驗室工作的歐文·里德與古斯塔夫·所羅門,發表了一篇四頁的論文,描述了這套方案。它優雅,且可被證明是最優的——但有個難處:當時還沒人知道,如何在一條長訊息裡又快又準地找出並改正錯誤。有幾年,它是一個等待方法的漂亮想法。後來解碼器來了——先是彼得森,再是 1967 年的柏利坎普與梅西——閘門就此打開。等到 1980 年代 CD 問世、航海家號掠過群星,里德—所羅門早已在默默幹活,且從未停下。
它為何重要
夏農在 1948 年證明了:在有噪聲的通道上,你可以近乎完美地通訊——但他的證明沒說怎麼做。里德—所羅門,是最早一批強到、又便宜到足以在大規模上兌現這一承諾的碼,並且尤其擅長對付成簇而來的損壞:一道刮痕、一粒塵埃、一段衰落的無線電訊號。正因如此,你刮傷的光碟照樣能播,遮掉一半的二維碼照樣能掃。沒有它,我們所熟知的數位儲存與通訊,會脆弱得多。
兩點定一線
還記得嗎:兩點確定一條直線,三點確定一條拋物線。若有人給你五個本該落在一條直線上的點,其中一個明顯歪了,你不必被告知是哪一個——相互吻合的那四個點定出了直線,而那個離群的點便格外扎眼,可被改正。里德—所羅門正是把這件事放大:發送一條曲線的許多個點,少數幾個出錯的點永遠無法偽裝,因為它們不可能一齊落回同一條又低又平滑的曲線上。
之前與之後
克勞德·夏農(1948)證明了在噪聲中可靠通訊是可能的;理查德·漢明(1950)造出第一個能糾正單個位元錯誤的實用碼。里德—所羅門更進一步,糾正整個符號與成簇的突發錯誤,成為史上應用最廣的糾錯碼。解碼演算法(柏利坎普—梅西,1967)與後來的列表解碼結果,又把它推得更遠。在本館裡,它正處在夏農那個承諾,與如今倚賴資料保持完好的儲存和網路之間。