A Berlekamp-Massey algoritmus egy olyan algoritmus, amely a legrövidebb lineáris visszacsatolású eltolási regisztert keresi egy bemenetként megadott bináris sorozathoz. Az algoritmus azt is lehetővé teszi, hogy megtalálja a bemeneti lineáris ismétlődő sorozat minimális polinomját egy tetszőleges mezőn .
Az algoritmust Alvin Berlekamp fedezte fel 1968-ban [1] . Az algoritmus lineáris kódokra való alkalmazását James Massey találta meg a következő évben [2] . Ez lett a kulcs a Reed-Solomon kódexek gyakorlati alkalmazásához .
Algoritmus B.M. egy alternatív módszer az SLAE megoldására, amely a következőképpen írható le:
Az alábbi kódpéldákban C(x) jelentése Λ(x). A C(x) hibakereső L hiba esetén a következőképpen definiálható:
vagy hátulról előre:
Az algoritmus célja a minimum L és a hozzá tartozó C(x) meghatározása, ami a teljes szindrómában hibákat ad.
nullát eredményez:
Algoritmus: C(x) inicializálása 1, L az eddig talált hibák aktuális számát jelöli, és nullára inicializálva. N a hibaszindróma elemek teljes száma. n a fő számláló, egyben a szindrómaelemek indexe 0-tól ( N -1-ig). B(x) az utolsó C(x) másolata L frissítése idején , és 1-re van inicializálva. b az utolsó d eltérés másolata (lásd alább), ismét az L frissítése idején, és m az L , B(x) és b frissítés óta eltelt iterációk száma, és szintén eggyel inicializálva van .
Minden iterációnál kiszámítjuk a d eltérést . A k- adik iterációnál ez lesz:
Ha d nulla, az azt jelenti, hogy C(x) és L egyenlőre helyes, elegendő m -et növelni és folytatni az iterációt.
Ha d értéke nem nulla, az algoritmus korrigálja a C(x)-et, és d -t nullára állítja :
Az x m -rel való szorzás lényegében a B(x) együtthatók m-rel való eltolását jelenti, azaz minden együttható m-rel magasabban helyezkedik el, hogy megfeleljen a b szindrómának . Ha legutóbb a j iterációnál frissítették az L-t (és most megvan a k -edik iteráció), akkor m = k - j , és az újraszámított eltérés a következő:
Vagyis helyettesítve azt látjuk, hogy eltűnik:
Ezenkívül az L értékét (a talált hibák száma) néha javítani kell. Ha L egyenlő a hibás szimbólumok tényleges számával, akkor az iterációk során az eltérések nullázódnak, mielőtt n nagyobb vagy egyenlő lesz, mint (2 L ). Ellenkező esetben az L frissítésre kerül, és az algoritmus frissíti a B(x), b-t, magát az L-t (növekmény), és m visszaáll 1-re. Az L = (n + 1 - L) kifejezés korlátozza az L-t a felhasznált elérhető szindrómaelemek számára. az eltérések kiszámításához, és egyúttal megoldja az L eggyel növelésének problémáját.
Massey algoritmusa (1969 , 124. o.):
polinom ( K mező ) s ( x ) = ... /* együtthatók s_j; kimeneti sorozat N-1 fokos polinomként) */ /* kapcsolati polinom */ polinom ( K mező ) C ( x ) = 1 ; /* a koefficiensek c_j */ polinom ( K mező ) B ( x ) = 1 ; int L = 0 ; int m = 1 ; mező K b = 1 ; int n ; /* 2. és 6. lépés. */ for ( n = 0 ; n < N ; n ++ ) { /* 2. lépés: eltérés kiszámítása */ mező K d = s_n + \ Sigma_ { i = 1 } ^ L c_i * s_ { n - i }; ha ( d == 0 ) { /* lépés 3. az eltérés nulla; a megsemmisítés folytatódik */ m = m + 1_ _ } különben ha ( 2 * L <= n ) { /* 5. lépés. */ /* a C(x) ideiglenes másolata */ polinom ( K mező ) T ( x ) = C ( x ); C ( x ) = C ( x ) -db ^ { - 1 } x ^ mB ( x ) ; _ L = n + 1 - L ; B ( x ) = T ( x ); b = d ; m = 1 ; } más { /* 4. lépés. */ C ( x ) = C ( x ) -db ^ { - 1 } x ^ mB ( x ) ; _ m = m + 1_ _ } } vissza L ;