Algoritmo di Berlekamp

Da testwiki.
Versione del 16 lug 2022 alle 16:56 di imported>Omega Bot (Bot: aggiorno template cita come da discussione)
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)
Vai alla navigazione Vai alla ricerca

In matematica l'algoritmo di Berlekamp è un algoritmo per la fattorizzazione di polinomi su un campo finito ideato da Elwyn Berlekamp nel 1967. L'algoritmo consiste principalmente nella costruzione di una opportuna matrice contenente coefficienti ottenuti a partire da quelli del polinomio da fattorizzare e nel calcolo del massimo comun divisore tra polinomi. È stato il principale algoritmo per la fattorizzazione di polinomi fino alla realizzazione dell'algoritmo di Cantor-Zassenhaus nel 1981 da cui è stato ormai soppiantato in molte applicazioni. Tuttavia il metodo è ancora implementato in molti sistemi di algebra computazionale, tra cui PARI/GP, infatti è di semplice realizzazione, molti passaggi possono essere parallelizzati in modo efficiente e impone poche ipotesi sul polinomio da fattorizzare[1].

Descrizione dell'algoritmo

Dato un polinomio f(x) di grado n a coefficienti nel campo di Galois 𝔽q e che sia privo di fattori ripetuti, si cerca un polinomio q(x)𝔽q[x] che divida f(x). Ripetendo poi il procedimento per i fattori di f(x) così ottenuti, è possibile ottenere la fattorizzazione di f(x) in polinomi irriducibili (che è essenzialmente unica, poiché ogni anello di polinomi su un campo finito è un dominio a fattorizzazione unica).

I fattori di f(x) appartengono sicuramente all'anello quoziente R=𝔽q[x]f(x); l'algoritmo si focalizza sulla ricerca dei polinomi g(x)R che soddisfano la congruenza

g(x)qg(x)(modf(x)).

Tali polinomi formano una sottoalgebra di R (visto come spazio vettoriale di dimensione n su 𝔽q), detta sottoalgebra di Berlekamp. L'interesse per questa sottoalgebra consiste nel fatto che ogni polinomio g(x)R soddisfa l'identità

f(x)=s𝔽qMCD(f(x),g(x)s),

che è una fattorizzazione di f(x). Va però osservato che non tutti i fattori della produttoria sono non banali (ovvero elementi invertibili o multipli di f(x)), ma al variare di g(x) e s qualcuno lo è sicuramente, a meno che f(x) non sia irriducibile.

Per costruire gli elementi della sottoalgebra di Berlekamp è sufficiente costruirne una base; ciò è possibile poiché tale sottolagebra è il nucleo di una matrice n×n a coefficienti in 𝔽q. Tale matrice, che indicheremo con 𝒬, è così costruita: l'elemento qi,j nell'i-esima riga e j-colonna è il coefficiente del monomio di grado j1 del polinomio x(i1)q[2] modulo f(x), ovvero:

x(i1)qqi,nxn1++qi,2x+qi,1(modf(x)).

Allora se ad ogni polinomio g(x)=gn1xn1++g1x+g0R si associa in modo biiettivo il vettore riga g¯=(g0,g1,,gn1), è relativamente semplice provare che il vettore g¯𝒬 corrisponde al polinomio g(x)q modulo f(x). Ne segue che un polinomio g(x)R appartiene alla sottoalgebra di Berlekamp se e solo se g¯ è un autovettore di 𝒬, ovvero soddisfa il sistema di n equazioni in n incognite g¯(𝒬I)=0 (dove I è la matrice identità di ordine n×n), che può essere risolto in modo efficiente, ad esempio applicando il metodo di eliminazione di Gauss, per ottenere i polinomi cercati.

Una volta individuato un polinomio con la proprietà richiesta è sufficiente calcolare il massimo comun divisore tra f(x) e g(x)s al variare di s in 𝔽q (per esempio con l'algoritmo di Euclide): ogni polinomio ottenuto è un fattore di f(x), eventualmente banale.

Eliminazione dei fattori ripetuti

Affinché la procedura descritta funzioni, è essenziale l'ipotesi che f(x) non abbia fattori ripetuti. Tuttavia questo non limita l'applicazione dell'algoritmo poiché è possibile individuare in modo molto semplice la presenza di tali fattori usando le proprietà delle derivate formali. Sia infatti f(x) un polinomio e f(x) la sua derivata formale e si calcoli g(x)=MCD(f(x),f(x)). Si hanno allora tre casi:

  1. se g(x) è una costante, allora f(x) è privo di fattori ripetuti;
  2. se f(x)=0, allora f(x) è una potenza p-esima, dove p è la caratteristica di 𝔽q;
  3. se g(x) ha grado maggiore di 1, allora è un fattore di f(x).

Fattorizzazione nell'anello degli interi

L'algoritmo di Berlekamp può essere utilizzato anche nella fattorizzazione di polinomi a coefficienti interi. Tale problema è molto più difficile di quello della fattorizzazione in 𝔽q, essendo l'insieme dei coefficienti infinito. Non è infatti neppure ovvio che questo problema sia decidibile. Infatti mentre in 𝔽q si potrebbe procedere alla fattorizzazione di un polinomio di grado n dividendolo per tutti i qn/2 polinomi di grado minore o uguale a n/2 (una tecnica del tutto impraticabile, ma corretta almeno dal punto di vista teorico), in [x] è necessario applicare un ragionamento più complesso come il metodo di Kronecker. Tuttavia è possibile provare che esistono un primo p e un naturale n tali per cui fattorizzando f(x) sui campi 𝔽p, 𝔽p2, ..., 𝔽pn, si può ottenere una fattorizzazione di f(x) anche su [x]. Sotto questa forma il metodo prende il nome di algoritmo di Berlekamp-Zassenhaus e richiede l'uso di osservazioni teoriche più sofisticate, tra cui il lemma di Hensel.

Note

  1. Nell'algoritmo di Cantor-Zassenhaus è infatti richiesto che il polinomio dato abbia una fattorizzazione in fattori di grado uguale. Tuttavia questa condizione non limita il campo di applicabilità dell'algoritmo, poiché esistono metodi efficienti per determinare una fattorizzare di un polinomio in fattori (non necessariamente irriducibili) che abbiano la proprietà richiesta.
  2. Bisogna fare attenzione al fatto che le righe e le colonne di 𝒬 sono numerate da 1 a n, mentre i coefficienti dei polinomi da 0 a n1.

Bibliografia

Template:Portale