Algorytm Berlekampa

Algorytm Berlekampa – algorytm faktoryzacji wielomianów o współczynnikach w ciele skończonym. Został opisany przez Elwyna Berlekampa w 1967.

Opis algorytmu

Wejście: wielomian f {\displaystyle f} stopnia m {\displaystyle m} o współczynnikach w ciele q {\displaystyle q} -elementowym,
Wyjście: nietrywialny dzielnik wielomianu lub informacja, że jest on potęgą wielomianu nierozkładalnego.
1. Utwórz macierz Q {\displaystyle Q} wielkości m × m , {\displaystyle m\times m,} której i {\displaystyle i} -ta kolumna przedstawia z q i mod f . {\displaystyle z^{qi}{\bmod {f}}.}
2. Znajdź bazę jądra przekształcenia liniowego Q I ; {\displaystyle Q-I;} można tego dokonać używając eliminacji Gaussa.
3. Dla dowolnego nieskalarnego wielomianu g {\displaystyle g} (jeśli nie istnieje, to wielomian jest potęgą wielomianu nierozkładalnego) reprezentowanego przez wektor z bazy, dla każdego elementu s G F ( q ) , {\displaystyle s\in GF(q),} znajdź największy wspólny dzielnik wielomianów f {\displaystyle f} i g s {\displaystyle g-s} (dla pewnego s {\displaystyle s} będzie to poszukiwany nietrywialny dzielnik); może być on znaleziony algorytmem Euklidesa.

Złożoność i poprawność

Algorytm ma złożoność obliczeniową O ( m 2 ( m + q ) ( log ( q ) ) 2 ) . {\displaystyle O(m^{2}(m+q)(\log(q))^{2}).}

Jego poprawność opiera się na następujących faktach:

  • g ( z ) q g ( z ) = s G F ( q ) ( g ( z ) s ) , {\displaystyle g(z)^{q}-g(z)=\prod _{s\in GF(q)}(g(z)-s),}
  • dla s t {\displaystyle s\neq t} wielomiany g s {\displaystyle g-s} i g t {\displaystyle g-t} względnie pierwsze,
  • f ( z ) = s G F ( q ) g c d ( f ( z ) , g ( z ) s ) . {\displaystyle f(z)=\prod _{s\in GF(q)}gcd(f(z),g(z)-s).}

Bibliografia

  • Berlekamp, Elwyn R., Factoring Polynomials Over Finite Fields, 1967.