CODICI CICLICI TEORIA DEI CODICI CORSO DI GRAFI E COMBINATORIA A.A. 2011 - 2012 Prof.ssa Bambina Larato - [email protected] Politecnico di Bari CODICI CICLICI Qualche richiamo Sia F=GF(q) e sia F[x] l’insieme dei polinomi nell’indeterminata x . Si dimostra facilmente che ( F[x],+,·) è un anello commutativo unitario. DIVISIONE TRA POLINOMI Teor. : Se f(x),g(x)є F[x] con g(x)≠0(x) , allora esiste una ed una sola coppia di polinomi ( q(x) , r(x) ) tale che f(x)=q(x)·g(x)+r(x) con deg r(x)<deg g(x) se r(x) ≠ 0(x) . DIVISIBILITÀ In particolare se r(x)=0(x) si dice che f(x) è divisibile per g(x) o, equivalentemente, che g(x) divide f(x) . (Z,+,·) E (F[x],+,·) Come per l’anello (Z,+,·) si possono considerare tutti gli interi modulo un intero positivo prefissato n>1 ottenendo l’anello (Zn,+,·) delle classi dei resti modulo n , anche per l’anello dei polinomi (F[x],+,·) si possono considerare tutti i polinomi modulo un polinomio prefissato p(x) di grado > 1 . DEFINIZIONI DEF. : Fissato p(x)єF[x] , p(x)≠0(x) , si dice che due polinomi g(x) e h(x) sono congruenti modulo p(x) , e si scrive g(x) Ξ h(x) (mod p(x) ) , se g(x)-h(x) è divisibile per p(x) , cioè se g(x)-h(x) = q(x)·p(x) . CONGRUENZA TRA POLINOMI Teor. : Si ha che g(x) Ξ h(x) (mod p(x) ) g(x) e h(x) hanno lo stesso resto r(x) nella divisione per p(x) . Dalla proposizione precedente si ha che g(x) = q(x)·p(x) + r(x) , con deg r(x) < deg p(x) , per cui g(x) Ξ r(x) (mod p(x) ) . CONGRUENZA TRA POLINOMI La relazione di congruenza modulo p(x) tra polinomi è una relazione di equivalenza su F[x] . Inoltre, per ogni a(x)єF[x] si ha che [a(x)] = [r(x)] e quindi ciascuna classe può essere individuata mediante r(x) che è l’unico polinomio della classe avente grado minore di quello di p(x) . CONGRUENZA TRA POLINOMI Se il polinomio p(x) ha grado n , quanti sono i polinomi a coefficienti in GF(q) di grado minore di quello di p(x) ? Tenendo conto che ciascun termine di un tale polinomio ha un coefficiente che varia in q modi (da grado 0 a grado q-1) si ha che questi polinomi sono in numero di qn . Alternativamente, basta pensare che tali polinomi formano uno spazio vettoriale di dimensione n . L’ANELLO Rn D’ora in poi considereremo sempre p(x)=xn-1 e l’anello Rn costituito da tutti i polinomi di F[x] di grado strettamente minore di n . Le operazioni che lo rendono anello sono le usuali operazioni di addizione e di moltiplicazione tra polinomi, con la particolarità di ridurre il grado di tutti i polinomi al di sotto di n eseguendo la divisione per xn-1 , se necessario. OSSERVAZIONE Eseguendo l’addizione tra due polinomi di grado minore di n in nessun caso si può avere un polinomio di grado maggiore o uguale a n . Anche la moltiplicazione di uno scalare per un polinomio di grado minore di n non permette di avere un polinomio di grado maggiore o uguale a n . OSSERVAZIONE Al contrario, eseguendo la moltiplicazione tra due polinomi di grado minore di n si può ottenere un polinomio di grado maggiore o uguale a n : solo in questo ultimo caso si esegue la divisione per xn-1 e si considera il polinomio resto. OSSERVAZIONE L’analogia tra Zn e Rn è evidente; anzi conviene osservare esplicitamente che come Zn è solo un anello se n non è primo, mentre è un campo se n è primo, così Rn è solo un anello se il polinomio p(x) è riducibile nel campo F , mentre è un campo se p(x) è irriducibile nel campo F . ESEMPIO 1 Se F=Z2={0,1} e p(x) = x2-1 si ha che R2 = {0,1,x,1+x} . La cardinalità dell’insieme R2 è 22=4 perché R2 = { r(x) | deg r(x)<2 } = = {a0+a1x | (a0,a1)єZ22 } . Ora a0 , come pure a1 , può assumere solo i valori 0 e 1 , per cui tutte le possibili combinazioni sono 4 . Come detto sopra, la cardinalità dell’insieme Rn è sempre uguale a qn . ESEMPIO 1 In Z2={0,1} il polinomio p(x) = x2-1 è riducibile per cui R2 è un anello e non un campo; 0 1 x 1+x 0 0 1 x 1+x 1 1 0 1+x x x x 1+x 0 1 1+x 1+x x 1 0 0 1 x 1+x 0 0 0 0 0 1 0 1 x 1+x x 0 x 1 1+x 1+x 0 1+x 1+x 0 Da queste tabelle si vede che R2 è isomorfo a Z4 . TEOREMA Teor. : La struttura algebrica (Rn ,+,·) è un anello commutativo unitario. In particolare, (Rn ,+,·) è un campo se e solo se il polinomio p(x) è irriducibile in F[x]. OSSERVAZIONE Come detto in precedenza, noi utilizzeremo qui sempre il polinomio riducibile p(x)=xn-1 = (x-1)(xn-1+xn-2+ … +x2+x+1 ) ; per questo, Rn sarà sempre un anello e non sarà mai un campo. ESEMPIO Se, per esempio, consideriamo F=Z2={0,1} e p(x)=1+x+x2 abbiamo un campo. Infatti F[x]/(1+x+x2) = {0,1,x,1+x} è un campo perché 1+x+x2 non è riducibile in Z2[x] . Si verifica facilmente che 1 è inverso di se stesso e che x e 1+x sono l’uno inverso dell’altro. OSSERVAZIONE ATTENZIONE: la divisibilità o meno di un polinomio dipende in modo essenziale dal campo in cui sono considerati i coefficienti. Il polinomio 1+x+x2 non è riducibile in Z2[x], ma è riducibile in Z3[x] , infatti si ha 1+x+x2 = (2+x)(2+x) = (2+x)2 . CODICI CICLICI DEF. : Un [n,k]-codice C su GF(q) si dice ciclico se verifica la seguente proprietà (a0,a1,…,an-1)єC (an-1,a0,…,an-3,an-2)єC. Ovviamente lo shift può essere ripetuto più volte. Conviene notare esplicitamente che un codice ciclico è un codice LINEARE che verifica la proprietà scritta sopra. NOTAZIONE Conviene anche segnalare esplicitamente che viene usata la notazione ( a0, a1, …, an-1 ) e non ( a1, a2, …, an ) per rendere evidente l’identificazione di (a0, a1, …, an-1 ) con il polinomio a(x) = a0 + a1 x + … + an-1 xn-1 . ESEMPI ESEMPIO : Si verifica che il codice binario C={000,101,011,110} è ciclico. CONTROESEMPIO : Il codice binario C={0000,1001,0110,1111} non è ciclico, ma è equivalente ad un codice ciclico: basta scambiare la terza con la quarta componente. OSSERVAZIONI L’elemento neutro dell’addizione in Rn= F[x]/(xn-1) = {r(x) | deg r(x) < n } è proprio (xn-1) . Infatti se a(x) є Rn si ha che a(x)+(xn-1) = a(x) perchè eseguendo la divisione per (xn-1) si ha come resto esattamente a(x) . Di conseguenza possiamo considerare xn-1=0 , cioè xn=1 e, poi, xn+1=x , xn+2=x2 e così via. Questa osservazione evita di dover eseguire effettivamente le divisioni per (xn-1) . OSSERVAZIONI L’osservazione precedente consente di capire bene come sia opportuno utilizzare i polinomi, oltre che i vettori, nello studio dei codici ciclici. Sia C un codice ciclico e sia (a0, a1, …, an-1 )∈C che possiamo identificare con il polinomio a(x) = a0 + a1 x + … + an-1 xn-1 . La proprietà dei codici ciclici si esprime dicendo che anche x⋅a(x) è una parola di C . OSSERVAZIONI Infatti si ha x⋅a(x)= x⋅(a0 + a1x +…+ an-2xn-2 + an-1xn-1)= = a0x + a1x2 +…+ an-2xn-1 + an-1xn = = an-1 + a0 x + … + an-2 xn-1 ; Questo polinomio si identifica con il vettore dei suoi coefficienti (an-1 , a0 , … , an-2 ) che è quello iniziale shiftato di un posto. Ovviamente moltiplicando il polinomio dato per x2 si effettua uno shift di due posti e così via. TEOREMA Teor. : Un codice C di Rn è ciclico se e solo se verifica le due condizioni seguenti: 1) a(x) , b(x)∈C ⇒ a(x)+b(x)∈C ; 2) a(x)∈C , r(x)∈Rn ⇒ r(x)⋅a(x)∈C . DIMOSTRAZIONE Dim. – Le due condizioni sono necessarie; infatti se C è ciclico, essendo lineare, deve essere chiuso rispetto all’addizione, cioè deve verificare la prima proprietà. Siano r(x) = r0+r1x+ … +rn-1xn-1 e a(x)∈C ; ora r(x)⋅a(x) = (r0+r1x+ … +rn-1xn-1)⋅a(x) = = r0 ⋅a(x) +r1x⋅a(x) + … +rn-1xn-1 ⋅a(x) ∈ C . DIMOSTRAZIONE Le due condizioni date sono anche sufficienti se si tiene conto del fatto che la prima è la condizione di chiusura rispetto all’addizione; dalla seconda, nei casi particolari di un polinomio di grado 0 e del polinomio x , si deducono le altre due proprietà richieste. TEOREMA Teor. : Sia a(x)∈Rn , allora ( a(x) ) = { r(x)⋅a(x) | r(x)∈Rn } è un codice ciclico, detto il codice ciclico generato dal polinomio a(x) . La dimostrazione è ovvia. Più avanti si dimostrerà che tutti i codici ciclici si ottengono in questo modo. TEOREMA Teor. : Sia C un codice ciclico non banale di Rn , allora 1) in C esiste uno ed un solo polinomio monico g(x) avente grado minimo; 2) C = ( g(x) ) ; 3) g(x) è un divisore di xn-1 . COMMENTO Quest’ultimo risultato stabilisce come si ottengono tutti e soli i codici ciclici di Rn ; infatti g(x) deve essere divisore di xn-1, la fattorizzazione di quest’ultimo in fattori monici irriducibili ci dice quanti e quali sono tutti i codici ciclici di lunghezza n in Rn . ESEMPIO Siano allora GF(2)=Z2={0,1} e p(x)=x3-1, R3={0,1,x,1+x,x2,1+x2,x+x2,1+x+x2} x3-1=(x+1)(1+x+x2) gli unici divisori di x3-1 sono 1 , 1+x , 1+x+x2 , x3-1 . Pertanto i codici binari ciclici di lunghezza tre sono esattamente 4. ESEMPIO R3={0,1,x,1+x,x2,1+x2,x+x2,1+x+x2} = ={000,100,010,110,001,101,011,111} (1) = {000,100,010,110,001,011,101,111} ; (1+x) = {000,110,011,101} ; (1+x+x2) = {000,111} ; (x3-1) = {000} . OSSERVAZIONE Come si vede nell’esempio precedente, al crescere del grado del polinomio generatore, diminuisce il numero degli elementi del codice ciclico. POLINOMIO GENERATORE DEF. : L’unico polinomio monico di grado minimo di un codice ciclico C si chiama polinomio generatore di C . OSSERVAZIONI Se C=( g(x) ) , allora per ogni kєGF(q) , k≠0 : C=( k g(x) ) . In un codice C= ( g(x) ) esistono anche altri polinomi che generano lo stesso codice C ma tutti hanno grado superiore al grado di g(x) : per questo g(x) si dice IL polinomio generatore. ESEMPIO Il codice ciclico binario di R3 C = { 0 , 1+x , 1+x2 , x+x2 } è generato tanto dal polinomio 1+x2 , quanto dal polinomio 1+x : solo quest’ultimo viene detto IL polinomio generatore di C perché è quello monico di grado minimo. TEOREMA Teor. : Sia g(x) = g0 + g1 x + … + xr il polinomio generatore di un codice ciclico C , allora il suo termine noto g0 non può essere nullo. DIMOSTRAZIONE Dim. – Moltiplicando g(x) per xn-1 si ha che xn-1 g(x) = xn-1 (g0 + g1 x +…+ xr ) = = xn x-1 (g0 + g1 x +…+ xr ) = = x-1 (g0 + g1 x +…+ xr ) = = g1+ g2 x + … + xr-1 + … + g0 xn-1 appartiene al codice ciclico C ; se fosse g0 = 0 , apparterrebbe a C anche un polinomio di grado r-1 che è minore di deg ( g(x) ) = r . COMMENTO Si potrebbe pensare che lo stesso accada anche per i coefficienti intermedi, ma non è così. La dimostrazione precedente tiene conto del fatto che, essendo C un codice ciclico, è possibile shiftare in avanti ma anche indietro le componenti dei vettori. COMMENTO Lo spostamento indietro di un posto porta il vettore g(x)=g0g1 … gr-1 1 0 … 0 (gr=1 è il coefficiente del termine di grado r ) nel vettore x-1g(x)=g1 … gr-110 … 0g0 (ora gr=1 è il coefficiente del termine di grado r-1 ); lo spostamento indietro di due posti porta il vettore iniziale in x-2g(x) = g2 … gr-110 … 0 g0 g1 : anche se g1=0 ci sarebbe comunque g0≠0 . MATRICE GENERATRICE DI UN CODICE CICLICO Teor. : Sia C un codice ciclico di lunghezza n e sia g(x)=g0+g1x+…+xr il suo polinomio generatore. Allora 1. dim C = n-r ; 2. una matrice generatrice di C è costituita da g(x), xg(x), x2g(x), … , xn-1-rg(x) , cioè : MATRICE GENERATRICE DI UN CODICE CICLICO una matrice generatrice di C è di tipo (n-r)×n e può essere scritta come segue G = g0 g1 g2 … 1 0 0 …… 0 0 g0 g1 … gr-1 1 0 …… 0 …………………………………………… 0 … 0 … 0 g0 g1 … …… gr-1 1 DIMOSTRAZIONE La prima riga della matrice G si ottiene scrivendo i coefficienti di g(x) che sono r+1 e completando la riga con tanti 0 quanti ne servono per arrivare a n che è la lunghezza delle parole del codice: gli 0 sono n-(r+1)=(n-1)-r . L’aggiunta di una riga sposta gr=1 di un posto: servono n-1-r righe ulteriori per portare gr=1 in ultima posizione; pertanto le righe della matrice G sono esattamente n-r . DIMOSTRAZIONE Queste n-r righe sono indipendenti perché n-r<n e la posizione degli elementi g0≠0 assicura che G abbia rango massimo. Inoltre ogni polinomio di C è del tipo r(x)⋅g(x) , con r(x)= r0+r1x+ … +rn-1xn-1 e, quindi, si ha che r(x)⋅g(x) = (r0+r1x+ … +rn-1xn-1)⋅g(x) = = r0 ⋅g(x) +r1x⋅g(x) + … +rn-1xn-1 ⋅g(x) , cioè r(x)⋅g(x) è combinazione lineare delle righe di G secondo i coefficienti ri . ESEMPIO Sia F = Z3 = {0,1,2} p(x) = x4-1 = (x-1)(x+1)(x2+1) r=2 , n=4 , n-1-r=1 C = (1+x2) g(x)=1+x2=(1010) xg(x)=x+x3= (0101) G= 1 0 0 1 1 0 0 1 IL CONTROLLO DI PARITÀ PER UN CODICE CICLICO DEF. : Sia C = ( g(x) ) con g(x) divisore di xn-1 e deg( g(x) ) = r ; allora esiste un unico polinomio h(x) tale che sia xn-1 = g(x)·h(x) , deg( h(x) ) = n-r . Questo polinomio h(x) prende il nome di polinomio di controllo del codice ciclico C . OSSERVAZIONI Come visto sopra, la matrice generatrice è di tipo (n-r)×n . Ne consegue che k=n-r , cioè r=n-k . Inoltre da xn-1 = g(x)·h(x) consegue che n = deg( g(x)·h(x) ) = = deg( g(x) )+deg( h(x) ) = r+deg( h(x) ) ; da ciò segue che deg( h(x) ) = n-r = k . ATTENZIONE Sia h(x) = h0 + h1 x + … + hn-r xn-r . Anche il polinomio h(x) è generatore di un codice ciclico: si potrebbe pensare che ( h(x) ) sia il codice duale C⊥ di C dal momento che ha dimensione r = n-(n-r) . Questo in generale non è vero; invece, si può dimostrare che il codice C⊥ è generato dal polinomio reciproco di h(x) che è hn-r + hn-r-1 x + …+ h1 xn-r-1 + h0 xn-r . MATRICE DI CONTROLLO TEOR. : Sia C un [n,k]-codice ciclico e sia h(x)=h0 + h1 x + … + hk-1 xk-1 + hk xk ; allora il codice duale C⊥ ha come matrice generatrice hk hk-1 hk-2 … h0 0 0 …… 0 H= 0 hk hk-1 … h1 h0 0 …… 0 …………………………………………… 0 … 0 … 0 hk hk-1 … …… h1 h0 . COMMENTO FINALE Se abbiamo un (n,M,d)q-codice C qualsiasi per conoscere e per rappresentare tutte le sue parole siamo costretti a scriverle tutte e, quindi, dobbiamo scrivere o mettere nella memoria di un computer una matrice di tipo M×n . Se il codice è lineare basta solo una matrice generatrice, se il codice è ciclico allora basta un solo vettore (o un solo polinomio).