Content deleted Content added
Fixed typo is algorithm description |
|||
(5 intermediate revisions by 4 users not shown) | |||
Line 1:
{{Short description|Algorithm on linear-feedback shift registers}}
{{distinguish|Berlekamp's algorithm}}
[[File:
The '''Berlekamp–Massey algorithm''' is an [[algorithm]] that will find the shortest [[linear-feedback shift register]] (LFSR) for a given binary output sequence. The algorithm will also find the [[Minimal polynomial (field theory)|minimal polynomial]] of a linearly [[Recurrence relation|recurrent sequence]] in an arbitrary [[field (mathematics)|field]]. The field requirement means that the Berlekamp–Massey algorithm requires all non-zero elements to have a multiplicative inverse.<ref>{{Harvnb|Reeds|Sloane|1985|p=2}}</ref> Reeds and Sloane offer an extension to handle a [[ring (mathematics)|ring]].<ref>{{Citation |last1=Reeds |first1=J. A. |last2=Sloane |first2=N. J. A. |author-link2=N. J. A. Sloane |journal=SIAM Journal on Computing |volume=14 |issue=3 |pages=505–513 |year=1985 |title=Shift-Register Synthesis (Modulo n) |url=http://neilsloane.com/doc/Me111.pdf |doi=10.1137/0214038 |citeseerx=10.1.1.48.4652 }}</ref>
Line 104:
T(D) T(x) polynomial
-->
<div class="mw-highlight mw-highlight-lang-c mw-content-ltr">
polynomial(field ''K'') s(x) = ... <span class="cm">/* coeffs are
<span class="cm">/* connection polynomial */</span>▼
▲polynomial(field K) s(x) = ... /* coeffs are s_j; output sequence as N-1 degree polynomial) */
polynomial(field K) C(x) = 1; <span class="cm">/* coeffs are c<sub>j</sub> */</span>
▲/* connection polynomial */
polynomial(field K)
int
<span class="cm">/* steps 2. and 6. */</span>▼
<span class="k">for</span> (n = 0; n < N; n++) {▼
<span class="cm">/* step 2. calculate discrepancy */</span>▼
▲/* steps 2. and 6. */
field K d = s<sub>n</sub> + {{math|∑{{su|p=L|b=i=1}} c<sub>i</sub> s<sub>n - i</sub>}} <!--Σi=1Lci⋅sn−i;-->
▲for (n = 0; n < N; n++) {
▲ /* step 2. calculate discrepancy */
<span class="k">if</span> (d == 0) {
<span class="cm">/* step 3. discrepancy is zero; annihilation continues */</span>▼
} <span class="k">else</span> <span class="k">if</span> (2 * L <= n) {
▲ /* step 3. discrepancy is zero; annihilation continues */
L = n + 1 - L;
C(x) = C(x) - d b<sup>−1</sup> x<sup>m</sup> B(x);
} else {▼
▲ m = m + 1;
}
<span class="k">return</span> L;
}▼
</div>
In the case of binary GF(2) BCH code, the discrepancy d will be zero on all odd steps, so a check can be added to avoid calculating it.
{{sxhl|2=c|1=<nowiki/>
for (n = 0; n < N; n++) {▼
/* if odd step number, discrepancy == 0, no need to calculate it */▼
▲for (n = 0; n < N; n++) {
if ((n&1) != 0) {
▲ /* if odd step number, discrepancy == 0, no need to calculate it */
▲}}
==See also==
Line 165 ⟶ 162:
==External links==
* {{springer|title=Berlekamp-Massey algorithm|id=p/b120140}}
*
* {{MathWorld|urlname=Berlekamp-MasseyAlgorithm|title=Berlekamp–Massey Algorithm}}
* [https://code.google.com/p/lfsr/ GF(2) implementation in Mathematica]
|