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).