esc
Type to search, or take a leap:
1950 AD (Hamming codes)·Computing·verified

Error-correcting codes

A way of adding structured redundancy to data so that a message can not only reveal when it has been corrupted, but locate and repair the flipped bits itself, with no second copy and no request to resend. Extra check bits are arranged so their pattern of failures points straight at the error.

Глубинный архив пока написан по-английски — выверенные переводы входят в план развития. Встроенный переводчик браузера хорошо справляется с этой страницей.

Error-correcting codes
en:User:Cburnett · CC BY-SA 3.0 · Wikimedia Commons

✦ Постойте, правда?

In 1947 Richard Hamming was allotted the Bell Labs relay computer only on weekends, and it ran his jobs unattended — he started a program Friday evening and collected the output Monday morning. Whenever the machine caught an error it simply halted and sat idle, wasting his whole weekend. Furious, he asked why a machine clever enough to *notice* an error couldn't also *fix* it — and by 1950 he had published codes that let a block of bits find and repair a flipped digit on their own. Every hard drive, QR code, and deep-space signal since carries his answer.

Что это

An error-correcting code is a scheme for writing data with deliberate, structured redundancy, so that the data can heal itself. A simple check like a parity bit can tell you *that* something went wrong; a correcting code tells you *where*. Hamming's insight was to add several parity bits, each covering a carefully chosen, overlapping subset of the data bits. If a bit flips, some of those parity checks fail and others still pass, and the exact combination of failures — read as a binary number, the "syndrome" — is the address of the corrupted bit. Knowing the address, the receiver simply flips that bit back. No resend, no second copy, no human operator.

Почему это было важно

Before this, a machine or a channel that detected an error could only stop and complain. Shannon had just proved, in 1948, the startling result that error-free communication over a noisy channel was possible in principle — but his proof was an existence theorem; it did not hand you a code you could build. Hamming supplied the first practical one. That closed the gap between what information theory promised and what an engineer could actually wire up, and it turned reliability from a matter of luck and careful handling into a matter of design: you decide in advance how many errors a block must survive, and you pay for it in a fixed handful of extra bits.

Что это открыло

Reliable digital storage and transmission at scale. ECC memory quietly corrects the bit-flips that cosmic rays and thermal noise inflict on server RAM; CDs, DVDs, and hard disks read cleanly through scratches and defects; QR codes still scan when a chunk is smudged or torn; and deep-space probes send pictures across billions of kilometres on a whisper of power because heavier codes descended from Hamming's — Reed–Solomon, convolutional, turbo, and LDPC codes — let the ground station reconstruct data the noise had mangled. Every modern link, from Wi-Fi to mobile phones to the wires inside a computer, assumes its bits will occasionally be wrong and is built to repair them on arrival.

Минимальная работающая версия

A single parity bit detects one flipped bit but cannot fix it. Hamming's smallest useful code, Hamming(7,4), sends four data bits plus three parity bits; if any one of the seven bits flips, the three parity checks that fail spell out, in binary, the exact position of the error — so the receiver just flips it back.

Эта статья ждёт своего полного изложения — картографы работают. Её место в графе уже подтверждено.

Требует

Открыло

Фронтир — дальше ещё ничего не нанесено.

Источники

  • R. W. Hamming, 'Error Detecting and Error Correcting Codes,' *Bell System Technical Journal* 29, no. 2 (April 1950): 147–160
  • Claude E. Shannon, 'A Mathematical Theory of Communication,' *Bell System Technical Journal* (1948)
  • Richard W. Hamming, *The Art of Doing Science and Engineering* (1997)

Что-то не так на этой странице? Каждое утверждение здесь должно выдерживать проверку. Предложить исправление →