Reed–Solomon Codes

Encode a message as a polynomial, sample it, and recover from errors.

The idea

A Reed–Solomon code encodes a message as a polynomial over a finite field and transmits the polynomial's values at fixed sample points.

The construction rests on one fact: a polynomial of degree at most $k-1$ is determined by its values at any $k$ distinct points — two points determine a line, three a parabola. Values at more than $k$ points are therefore redundant, and that redundancy is what the receiver spends on correcting errors.

Fix a finite field $\mathbb{F}_q$ and choose $n$ distinct points $\alpha_1, \ldots, \alpha_n$ in it, so $n \le q$. Read a message of $k$ symbols as the coefficients of $m(x) = m_0 + m_1 x + \cdots + m_{k-1} x^{k-1},$ and transmit its values $\bigl(m(\alpha_1), \ldots, m(\alpha_n)\bigr)$ as the codeword. Any $k$ of the $n$ values recover $m(x)$ by interpolation.

The code has length $n$, dimension $k$, and minimum distance $d = n - k + 1$; we abbreviate the three parameters as $[n, k, d]$. The distance is exact: two distinct messages give polynomials whose difference is nonzero of degree at most $k-1$, so it vanishes at no more than $k-1$ sample points, and the two codewords differ in at least $n - k + 1$ coordinates. By the Singleton bound, no code of length $n$ and dimension $k$ has larger minimum distance, so Reed–Solomon codes meet that bound with equality.

Ways to work on it

Not sure where to start? Take the ten-question placement test.