Chien Search - Algorithm

Algorithm

We denote the polynomial (over the finite field GF) whose roots we wish to determine as:

Conceptually, we may evaluate for each non-zero in GF. Those resulting in 0 are roots of the polynomial.

The Chien search is based on two observations:

  • Each non-zero may be expressed as for some, where is a primitive element of, is the power number of primitive element . Thus the powers for cover the entire field (excluding the zero element).
  • The following relationship exists:

\begin{array}{lllllllllll} \Lambda(\alpha^i) &=& \lambda_0 &+& \lambda_1 (\alpha^i) &+& \lambda_2 (\alpha^i)^2 &+& \cdots &+& \lambda_t (\alpha^i)^t \\ &\triangleq& \gamma_{0,i} &+& \gamma_{1,i} &+& \gamma_{2,i} &+& \cdots &+& \gamma_{t,i}
\end{array}

\begin{array}{lllllllllll} \Lambda(\alpha^{i+1}) &=& \lambda_0 &+& \lambda_1 (\alpha^{i+1}) &+& \lambda_2 (\alpha^{i+1})^2 &+& \cdots &+& \lambda_t (\alpha^{i+1})^t \\ &=& \lambda_0 &+& \lambda_1 (\alpha^i)\,\alpha &+& \lambda_2 (\alpha^i)^2\,\alpha^2 &+& \cdots &+& \lambda_t (\alpha^i)^t\,\alpha^t \\ &=& \gamma_{0,i} &+& \gamma_{1,i}\,\alpha &+& \gamma_{2,i}\,\alpha^2 &+& \cdots &+& \gamma_{t,i}\,\alpha^t \\ &\triangleq& \gamma_{0,i+1} &+& \gamma_{1,i+1} &+& \gamma_{2,i+1} &+& \cdots &+& \gamma_{t,i+1}
\end{array}

In other words, we may define each as the sum of a set of terms, from which the next set of coefficients may be derived thus:

In this way, we may start at with, and iterate through each value of up to . If at any stage the resultant summation is zero, i.e.

then also, so is a root. In this way, we check every element in the field.

When implemented in hardware, this approach significantly reduces the complexity, as all multiplications consist of one variable and one constant, rather than two variables as in the brute-force approach.

Read more about this topic:  Chien Search