Sunteți pe pagina 1din 140

INCERTITUDINE ŞI ENTROPIE

1. Cuprins:
• Noţiuni de bază: incertitudine, entropie, informaţie. Surse discrete de
informaţie
• Canale discrete fără zgomot: coduri unic decodabile şi coduri fără prefix;
• Canale discrete fără memorie şi cu zgomot. Coduri corectoare de erori;
• Clase de coduri liniare: coduri Hamming, coduri liniare şi coduri duale, co-
duri Golay, coduri perfecte, coduri Reed-Muller, coduri MacDonald, coduri
Hadamard, coduri produs, coduri optimale.
• Coduri neliniare: coduri Preparata, coduri convoluţionale, decodificarea
secvenţială, algoritmul Viterbi de decodificare, supra-codificare şi turbo-
coduri.
• Aplicarea teoriei informaţiei şi teoriei codurilor ı̂n criptografie.

2. Bibliografie:
• R. A. Ash: Information Theory, John Wiley Sons, Inc., 1965;
• A. Atanasiu: Teoria codurilor corectoare de erori, Editura Universităţii
Bucureşti 2001;
• M. Borda: Fundamentals in Information Theory and Coding, Springer-
Verlag Berlin Heidelberg, 2011;
• D.J. C. MacKay: Information Theory, Inference, and Learning Algorithms;
Cambridge University Press, 2003;
• A.T. Murgan: Principiile teoriei informaţiei ı̂n ingineria informţiei şi a
comunicaţiilor, Editura Academiei Române, Bucureşti 1998;

3. Evaluare
• Activitate curs şi seminar: 20p
• Lucrări de verificare: 60p
• Examinare finală (colocviu): 20p

Pentru promovarea disciplinei, studentul trebuie să obţină cel puţin 50%
din punctajul total.

4. Incertitudine şi entropie


Exemplu 4.1. Considerăm o mulţime S = {1, 2, . . . , m} din care Alex alege un
număr. Evident, apare incertitudinea pentru că nu ştim numărul ales de Alex.
Pentru a afla numărul, Ion ı̂i pune o serie de ı̂ntrebări cu variante de răspuns
DA/NU:
• Numărul este par? (DA/NU)
• Numărul este mai mic decât 10? (DA/NU)

Date: 2022-2023.
1
2 INCERTITUDINE ŞI ENTROPIE

Incertitudinea este cu atât mai mare cu cât Ion formulează mai multe ı̂ntrebări.
Deci putem să măsurăm incertitudinea prin numărul de ı̂ntrebări necesare pentru
a descoperi numărul ales de Alex.
Metoda: Considerăm că mulţimea S are |S| = 2n (= m) elemente şi marcăm
variantele de răspuns cu 0 =NU şi cu 1 =DA.
Considerăm partiţia S = {1, 2, . . . , 2n } = {1, 2, . . . , 2n−1 } ∪ {2n−1 + 1, . . . , 2n }
• Întrebare: Numărul ales este mai mare decât 2n−1 ?
Presupunem că răspunsul este NU, deci marcăm cu 0 răspunsul. Prin urmare,
pentru a doua ı̂ntrebare, considerăm doar mulţimea {1, 2, . . . , 2n−1 } pe care o
partiţionăm ı̂n două submulţimi cu acelaşi cardinal
{1, 2, . . . , 2n−1 } = {1, 2, . . . , 2n−2 } ∪ {2n−2 + 1, . . . , 2n−1 }
• Întrebare: Numărul ales este mai mare decât 2n−2 ?
Presupunem că răspunsul este DA, deci marcăm cu 1 răspunsul şi, pentru a treia
ı̂ntrebare, considerăm mulţimea {2n−2 + 1, . . . , 2n−1 }.

Deci după n ı̂ntrebări, Ion află numărul ales de către Alex. Cum am presupus că
|S| = 2n , obţinem imediat n = log2 |S|.
Observaţie. • Dacă |S| = 2k + 1, atunci procedăm asemănător şi ı̂mpărţim
S = {1, 2, . . . , k} ∪ {k + 1, . . . , 2k + 1}.
• Dacă 2n ≤ |S| < 2n+1 , atunci n ≤ log2 |S| < n + 1 (fie avem nevoie de n
ı̂ntrebări, fie de n + 1 ı̂ntrebări).
• Dacă ı̂ntrebările admit k variante diferite de răspuns (k 6= 2), atunci
ı̂mpărţim mulţimea S ı̂n k submulţimi (preferabil cu m/k elemente fiecare).
Prin urmare, dacă |S| = k n , atunci avem nevoie de n = logk |S| ı̂ntrebări.
Mai mult:
logk |S| = logk 2 · log2 |S|
Definiţie 4.1. Considerăm S = {e1 , . . . , em } un sistem finit de evenimente (adică
avem un experiment ı̂n urma căruia apare una din cele m posibilităţi diferite). Se
numeşte cantitatea de incertitudine a sistemului S numărul
h(|S|) := log2 |S|.
Observaţie. Cantitatea de incertitudine h(|S|) este cel mult egală cu |S|.
Exemplu 4.2. Presupunem că vrem să aşezăm o piesă pe tabla de şah. Prin
urmare, sistemul finit de evenimente este S = {1, . . . , 64}, deoarece există 64 = 26
pătrate pe tabla de şah unde putem plasa piesa. Atunci cantitatea de incertitudine
este h(|S|) = log2 64 = 6.
INCERTITUDINE ŞI ENTROPIE 3

Observaţie. • Date sistemele finite de evenimente S1 şi S2 astfel ı̂ncât |S1 | =


|S2 |, atunci h(|S1 |) = h(|S2 |) (adică cantitatea de incertitudine este deter-
minată de numărul posibilităţilor de apariţie a evenimentelor din sistem,
nu şi de natura evenimentelor).
• Date sistemele finite de evenimente S1 şi S2 astfel ı̂ncât |S1 | < |S2 |, atunci
h(|S1 |) < h(|S2 |) (gradul de incertitudine este mai mare pe măsură ce creşte
numărul evenimentelor din sistem)
• Dacă S este un sistem finit cu două evenimente, atunci
h(|S|) = log2 2 = 1
şi reprezintă unitatea de măsură a incertitudinii, numită bit (binary infor-
mation unit).
Pentru două sisteme finite de evenimente S1 = {e1 , . . . , em } şi S2 = {f1 , . . . , fn }
avem
S1 × S2 = {(ei , fj ) : 1 ≤ i ≤ m, 1 ≤ j ≤ n}
şi se numeşte sistem de evenimente independente (producerea unui eveniment din
S1 este independentă de producerea unui eveniment din S2 ).
Propoziţie 4.1. Cantitatea de incertitudine din S1 × S2 este egală cu suma can-
tităţilor de incertitudine din S1 şi S2 . Mai general, dacă S1 , . . . , Sm sunt sisteme
finite de evenimente, atunci:
h(|S1 × . . . × Sm |) = h(|S1 |) + . . . + h(|Sm |).
h(|S1 × S2 |) = log2 |S1 × S2 | = log2 (|S1 | · |S2 |) =
= log2 |S1 | + log2 |S2 | = h(|S1 |) + h(|S2 |).
Considerăm un sistem de evenimente S = {e1 , . . . , em } şi notăm că pi probabili-
m
P
tatea de apariţie a evenimentului ei , 0 ≤ pi ≤ 1, pi = 1. Notăm cu (S, P ) spaţiul
i=1
probabilistic, unde P = {p1 , . . . , pm }.
Definiţie 4.2. Fie (S, P ) spaţiul probabilistic. Cantitatea de incertitudine din
acest spaţiu este
m
X
H(P ) = H(p1 , . . . , pm ) = − pi log2 pi
i=1

şi se numeşte entropie.


Observaţie. Ţinând seama de lim x log2 x = 0, prin convenţie 0 · log2 0 = 0.
x→0
1 1
Observaţie. Dacă avem spaţiul probabilistic (S, P ) cu P = m, . . . , m , atunci
m
X 1 1 1
H(P ) = − log2 = − log2 = log2 m = log2 |S| = h(|S|).
i=1
m m m

Deci entropia spaţiul probabilistic cu distribuţie uniformă este egală cu măsura


incertitudinii spaţiului de evenimente S fără a considera probabilităţile acestor
evenimente.
4 INCERTITUDINE ŞI ENTROPIE

Observaţie. Unitatea de măsură a entropiei este bit-ul. Dacă alegem baza e, atunci
unitatea de măsură este nat (natural digit), iar dacă alegem baza 10 avem dit
(decimal digit). În plus, avem:
1 1
1nat = = 1.44bit, 1dit = = 3.32bit.
ln 2 log10 2
Exemplu 4.3. La un concurs de echitaţie participă opt concurenţi (S = {1, . . . , 8}),
iar probabilităţile de câştig sunt P = {1/2, 1/4, 1/8, 1/16, 1/64, 1/64, 1/64, 1/64}.
Atunci incertitudinea asupra acestui concurs este
1 1 1 1 1 1
H(P ) = − log2 − log2 − log2 −
2 2 4 4 8 8
1 1 1 1 1 1 1 1 1 1
− log2 − log2 − log2 − log2 − log2 ,
16 16 64 64 64 64 64 64 64 64
deci H(P ) = 2.
În schimb, dacă cei opt concurenţi aveau şanse egale de câştig, deci P = {pi =
1/8, pentru orice 1 ≤ i ≤ 8}, atunci incertitudinea era H(P ) = log2 8 = 3.
Teoremă 4.1. Pentru orice spaţiu probabilistic (S, P ), cu |S| = m, avem 0 ≤
H(P ) ≤ log2 m. Mai mult, max H(P ) = log2 m şi se obţine pentru distribuţia
P
uniformă ı̂n probabilitate.
Deci incertitudinea maximă apare când evenimentele sunt echiprobabile (sau nu
se cunosc probabilităţile acestora).
1 1

Demonstraţie: Demonstrăm că H(P ) ≤ H m ,..., m = log2 m. Avem nevoie de
următorul rezultat
Lema 4.2. Fie p1 , . . . , pm şi q1 , . . . , qm două sisteme de probabilităţi definite pe
aceeaşi mulţime de evenimente S. Atunci:
Xm Xm
pi log2 qi ≤ pi log2 pi ,
i=1 i=1
egalitatea se obţine dacă şi numai dacă pi = qi .

Demonstraţie lemă: Avem log2 x = log2 e · ln x şi folosim inegalitatea ln x ≤ x − 1,
cu egalitatea dacă şi numai dacă x = 1. Atunci ln pqii ≤ pqii − 1, deci
m m   X m m
X qi X qi X
pi ln ≤ pi −1 = qi − pi = 1 − 1 = 0.
i=1
pi i=1
pi i=1 i=1
Dar
m m m m
X qi X X X
pi ln = pi (ln qi − ln pi ) = pi ln qi − pi ln pi ≤ 0
i=1
pi i=1 i=1 i=1
Atunci
m m m m
!
X X X X
pi log2 qi − pi log2 pi = log2 e pi ln qi − pi ln pi ≤ 0,
i=1 i=1 i=1 i=1
ceea ce ı̂ncheie demonstraţia lemei. 
INCERTITUDINE ŞI ENTROPIE 5

1 1

Pentru a demonstra că H(P ) ≤ H m, . . . , m = log2 m, avem din lemă
m m
X 1 X
pi log2 ≤ pi log2 pi ,
i=1
m i=1
1
egalitatea se obţine dacă şi numai dacă pi = m. Atunci
m m
X X 1
H(P ) − log2 m = − pi log2 pi + pi log2 ≤ 0,
i=1 i=1
m
1
cu egalitate dacă şi numai dacă pi = m.

Propoziţie 4.2. • Date spaţiile probabilistice (S1 , P1 ) şi (S2 , P2 ) cu |S1 | =


|S2 | şi P1 = P2 , atunci H(P1 ) = H(P2 ). Deci entropia depinde doar de
probabilităţile considerate, nu de natura evenimentelor din spaţiile consid-
erate.
• Avem H(p1 , . . . , pm ) = H(p1 , . . . , pm , 0) din convenţia făcută. Este clar că
un eveniment cu probabilitate 0 (imposibil) nu influenţează cantitatea de
incertitudinea a sistemului, ı̂ntrucât acesta nu se va produce.
Proprietatea de ramificare: Considerăm că am grupat evenimentele din S ı̂n
două submulţimi distincte A = {e1 , . . . , en } şi B = {f1 , . . . , fm } cu probabilităţile
Pn m
P
p = pi şi q = qi , p + q = 1. Dacă, ı̂n prima etapă, se alege mulţimea A,
i=1 i=1
atunci, ı̂n etapa următoare, poate fi ales un eveniment din cele n cu probabilitatea
pi /p. Dacă, ı̂n prima etapă, se alege mulţimea B, atunci, ı̂n etapa următoare, poate
fi ales un eveniment din cele m cu probabilitatea qi /q.
Atunci:
   
p1 pn q1 qm
H(p1 , . . . , pn , q1 , . . . , qm ) = H(p, q) + pH ,... + qH ,...
p p q q
Propoziţie 4.3. • Entropia este o funcţie simetrică ı̂n raport cu fiecare ar-
gument (simetria ı̂nseamnă că o probabilitate oarecare, care ia o anumită
valoare, induce acelaşi efect cu cel produs de o altă probabilitate ce ia
aceeaşi valoare). Prin urmare, entropia este invariantă ı̂n raport cu orice
permutare a probabilităţilor, deci
H(p1 , . . . , pm ) = H(pπ(1) , . . . , pπ(m) ), pentru orice permutare π;
• H(p1 , . . . , pm ) este o funcţie continuă ı̂n toate variabilele;
 
• H(p1 , . . . , pm ) = H(p1 + p2 , p3 , . . . , pm ) + (p1 + p2 )H p1p+p
1
, p2
2 p1 +p2
1 1

• H m ,... m este o funcţie monoton crescătoare
Demonstraţie: Demonstrăm a treia proprietate, celelalte fiind evidente din pro-
prietăţile funcţiei logaritm. Avem:
Xm m
X
H(p1 , . . . , pm ) = − pi log2 pi = −p1 log2 p1 − p2 log2 p2 − pi log2 pi =
i=1 i=3
m
X
= −(p1 + p2 ) log2 (p1 + p2 ) − pi log2 pi +
i=3
+(p1 + p2 ) log2 (p1 + p2 ) − p1 log2 p1 − p2 log2 p2 =
= H(p1 +p2 , p3 , . . . , pm )+p1 log2 (p1 +p2 )+p2 log2 (p1 +p2 )−p1 log2 p1 −p2 log2 p2 =
6 INCERTITUDINE ŞI ENTROPIE

Dar
p1 log2 (p1 + p2 ) + p2 log2 (p1 + p2 ) − p1 log2 p1 − p2 log2 p2 =
= p1 (log2 (p1 + p2 ) − log2 p1 ) + p2 (log2 (p1 + p2 ) − log2 p2 ) =
p1 p2
= −p1 log2 − p2 log2 =
p1 + p2 p1 + p2
 
p1 p1 p2 p2
= (p1 + p2 ) − log2 − log2 =
p1 + p2 p1 + p2 p1 + p2 p1 + p2
 
p1 p2
= (p1 + p2 )H , ,
p1 + p2 p1 + p2
ceea ce ı̂ncheie demonstraţia. 

Observaţie. Orice sistem probabilistic (S, P ) poate fi reprezentat ca o variabilă


aleatoare discretă X, care ia valorile ei ∈ S şi pX (ei ) = pi . Invers, orice variabilă
aleatoare discretă furnizează un sistem probabilistic. Reamintim că o variabilă
aleatoare X este o funcţie X : Ω → {e1 , . . . , em }, unde Ω este spaţiul eşantion
(mulţimea finită a rezultatelor unui experiment, numite evenimente). Unui eveni-
ment i se asociază o probabilitate
X
pX (ei ) = p(ω),
{ω:X(ω)=ei }

unde {p(ω) : ω ∈ Ω} sunt probabilităţile definite pe Ω. Astfel, mulţimea P =


{pX (ei ) : ei ∈ S} defineşte mulţimea de probabilităţi din sistemul probabilistic
(S, P ).
Astfel, putem defini entropia variabilei aleatoare
 
x1 x2 . . . xn
X:
p1 p2 . . . pn
ca fiind
n
X X
H(X) = − pi log2 pi = − pX (xi ) log2 pX (xi )
i=1 xi ∈S
şi măsoara incertitudinea asociată variabilei aleatoare X.
Exemplu 4.4. La un concurs participă doi studenţi. Experimentul considerat este
ordinea ı̂n care se clasează cei doi studenţi. Notăm cu xi evenimentul elementar:
studentul i se clasează pe locul ı̂ntâi.
În primul caz, considerăm că cei doi studenţi au şanse egale de câştigare a con-
cursului, deci repartiţia este:
 
x1 x2
X: .
0.5 0.5

În al doilea caz, presupunem că avem repartiţia:


 
x1 x2
X: .
0.9 0.1
Este clar că ı̂n primul caz cantitatea de incertitudine este mare, iar ı̂n cazul al
doilea cantitatea de incertitudine este mică.
INCERTITUDINE ŞI ENTROPIE 7

Exemplu 4.5. Considerăm cele două repartiţii


   
x1 x2 x1 x2
X: , Y : .
0.5 0.5 0.9 0.1
Avem entropia lui X este:
2
X 1 1 1 1 1 1
H(X) = − pi log2 pi = − log2 − log2 = + = 1,
i=1
2 2 2 2 2 2

iar entropia lui Y este:


2
X 9 9 1 1
H(Y ) = − pi log2 pi = − log2 − log2 ≈ 0.467,
i=1
10 10 10 10

Exemplu 4.6. Considerăm că avem de ales un număr din S = {1, . . . , 5}, iar
probabilităţile sunt P = {0.3, 0.2, 0.2, 0.15, 0.15}. Pentru a afla numărul ales se
pun ı̂ntrebări cu variantele de răspuns DA/NU, astfel:

Numărul de ı̂ntrebări necesar pentru a afla numărul selectat pune ı̂n evidenţă
o variabilă aleatoare Y . Valorile acestei variabile sunt 2 (două ı̂ntrebări necesare
pentru a afla x1 , x2 sau x3 ) şi 3 (trei ı̂ntrebări necesare pentru a afla x4 sau x5 ).
Deci  
2 3
Y : ,
0.7 0.3
iar valoarea medie a acestei variabile este E(Y ) = 2 · 0.7 + 3 · 0.3 = 2.3.
Dacă X este variabila aleatoare asociată sistemului (S, P ), atunci entropia este:
H(X) = −0.3 log2 0.3 − 0.2 log2 0.2 − 0.2 log2 0.2−

−0.15 log2 0.15 − 0.15 log2 0.15 = 2.27.


Prin urmare, H(X) este ”ı̂n medie, cel mai mic număr de ı̂ntrebări cu răspuns
DA/NU necesar pentru a determina observaţia făcută”.
Considerăm S1 = {e1 , . . . , en }, S2 = {f1 , . . . , fm }, deci putem să definim sis-
temul probabilistic (S1 × S2 , P ), unde S1 × S2 = {(ei , fj ) : 1 ≤ i ≤ n, 1 ≤ j ≤ m}
şiP P de probabilităţi asociată P = {pi,j : 1 ≤ i ≤ n, 1 ≤ j ≤ m},
mulţimea
pi,j = 1.
1≤i≤n 1≤j≤m
8 INCERTITUDINE ŞI ENTROPIE

f1 f2 ... fm P1
e1 p1,1 p1,2 ... p1,m p1
e2 p2,1 p2,2 ... p2,m p2
..
. ... ... ... ... ...
en pn,1 pn,2 ... pn,m pn
P2 q1 q2 ... qm
Considerăm variabilele aleatoare
   
e1 e2 . . . e n f1 f2 ... fm
X: şi Y :
p1 p2 . . . pn q1 q2 ... qm
asociate sistemelor probabilistice (S1 , P1 ), (S2 , P2 ), unde P1 = {p1 , . . . , pn }, P2 =
{q1 , . . . , qm } şi
m
X n
X
pX (ei ) = pi = pi,j , 1 ≤ i ≤ n, pY (fj ) = qj = pi,j , 1 ≤ j ≤ m.
j=1 i=1

Atunci vectorul aleator bidimensional (X, Y ), ce presupune realizarea concomi-


tentă a X şi Y , corespunde sistemului probabilistic (S1 ×S2 , P ), unde pX,Y (ei , fj ) =
pi,j .
Variabilele aleatoare X şi Y sunt independente dacă şi numai dacă p(X,Y ) (x, y) =
pX (x) · pY (y), pentru orice (x, y) ∈ S1 × S2 . Prin urmare, avem trei entropii
diferite corespunzătoare celor două variabile aleatoare X, Y şi vectorului bidimen-
sional (X, Y ):
X X
H(X) = − pX (x) log2 pX (x), H(Y ) = − pY (y) log2 pY (y)
x∈S1 y∈S2
X
H(X, Y ) = − pX,Y (x, y) log2 pX,Y (x, y) =
(x,y)∈S1 ×S2
X X
=− pX,Y (x, y) log2 pX,Y (x, y)
x∈S1 y∈S2
Evident, ne interesează legătura dintre cele trei entropii.
Exemplu 4.7. Considerăm sistemul probabilistic (S1 × S2 , P ) ce corespunde vec-
torului bidimensional (X, Y ):
f1 f2 f3 f4
1 1 1 1
e1 8 16 32 32
p1
1 1 1 1
e2 16 8 32 32
p2
1 1 1 1
e3 16 16 16 16
p3
1
e4 4
0 0 0 p4
q1 q2 q3 q4
Avem variabila aleatoare X:
   
e e2 e3 e4 e1 e2 e3 e4
X: 1 ⇔X: 1 1 1 1
p1 p2 p3 p4 4 4 4 4
unde:
4
X 1 1 1 1 1
p1 = P (X = e1 ) = p1,i = + + + =
i=1
8 16 32 32 4
4
X 1 1 1 1 1
p2 = P (X = e2 ) = p2,i = + + + =
i=1
16 8 32 32 4
INCERTITUDINE ŞI ENTROPIE 9

4
X 1 1 1 1 1
p3 = P (X = e3 ) = p3,i = + + + =
i=1
16 16 16 16 4
4
X 1 1
p4 = P (X = e4 ) = p4,i = +0+0+0= .
i=1
4 4
Avem variabila aleatoare Y :
   
f1 f2 f3 f4 f1 f2 f3 f4
Y : ⇔Y : 1 1 1 1
q1 q2 q3 q4 2 4 8 8
unde:
4
X 1 1 1 1 1
q1 = P (Y = f1 ) = pj,1 = + + + =
j=1
8 16 16 4 2
4
X 1 1 1 1
q2 = P (Y = f2 ) = pj,2 = + + +0=
j=1
16 8 16 4
4
X 1 1 1 1
q3 = P (Y = f3 ) = pj,3 = + + +0=
j=1
32 32 16 8
4
X 1 1 1 1
q4 = P (Y = f4 ) = pj,4 = + + +0= .
j=1
32 32 16 8
Avem entropia lui X este:
1 1 1 1 1 1 1 1
H(X) = − log2 − log2 − log2 − log2 = 2 biţi
4 4 4 4 4 4 4 4
şi entropia lui Y este:
1 1 1 1 1 1 1 1 7
H(Y ) = − log2 − log2 − log2 − log2 = = 1.75 biţi
2 2 4 4 8 8 8 8 4
Entropia lui (X, Y ) este:
1 1 1 1 1 1 1 1
H(X, Y ) = − log2 − log2 − log2 − log2 −
8 8 16 16 32 32 32 32
1 1 1 1 1 1 1 1
− log2 − log2 − log2 − log2 −
16 16 8 8 32 32 32 32
1 1 1 1 1 1 1 1 1 1 23
− log2 − log2 − log2 − log2 − log2 = =
16 16 16 16 16 16 16 16 4 4 8
= 2.87 < 2 + 1.75
Teoremă 4.3. Pentru orice două variabile aleatoare X şi Y are loc:
H(X, Y ) ≤ H(X) + H(Y ),
cu egalitate dacă şi numai dacă X şi Y sunt independente.
Demonstraţie: Avem:
X X
H(X) + H(Y ) = − pX (x) log2 pX (x) − pY (y) log2 pY (y) =
x∈X y∈Y
  !
X X X X
=−  pX,Y (x, y) log2 pX (x) − pX,Y (x, y) log2 pY (y) =
x∈X y∈Y y∈Y x∈X
10 INCERTITUDINE ŞI ENTROPIE

XX
=− pX,Y (x, y)(log2 pX (x) + log2 pY (y))
x∈X y∈Y

Deci
XX
H(X) + H(Y ) = − pX,Y (x, y) log2 (pX (x)pY (y))
x∈X y∈Y

Dar, din Lemă, avem:


XX XX
pX,Y (x, y) log2 (pX (x)pY (y)) ≤ pX,Y (x, y) log2 pX,Y (x, y),
x∈X y∈Y x∈X y∈Y

prin urmare:
XX
H(X) + H(Y ) = − pX,Y (x, y) log2 (pX (x)pY (y)) ≥
x∈X y∈Y

XX
− pX,Y (x, y) log2 pX,Y (x, y) = H(X, Y ).
x∈X y∈Y

În plus, egalitatea are loc dacă şi numai dacă pX (x)pY (y) = pX,Y (x, y), echivalent
cu X şi Y sunt variabile aleatoare independente. 

Caz general: Putem să considerăm m variabile aleatoare X1 , . . . , Xm şi vec-


torul aleator m−dimensional X = (X1 , . . . , Xm ) cu probabiltăţile pX (x), unde
x = (x1 , . . . , xm ). Fiecare variabilă aleatoare Xi are distribuţiile de probabilitate
X
pXi (xi ) = pX (x1 , . . . , xi−1 , xi , xi+1 , . . . , xm )
x1 ,...,xi−1 ,xi+1 ,...,xm

Variabilele aleatoare X1 , . . . Xm sunt independente dacă şi numai dacă


pX (x) = pX1 (x1 ) · · · pXm (xm ).
Entropia vectorului m−dimensional X = (X1 , . . . , Xm ) este:
X
H(X) = − pX (x) log2 pX (x).
x∈X

Teoremă 4.4. Pentru orice m variabile aleatoare X1 , . . . , Xm are loc:


H(X) ≤ H(X1 ) + . . . + H(Xm ),
cu egalitate dacă şi numai dacă sunt independente.
Fie două variabile aleatoare X şi Y . Presupunem că observăm valoarea vari-
abilei Y = y. Atunci distribuţia variabilei X se modifică şi este caracterizată
de probabilităţile condiţionate pX/y (x, y) = p(x/y). Din formula lui Bayes avem
p(x, y) = p(y)p(x/y), deci
pX,Y (x, y)
pX/y (x, y) = .
pY (y)
Definiţie 4.3. Entropia lui X condiţionată de Y = y este definită prin
not
X
H(X/Y = y) = H(X/y) = − pX/y (x, y) log2 pX/y (x, y)
x∈X
INCERTITUDINE ŞI ENTROPIE 11

Observaţie.
n
X
H(X/Y = y) = − p(xi /y) log2 p(xi /y)
i=1
Dacă X şi Y sunt independente, atunci pX/y (x, y) = pX (x), pentru orice x, y, iar
entropia condiţionată H(X/y) devine
X
H(X/y) = − pX/y (x, y) log2 pX/y (x, y) =
x∈X
X
=− pX (x) log2 pX (x) = H(X)
x∈X

Am
P obţinut că pentru realizarea Y = y, entropia lui X devine H(X/y) =
− pX/y (x, y) log2 pX/y (x, y). Prin urmare obţinem o variabilă aleatoare
x∈X
 
H(X/y1 ) H(X/y2 ) . . . H(X/ym )
.
pY (y1 ) pY (y2 ) ... pY (ym )
Definiţie 4.4. Entropia lui X condiţionată de Y este valoarea medie a entropiilor
H(X/y), y ∈ Y , deci:
X
H(X/Y ) = pY (y)H(X/y) = pY (y1 )H(X/y1 ) + . . . + pY (ym )H(X/ym )
y∈Y

Exemplu 4.8. Considerăm vectorul bidimensional (X, Y ):


XY 0 1
1 1
0 3 3
pX (0)
1
1 3
0 pX (1)
pY (0) pY (1)
Obţinem imediat variabilele aleatoare
   
0 1 0 1
X: ⇔X:
pX (0) pX (1) 2/3 1/3
   
0 1 0 1
Y : ⇔Y :
pY (0) pY (1) 2/3 1/3
Calculăm entropiile:
2 2 1 1
H(X) = − log2 − · log2 ≈ 0.9183
3 3 3 3
2 2 1 1
H(Y ) = − log2 − · log2 ≈ 0.9183
3 3 3 3
1 1 1 1 1 1
H(X, Y ) = − log2 − log2 − log2 − 0 log2 0 =
3 3 3 3 3 3
≈ 1.585

H(X/Y = 0) = −pX/0 (0, 0) log2 pX/0 (0, 0) − pX/0 (1, 0) log2 pX/0 (1, 0)
Avem:
1
pX,Y (0, 0) 3 1
pX/0 (0, 0) = = 2 =
pY (0) 3
2
1
pX,Y (1, 0) 3 1
pX/0 (1, 0) = = 2 = ,
pY (0) 3
2
12 INCERTITUDINE ŞI ENTROPIE

deci
1 1 1 1
H(X/0) = − log2 − log2 = 1
2 2 2 2
Asemănător,
H(X/1) = −pX/1 (0, 1) log2 pX/1 (0, 1) − pX/1 (1, 1) log2 pX/1 (1, 1)
Avem:
1
pX,Y (0, 1)
pX/1 (0, 1) = = 31 = 1
pY (1) 3
pX,Y (1, 1) 0
pX/1 (1, 1) = = 2 = 0,
pY (1) 3
deci
H(X/1) = − log2 1 − 0 log2 0 = 0
Entropia lui X condiţionată de Y este
2 2 2
H(X/Y ) = pY (0)H(X/0) + pY (1)H(X/1) = · 1 + · 0 = .
3 3 3
De remarcat faptul că
H(X/1) ≤ H(X) ≤ H(X/0)
şi
H(X/Y ) ≤ H(X).
În plus, X şi Y nu sunt independente deoarece pX,Y (0, 0) 6= pX (0) · pY (0).
Teoremă 4.5. Pentru două variabile aleatoare X şi Y are loc:
H(X, Y ) = H(Y ) + H(X/Y ).
Demonstraţie: Avem:
X
H(X/Y ) = pY (y)H(X/y) =
y∈Y
!
X X
= pY (y) − pX/y (x, y) log2 pX/y (x, y) =
y∈Y x∈X
XX
=− pY (y)pX/y (x, y) log2 pX/y (x, y) =
x∈X y∈Y
XX pX,Y (x, y) pX,Y (x, y)
=− pY (y) log2 =
pY (y) pY (y)
x∈X y∈Y
XX
=− pX,Y (x, y)(log2 pX,Y (x, y) − log2 pY (y)) =
x∈X y∈Y
XX XX
=− pX,Y (x, y) log2 pX,Y (x, y) − pX,Y (x, y) log2 pY (y) =
x∈X y∈Y x∈X y∈Y
X X
= H(X, Y ) − ( pX,Y (x, y)) log2 pY (y) =
y∈Y x∈X
X
= H(X, Y ) − pY (y)) log2 pY (y) =
y∈Y
= H(X/Y ) − H(Y ).

INCERTITUDINE ŞI ENTROPIE 13

Observaţie. Evident, are loc relaţia


H(X, Y ) = H(X) + H(Y /X).
Prin urmare, incertitudinea vectorului (X, Y ) poate fi calculată ca fiind suma dintre
incertitudinea unei variabile, de exemplu Y si valoarea medie a incertitudiniilor
X/Y .
Corolar 4.1. Pentru două variabile X, Y are loc
H(X/Y ) ≤ H(X)
şi
H(Y /X) ≤ H(Y ).
Egalitatea se obţine dacă şi numai dacă variabilele sunt independente.
Demonstraţie: Reamintim că H(X, Y ) = H(Y )+H(X/Y ) şi că H(X, Y ) ≤ H(X)+
H(Y ). Avem:
H(X/Y ) = H(X, Y ) − H(Y ) ≤ H(X) + H(Y ) − H(Y ) = H(X).


Corolar 4.2. Pentru m variabile aleatoare X1 , . . . , Xm are loc:


H(X1 , . . . , Xm ) = H(X1 ) + H(X2 /X1 ) + . . . + H(Xm /X1 , . . . , Xm−1 ).
Exemplu 4.9. În teoria comunicaţiilor, semnalele sunt transmise prin intermediul
canalelor.

Presupunem că, la intrare, apar aleator semnalele din mulţimea I, cu anumite


probabilităţi, definind astfel variabila aleatoare X. De-a lungul transmisiei, sem-
nalele se pot modifica şi astfel apar semnalele recepţionate ce aparţin mulţimii J,
definind astfel variabila aleatoare Y . Este evident că există o dependenţă ı̂ntre
cele două tipuri de semnale (de la intrare şi de la ieşire), dependenţa descrisă
de probabilităţile condiţionate 0 ≤ pY /x (y, x) ≤ 1, pentru orice x ∈ I şi orice
P
y ∈ J, pY /x (y, x) = 1. Înţelegem că atunci când se emite semnalul x ∈ I se
y∈J
recepţionează semnalul y ∈ J cu probabilitatea pY /x (y, x). Aceste probabilităţi
definesc o matrice numită matrice de tranziţie sau matrice de transmisie.
 
pY /x1 (y1 , x1 ) pY /x1 (y2 , x1 ) ... pY /x1 (ym , x1 )
 pY /x2 (y1 , x2 ) pY /x2 (y2 , x2 ) ... pY /x2 (ym , x2 ) 
P (Y /X) = 
 
.. .. .. 
 . . ... . 
pY /xn (y1 , xn ) pY /xn (y2 , xn ) . . . pY /xn (ym , xn )
De remarcat faptul că
X
pY /x (y, x) = 1,
y
14 INCERTITUDINE ŞI ENTROPIE

deci suma elementelor de pe fiecare linie este 1. Semnalele primite se obţin cu


probabilităţile
X X
pY (y) = pX,Y (x, y) = pX (x)pY /x (y, x).
x∈I x∈I

Mai mult, relaţia


H(X, Y ) = H(X) + H(Y /X)
ı̂nseamnă că incertitudinea ı̂ntr-un astfel de sistem de transmisie este suma dintre
incertitudinea semnalelor de intrare H(X) şi incertitudinea canalului H(Y /X).
Exemplu 4.10. Considerăm un canal  binar
 simetric dat de matricea de tranziţie
pY /x (0, 0) pY /x (1, 0) 1− 
P (Y /X) = = unde  este probabilitatea
pY /x (0, 1) pY /x (1, 1)  1−
de apariţie a unei erori ı̂n canal. Alegem  = 0.1 şi presupunem că
 
0 1
X:
0.2 0.8
Avem entropia lui X este egală cu
H(X) = −0.2 log2 0.2 − 0.8 log2 0.8 ≈ 0.721 biţi.
Calculăm probabilităţile semnalelor recepţionate:
pY (0) = pX (0)pY /0 (0, 0) + pX (1)pY /1 (0, 1) = 0.2 · 0.9 + 0.8 · 0.1 = 0.26
pY (1) = pX (0)pY /0 (1, 0) + pX (1)pY /1 (1, 1) = 0.2 · 0.1 + 0.8 · 0.9 = 0.74
deci
H(Y /0) = −pY /x (0, 0) log2 pY /x (0, 0) − pY /x (1, 0) log2 pY /x (1, 0) =
−0.9 log2 0.9 − 0.1 log2 0.1 ≈ 0.469
H(Y /1) = −pY /x (0, 1) log2 pY /x (0, 1) − pY /x (1, 1) log2 pY /x (1, 1) =
−0.1 log2 0.1 − 0.9 log2 0.9 ≈ 0.469
Cum H(Y /0) = H(Y /1) avem
H(Y /X) = pX (0)H(Y /0) + pX (1)H(Y /1) = (0.2 + 0.8)H(Y /0) = H(Y /0) ≈ 0.469
Mai mult,
pX,Y (0, 0) = pX (0)pY /x (0, 0) = 0.18,
pX,Y (0, 1) = pX (0)pY /x (1, 0) = 0.02
pX,Y (1, 0) = pX (1)pY /x (0, 1) = 0.08,
pX,Y (1, 1) = pX (1)pY /x (1, 1) = 0.72
deci
H(X, Y ) = −0.18 log2 0.18 − 0.02 log2 0.02 − 0.08 log2 0.08 − 0.72 log2 0.72 ≈ 1.1909
Se verifică faptul că H(X, Y ) = H(X) + H(Y /X).
Considerăm un sistem probabilistic (S, P ), unde S = {e1 , . . . , en } şi P = {p1 =
p(e1 ), . . . , pn = p(en )}. Incertitudinea acestui sistem se măsoară cu ajutorul unei
funcţii H(p1 , . . . , pn ). Presupunem că această funcţie verifică următoarele axiome:
(A1) H(p1 , . . . , pn ) = H(pπ(1) , . . . , pπ(n) ), pentru orice π permutare;
(A2) H(p1 , . . . , pn ) este o funcţie continuă;  
p1 p2
(A3) H(p1 , . . . , pn ) = H(p1 + p2 , p3 , . . . , pn ) + (p1 + p2 )H p1 +p2 , p1 +p2 ;
INCERTITUDINE ŞI ENTROPIE 15

1 1

(A4) H n, . . . , n este monoton crescătoare, pentru orice n ≥ 1.
Teoremă 4.6. O funcţie H verifică axiomele (A1), . . . , (A4) dacă şi numai dacă
n
X
H(p1 , . . . , pn ) = − pi log2 pi
i=1
n
P
Demonstraţie: Am arătat că dacă H(p1 , . . . , pn ) = − pi log2 pi , atunci H verifică
i=1
cele patru proprietăţi (A1), . . . , (A4). Invers, presupunem că avem o funcţie ce
verifică cele patru axiome şi demonstrăm că trebuie să fie de forma H(p1 , . . . , pn ) =
n
P
− pi log2 pi . Facem menţiunea că putem să considerăm logaritmul ı̂n orice bază.
i=1


Lema 4.7 (1). Dacă (A1) şi (A3) au loc, atunci:


H(p1 , . . . , pi1 , pi1 +1 , . . . , pi2 , . . . , pis +1 , . . . , pn ) =

H(p1 + . . . + pi1 , pi1 +1 + . . . + pi2 , . . . , pis +1 + . . . + pn )+


 
p1 pi1
= (p1 + . . . pi1 )H ,..., +
p1 + . . . pi1 p1 + . . . pi1
 
pi1 +1 pi2
+(pi1 +1 + . . . pi2 )H ,..., +
pi1 +1 + . . . pi2 pi1 +1 + . . . pi1
 
pis +1 pn
+ . . . + (pis +1 + . . . pn )H ,..., .
pis +1 + . . . pn pis +1 + . . . pn
Notăm cu h(n) = H n1 , . . . , n1 , deci p1 = . . . = pn = n1 .


Lema 4.8 (2). Dacă (A1), (A3) şi (A4) au loc, atunci există o constantă c > 0
astfel ı̂ncât
h(n) = c · log2 n, ∀n ∈ N.
Demonstraţie: Considerăm n = m · l, n, m, l ∈ N şi aplicăm lema anterioară astfel:
ı̂mpărţim cele ml probabiltăţi ı̂n câte m grupuri:

l l
 
z }| { z }| {
 1 1 1 1 
h(n) = h(ml) = H 
 ml , . . . , ml , . . . , ml , . . . , ml  =

l l
 
z }| { z }| {
 1 1 1 1 
=H
 ml + . . . + ml , . . . , ml + . . . + ml  +

l
 
z }| {  1 1 
 1 1  ml ml
+m · 
 ml + . . . + H
1 1 ,..., 1 1 =
ml  ml + ... + ml ml + ... + ml
16 INCERTITUDINE ŞI ENTROPIE

Obţinem astfel
l
 
  z }| {  
1 1  1 1 H 1 ,..., 1 =
h(ml) = H ,..., +m· + . . . +
l l  ml ml  m m

= h(m) + h(l).
Demonstrăm că unica soluţie a acestei ecuaţii este h(n) = c log2 n.
Pentru m, l ∈ N, alegem un număr N ∈ N şi determinăm n astfel ı̂ncât
ln ≤ mN < ln+1 .
Cum h este monoton crescătoare, din (A4), obţinem
h(ln ) ≤ h(mN ) < h(ln+1 ).
Remarcăm faptul că h(ml) = h(m) + h(l), deci h(ln ) = nh(l). Prin urmare:
nh(l) ≤ N h(m) < (n + 1)h(l).
n
Dacă l = 1, atunci h(l ) = h(l) = nh(l), deci h(l) = 0. Cum h este monoton
crescătoare, din (A1), obţinem că pentru l > 1 avem h(l) > 0. Deci presupunem că
l > 0 şi din
h(l)
nh(l) ≤ N h(m) < (n + 1)h(l) :
N
obţinem
n h(m) n+1
≤ < (1)
N h(l) N
Pe de altă parte, din
ln ≤ mN < ln+1 ,
obţinem log2 ln ≤ log2 mN < log2 ln+1 (din monotonia logaritmului), echivalent cu
log2 l
n log2 l ≤ N log2 m < (n + 1) log2 l :
N
n
deci N ≤ log 2m
log2 l < N
n+1
(2).
Din (1) şi (2) obţinem:
h(m) log2 m 1
− < .
h(l) log 2l N
Cum relaţia are loc pentru orice N , avem
h(m) log2 m
= .
h(l) log2 l
Mai mult, m, l sunt arbitrare, deci există c astfel ı̂ncât
h(m) h(l)
= = c.
log2 m log2 l
Prin urmare, h(m) = c log2 m, pentru m > 1. Pentru m = 1 obţinem h(1) = 0
şi c log2 1 = 0, deci h(m) = c log2 m, pentru orice m ≥ 1. Din (A4) obţinem că
c > 0. 
INCERTITUDINE ŞI ENTROPIE 17

Lema 4.9. Dacă au loc (A1), (A3) şi (A4), atunci pentru probabilităţi numere
raţionale are loc:
n
X
H(p1 , . . . , pn ) = −c pi log2 pi .
i=1
qi
Demonstraţie: Presupunem că pi = astfel ı̂ncât q1 + . . . + qn = p. Aplicăm Lema
p
(1)
 q1 qn 
z }| { z }| {
1 1 1 1
h(p) = H p, . . . , p, . . . , p, . . . , p =

 q1 qn 
z }| { z }| {
1 1 1 1
=H
p + . . . + ,..., + ... + +
p p p

 
 
 1 1

q1  p p

+ H ,..., +
 
1
p 1 1 p + . . . + p1 
 + ... + 
p p 
| {z }
q1
1 1
!
qn p p
+... + H 1 1 ,..., 1 1 =
p p + ... + p p + ... + p

Obţinem
   
q1 1 1 qn 1 1
h(p) = H(p1 , . . . , pn ) + H ,..., + ... + H ,..., =
p q1 q1 p qn qn
q1 qn
= H(p1 , . . . , pn ) + h(q1 ) + . . . + h(qn ) =
p p
= H(p1 , . . . , pn ) + p1 c log2 q1 + . . . + pn c log2 qn
Prin urmare
H(p1 , . . . , pn ) = c log2 p − cp1 log2 q1 − . . . − cpn log2 qn .
Cum p1 + . . . + pn = 1, avem:
H(p1 , . . . , pn ) = c(p1 + . . . + pn ) log2 p − cp1 log2 q1 − . . . − cpn log2 qn =

= −c[p1 (log2 q1 − log2 p) + . . . + pn (log2 qn − log2 p)] =


n
X
= −c(p1 log2 p1 + . . . + pn log2 pn ) = −c pi log2 pi .
i=1

18 INCERTITUDINE ŞI ENTROPIE

Demonstraţie Teoremă. Ştim că au loc cele patru axiome şi demonstrăm că
n
X
H(p1 , . . . , pn ) = −c pi log2 pi .
i=1
Dacă probabilităţile nu sunt raţionale, atunci ele pot fi aproximate cu prob-
abiltăţi raţionale ce converg la pi . Cum H este continuă ı̂n fiecare variabilă şi
folosind lema (3), obţinem relaţia dorită. 
INFORMAŢIA ŞI ENTROPIA

Considerăm un sistem probabilistic (S, P ) reprezentat de variabila aleatoare X.


Această variabilă aleatoare descrie un anumit experiment al cărui rezultatul este
incert. Incertitudinea este măsurată de entropie:
X
H(X) = − pX (x) log2 pX (x).
x∈S
După realizarea experimentului, o anumită valoare x ∈ S a variabilei aleatoare este
observată. Prin urmare, incertitudinea dispare. Deci incertitudinea iniţială H(X)
se modifică, după realizarea experimentului, ı̂n incertitudine 0. Diferenţa H(X) −
0 = H(X) este cantitatea de informaţie obţinută ı̂n urma realizării experimentului.
Observaţia. • În concluzie, entropia unei variabile aleatore X măsoară canti-
tatea de informaţie obţinută observând valoarea actuală a variabilei aleatoare.
• Cantitatea de informaţie obţinută ı̂n urma unei observaţii este aceeaşi in-
diferent de observaţia făcută (nu depinde de probabilitatea respectivei valori
x ∈ X).
• Unitatea de măsură a informaţiei este bit, deoarece informaţia este o mod-
ificare a entropiei.
Exemplul 1. Se aruncă un ban şi notăm cu 0 şi cu 1 cele două feţe. Cantitatea de
informaţie obţinută ı̂n urma unei aruncări, ı̂n presupunerea că cele două feţe sunt
echiprobabile, este H(X) = 1 bit.
Dacă presupunem că faţa 1 apare cu probabilitatea 1−p şi faţa 0 cu probabilitatea
p, atunci cantitatea de informaţie obţinută ı̂n urma observării rezultatului unei
aruncări este
H(X) = −p log2 p − (1 − p) log2 (1 − p).
Considerăm variabila aleatoare X asociată sistemului probabilistic (S, P ) şi H(X)
este incertitudinea corespunzătoare. Nu mai privim experimentul ı̂n ansamblu, deci
nu ne interesează să observăm o valoare exacta a lui X, ci un eveniment. Fie E ⊂ S
un eveniment (compus). Observarea evenimentului E modifică variabila X ı̂n vari-
abila condiţionată X|E ce corespunde sistemului probabilistic (E, PE ), unde PE
reprezintă probabilităţile condiţionate:
pX (x)
pX|E (x) = , ∀x ∈ E.
pX (E)
Prin urmare, incertitudinea variabilei condiţionate X|E este:
X
H(X|E) = − pX|E (x) log2 pX|E (x).
x∈E

Deci, prin observarea evenimentului E, incertitudinea se modifică din H(X) ı̂n


H(X|E), iar cantitatea de informaţie a evenimentului E ı̂n raport cu variabila
aleatoare X este
i(E/X) = H(X) − H(X|E).

Date: 2022-2023.
1
2 INFORMAŢIA ŞI ENTROPIA

Caz particular: Dacă evenimentul E presupune observarea unui singur eveni-


ment (elementar) x ∈ X, atunci
i(E/X) = i(x/X) = H(X) − H(X|x) = H(X) − 0 = H(X).
Într-adevăr, avem pX (E) = pX (x), deci pX|x (x) = ppXX(E)(x)
= 1 şi H(X|E) =
H(X|x) = −1 log2 1 = 0.
Deci, ı̂n acest caz, putem spune că entropia măsoară cantitatea de informaţie
(informaţia proprie conţinută de evenimentul E = {x}).
Exemplul 2. Fie X variabilă aleatoare asociată sistemului probabilistic (S, P ),
unde S = {1, 2, 3, 4} şi P = {0.5, 0.25, 0.125, 0.125} şi considerăm evenimentul
E = {1, 3}, cu pX (E) = 0.625. Avem: H(X) = −0.5 log2 0.5 − 0.25 log2 0.25 −
0.125 log2 0.125 − 0.125 log2 0.125 = 1.75 bit. În plus, probabilităţile condiţionate
sunt:
pX (1) 0.5 pX (3) 0.125
pX|E (1) = = = 0.8, pX|E (3) = = = 0.2
pX (E) 0.625 pX (E) 0.625
P
şi entropia variabilei condiţionate X|E este H(X|E) = − pX|E (x) log2 pX|E (x) =
x∈E
−0.8 log2 0.8 − 0.2 log2 0.2 ≈ 0.721. Cantitatea de informaţie obţinută este
i(E/X) = H(X) − H(X|E) = 0.029
Exemplul 3. Fie X variabilă aleatoare asociată sistemului probabilistic (S, P ),
unde S = {1, 2, 3} şi P = {0.99, 0.005, 0.005} şi considerăm evenimentul E =
{2, 3}, cu pX (E) = 0.01. Avem: H(X) = −0.99 log2 0.00 − 0.005 log2 0.005 −
0.005 log2 0.005 ≈ 0.0908 bit. În plus, probabilităţile condiţionate sunt:
pX (2) 0.005 pX (3) 0.005
pX|E (2) = = = 0.5, pX|E (3) = = = 0.5
pX (E) 0.01 pX (E) 0.01
P
şi entropia variabilei condiţionate X|E este H(X|E) = − pX|E (x) log2 pX|E (x) =
x∈E
−0.05 log2 0.05 − 0.05 log2 0.05 = 1. Cantitatea de informaţie obţinută este
i(E/X) = H(X) − H(X|E) = −0.9092.
Presupunem că avem evenimentul E1 ⊂ S şi evenimentul E2 ⊆ E1 . Evident,
E1 modifică variabila aleatoare X ı̂n variabila condiţionată X|E1 , notată cu XE1 ,
iar evenimentul E2 modifică variabila XE1 ı̂n variabila condiţionată XE1 |E2 . Deci
cantitatea de informaţie obţinută de E2 ı̂n raport cu prima informaţie E1 este
i(E2 /XE1 ) = H(XE1 ) − H(XE1 |E2 ) = H(XE1 ) − H(XE2 ).
Teorema 1 (1). Fie X o variabilă aleatoare asociată sistemului probabilistic (S, P )
şi evenimentele E2 ⊆ E1 ⊆ S. Atunci:
i(E2 /X) = i(E1 /X) + i(E2 /XE1 ).
Demonstraţie: Cantitatea de informaţie obţinută prin observarea evenimentului E2
ı̂n variabila X este:
i(E2 /X) = H(X) − H(XE2 ) =
= H(X) − H(XE1 ) + H(XE1 ) − H(XE2 ) = i(E1 /X) + i(E2 /XE1 ).

INFORMAŢIA ŞI ENTROPIA 3

Cantitatea de informaţie este ı̂n raport cu informaţia anterioară. Deci, cantitatea


de informaţie a evenimentului E2 ı̂n raport cu X, i(E2 /X), posibil să nu fie egală
cu cantitatea de informaţie a evenimentului E2 relativ la informaţia dată de E1 ,
i(E2 /XE1 ).
i(E2 /X) este cantitatea de informaţie conţinută de evenimentul E2 relativ cu
variabila X, iar i(E2 /XE1 ) este cantitatea de informaţie a evenimentului E2 relativ
la variabila condiţionată XE1 .
Teorema 2. Dacă (S, P ) este un sistem probabilistic ce corespunde variabile aleatoare
X şi Em ⊆ Em−1 ⊆ . . . ⊆ E1 ⊆ S sunt evenimente, atunci:
i(Em /X) = i(E1 /X) + i(E2 /XE1 ) + . . . + i(Em /XEm−1 ).
Exemplul 4. Considerăm că avem X variabila aleatoare ce ia valorile i : apare
faţa i la aruncarea unui zar, cu probabilităţile pi = 16 . Deci:
 
1 2 3 4 5 6
X: 1 1 1 1 1 1
6 6 6 6 6 6
şi entropia este
1 1
H(X) = −6 · log2 = log2 6.
6 6
Presupunem că o persoană ne spune că X 6= 1, deci considerăm evenimentul E1 =
{2, 3, 4, 5, 6} ⊂ S = {1, 2, 3, 4, 5, 6}, pX (E1 ) = 56 .
Astfel X devine X|E1 , unde
 
2 3 4 5 6
X|E1 : 1 1 1 1 1
5 5 5 5 5
1
pX (i) 1 6
pX|E1 (i) = = = , ∀2 ≤ i ≤ 6.
5
pX (E1 ) 5 6
Obţinem H(XE1 ) = log2 5 şi cantitatea de informaţie obţinută prin realizarea eveni-
mentului E1 este
6
i(E1 /X) = H(X) − H(XE1 ) = log2 6 − log2 5 = log2 .
5
Presupunem că, mai târziu, o persoană ne spune că X 6= 1 şi X 6= 4, deci
considerăm evenimentul E2 = {2, 3, 5, 6} ⊆ S, pX (E2 ) = 64 . Astfel X devine X|E2 ,
unde  
2 3 5 6
X|E2 : 1 1 1 1
4 4 4 4
1
pX (i) 1
pX|E2 (i) = = 64 = , ∀i ∈ E2 .
pX (E2 ) 6
4
Obţinem H(XE2 ) = log2 4 şi cantitatea de informaţie obţinută prin realizarea eveni-
mentului E2 relativ la X este
6
i(E2 /X) = H(X) − H(XE2 ) = log2 6 − log2 4 = log2 .
4
Observăm că E2 ⊆ E1 ⊆ S, deci:
i(E2 /XE1 ) = H(XE1 ) − H(XE1 |E2 ) = H(XE1 ) − H(XE2 ) =
5
= log2 5 − log2 4 = log2
4
De remarcat i(E2 /X) = log2 64 6= i(E2 /XE1 ) = log2 45 .
4 INFORMAŢIA ŞI ENTROPIA

Se verifică faptul că


i(E2 /X) = i(E1 /X) + i(E2 /XE1 ) =
adică
6 6 5
log2 = log2 + log2 .
4 5 4
Se poate ı̂ntâmpla ca două surse diferite de informaţie să observe evenimentele
E1 , E2 ⊂ S, unde (S, P ) este un sistem probabilistic şi X este variabila aleatoare
asociată. Prin considerarea celor două evenimente putem să obţinem evenimentul
E1 ∩ E2 . Mai mult, presupunem că cele două evenimente sunt compatibile (este
posibilă realizarea lor simultană), deci E1 ∩E2 6= ∅. Atunci cantitatea de informaţie
dată de E1 ∩ E2 relativ la X, din teorema (1), este:
i(E1 ∩ E2 /X) = i(E1 /X) + i(E1 ∩ E2 /XE1 ) = i(E2 /X) + i(E1 ∩ E2 /XE2 )
Exemplul 5. Presupunem că aruncăm un zar, deci X variabila aleatoare ce ia
valorile i : apare faţa i la aruncarea unui zar, cu probabilităţile pi = 61 . Avem:
 
1 2 3 4 5 6
X: 1 1 1 1 1 1
6 6 6 6 6 6
şi entropia este
1 1
H(X) = −6 · log2 = log2 6.
6 6
În urma aruncării, observăm că rezultatul este un număr impar, deci E1 = {1, 3, 5} ⊂
S, pX (E1 ) = 21 . Obţinem
1
pX (x) 6 1
pX|E1 (x) = = 1 = , ∀x ∈ E1
pE1 (x) 2
3
Prin urmare entropia variabilei condiţionate X|E1 este
1 1 1 1 1 1
H(XE1 ) = − log2 − log2 − log2 = log2 3,
3 3 3 3 3 3
iar cantitatea de informaţie obţinută este
i(E1 /X) = H(X) − H(XE1 ) = log2 6 − log2 3 = 1 bit.
Mai departe, observăm că rezultatul aruncării este un număr mai mare decât
3, deci putem să considerăm evenimentul E2 = {4, 5, 6} ⊂ S. Avem pX (E2 ) = 21 .
Obţinem
1
pX (x) 1
pX|E2 (x) = = 61 = , ∀x ∈ E2
pE2 (x) 2
3
Prin urmare entropia variabilei condiţionate X|E2 este
1 1 1 1 1 1
H(XE2 ) = − log2 − log2 − log2 = log2 3,
3 3 3 3 3 3
iar cantitatea de informaţie obţinută este
i(E2 /X) = H(X) − H(XE2 ) = log2 6 − log2 3 = 1 bit.
De remarcat faptul că observarea simultană a celor două evenimente ne conduce
la evenimentul E1 ∩ E2 = {5}.
INFORMAŢIA ŞI ENTROPIA 5

Pentru acest eveniment avem pX (E1 ∩ E2 ) = 16 , entropia este H(XE1 ∩E2 ) = 0,


deoarece pX|E1 ∩E2 (5) = pEpX∩E(5)(5) = 1. Prin urmare, cantitatea de informaţie dată
1 2
de E1 ∩ E2 este:
i(E1 ∩ E2 /X) = H(X) − H(XE1 ∩E2 ) = log2 6.
Cum E1 ∩ E2 ⊂ E1 ⊂ S, din teorema (1) obţinem:
i(E1 ∩ E2 /XE1 ) = H(XE1 ) − H(XE1 ∩E2 ) = H(XE1 ) = log2 3,
analog
i(E1 ∩ E2 /XE2 ) = H(XE2 ) − H(XE1 ∩E2 ) = H(XE2 ) = log2 3.
În concluzie, se verifică relaţia
i(E1 ∩ E2 /X) = i(E1 /X) + i(E1 ∩ E2 /XE1 ) = i(E2 /X) + i(E1 ∩ E2 /XE2 )
Fie sistemul probabilistic (S1 × S2 , P ) şi variabilele aleatoare X şi Y core-
spunzătoare. Considerăm că am observat valoarea Y = y ∈ S2 , deci incertitudinea
lui Y devine 0 şi cantitatea de informaţie conţinută de observaţia făcută relativ la
Y este i(y/Y ) = H(Y ). Mai mult, observaţia Y = y modifică variabila X ı̂n X|y:
pX,Y (x, y)
pX|y (x, y) = , ∀x ∈ S1 .
pY (y)
Prin urmare, se modifică şi incertitudinea lui X, iar cantitatea de informaţie a
observaţiei y relativ la X este:
i(y/X) = H(X) − H(X|y).
Din nou, cantitatea de informaţie poate fi atât pozitivă, cât şi negativă.
Dar realizarea y modifică şi entropia vectorului bidimensional (X, Y ) astfel avem:
i(y/X, Y ) = H(X, Y ) − H(X, Y |y).
De remarcat că: (
pX,Y (x,y 0 )
0 pY (y) , y0 = y
pX,Y |y (x, y ) =
0 , y 0 6= y
Obţinem astfel că
pX,Y |y (x, y) = pX|y (x), ∀x ∈ S1 .
Prin urmare, H(X, Y |y) = H(X|y), deci
i(y/X, Y ) = H(X, Y ) − H(X|y) = (H(X) + H(Y |X)) − H(X|y) =
= H(X) − H(X|y) + H(Y |X) = i(y/X) + H(Y |X).
Relaţia i(y/X, Y ) = i(y/X)+H(Y |X) ı̂nseamnă că prin observarea y, cantitatea
de informaţie obţinută relativ la ambele variabile X, Y este egală cu suma dintre
cantitatea de informaţie obţinută din observaţia făcută relativ la X şi cantitatea de
incertitudine rămasă ı̂n Y , după realizarea lui X.
Observaţia. Dacă variabilele aleatoare X şi Y sunt independente, atunci H(X|y) =
H(X), deci i(y/X) = H(X) − H(X|y) = 0. Obţinem deci
i(y/X, Y ) = H(Y |X) = H(Y ) = i(y/Y )
În concluzie:
6 INFORMAŢIA ŞI ENTROPIA

• i(y/Y ) este cantitatea de informaţie pe care o obţinem observând valoarea


y ı̂n Y (reprezinta cantitatea de informaţie pe care o obţinem punând
ı̂ntrebarea: este Y = y?)
• i(y/X) este cantitatea de informaţie pe care o obţinem din observarea y
ı̂n X. De exemplu, considerăm că variabila aleatoare X corespunde sem-
nalelor emise de o sursă, iar Y este variabila aleatoare ce corespunde sem-
nalelor recepţionate. S-a recepţionat semnalul y ∈ Y şi vrem să identificăm
semnalul necunoscut emis ce a dus la recepţionarea lui y. Atunci i(y/X)
este cantitatea de informaţie conţinută de y relativ la ı̂ntrebarea: care este
valoarea X = x care a dus la producerea y?
Exemplul 6. Considerăm vectorul bidimensional (X, Y ):
XY 0 1
1 1
0 3 3
pX (0)
1
1 3
0 pX (1)
pY (0) pY (1)
Obţinem imediat variabilele aleatoare
   
0 1 0 1
X: ⇔X:
pX (0) pX (1) 2/3 1/3
   
0 1 0 1
Y : ⇔Y :
pY (0) pY (1) 2/3 1/3
Calculăm entropiile:
2 2 1 1
H(X) = − log2 − · log2 ≈ 0.9183
3 3 3 3
2 2 1 1
H(Y ) = − log2 − · log2 ≈ 0.9183
3 3 3 3
1 1 1 1 1 1
H(X, Y ) = − log2 − log2 − log2 − 0 log2 0 =
3 3 3 3 3 3
≈ 1.585

H(X|0) = −pX|0 (0, 0) log2 pX|0 (0, 0) − pX|0 (1, 0) log2 pX|0 (1, 0)
Avem:
pX,Y (0, 0) 1 pX,Y (1, 0) 1
pX|0 (0, 0) = = , pX|0 (1, 0) = = ,
pY (0) 2 pY (0) 2
deci
1 1 1 1
H(X|0) = − log2 − log2 = 1
2 2 2 2
Asemănător,
H(X|1) = −pX|1 (0, 1) log2 pX|1 (0, 1) − pX|1 (1, 1) log2 pX|1 (1, 1)
Avem:
pX,Y (0, 1) pX,Y (1, 1)
pX|1 (0, 1) = = 1, pX|1 (1, 1) = = 0,
pY (1) pY (1)
deci
H(X|1) = − log2 1 − 0 log2 0 = 0
Entropia lui X condiţionată de Y este
2 2 2
H(X|Y ) = pY (0)H(X|0) + pY (1)H(X|1) = · 1 + · 0 = .
3 3 3
INFORMAŢIA ŞI ENTROPIA 7

De remarcat faptul că


H(X|1) ≤ H(X) ≤ H(X|0),
deci
i(0/X) = H(X) − H(X|0) = 0.9183 − 1 = −0.0817
i(1/X) = H(X) − H(X|1) = 0.9183 − 0 = 0.9183 = H(X)
Mai mult, cum pX,Y |y (x, y) = pX|y (x) şi pX,Y |y (x, y 0 ) = 0, pentru y 0 6= y,
obţinem:
1 1
pX,Y |0 (0, 0) = pX|0 (0) = , pX,Y |0 (1, 0) = pX|0 (1) =
2 2
pX,Y |0 (0, 1) = 0, pX,Y |0 (1, 1) = 0
deci
1 1 1 1
H(X, Y |0) = − log2 − log2 − 0 − 0 = 1
2 2 2 2
Prin urmare
i(0/X, Y ) = H(X, Y ) − H(X|0) = 1.585 − 1 = 0.585
Până acum, am observat o singură valoare y şi am obţinut cantitatea de informaţie
i(y/X) = H(X) − H(X|y) relativ la X. Atunci, valoarea medie de informaţie
obţinută relativ la X prin observarea Y este:
X X
I(X|Y ) = pY (y)i(y/X) = pY (y)(H(X) − H(X|y)) =
y∈Y y∈Y

X X
= H(X) pY (y) − pY (y)H(X|y) =
y∈Y y∈Y

= H(X) − H(X|Y )
Definiţia 1. Informaţia mutuală dintre X şi Y este I(X|Y ) = H(X) − H(X|Y )
şi reprezintă valoarea medie a cantităţii de informaţie obţinută despre X, prin
observarea Y .
Reamintim că H(X|Y ) ≤ H(X), cu egalitatea dacă X şi Y sunt independente.
Prin urmare, obţinem următoarea proprietate:
Propoziţia 1. Informaţia mutuală dintre X şi Y este pozitivă, şi I(X|Y ) = 0 dacă
şi numai dacă X şi Y sunt independente.
Propoziţia 2. Informaţia mutuală dintre X şi Y este egală cu informaţia mutuală
dintre Y şi X, adică I(X|Y ) = I(Y |X).
Demonstraţie: Ştim că
H(X, Y ) = H(X) + H(Y |X) = H(Y ) + H(X|Y ),
deci
H(X) − H(X|Y ) = H(Y ) − H(Y |X) ⇔ I(X|Y ) = I(Y |X).

8 INFORMAŢIA ŞI ENTROPIA

Observaţia. Observăm că:


X X
I(X|Y ) = H(X) − H(X|Y ) = − pX (x) log2 pX (x) + pY (y)H(X|y) =
x∈X y∈Y
X XX
=− pX (x) log2 pX (x) + pY (y)pX|Y (x, y) log2 pX|Y (x, y) =
x∈X x∈X y∈Y
XX
=− pX,Y (x, y) log2 pX (x)+
x∈X y∈Y
XX pX,Y (x, y) pX,Y (x, y)
+ pY (y) log2 =
pY (y) pY (y)
x∈X y∈Y
X pX,Y (x, y)
= pX,Y (x, y)(log2 − log2 pX (x)) =
x,y
pY (y)
X pX,Y (x, y)
= pX,Y (x, y) log2
x,y
pY (y)pX (x)
Din I(X|Y ) ≥ 0 şi H(X|Y ) ≥ 0 conchidem că
I(X|Y ) ≤ H(X) = i(x/X).
Din simetrie obţinem:
I(Y |X) ≤ H(Y ) = i(y/Y ),
adică informaţia mutuală pe care o obţinem din X prin observarea Y (şi reciproc)
este cel mult egală cu cantitatea de informaţie pe care o obţinem dacă observăm
direct variabila.
Propoziţia 3.
I(X|Y ) = H(X) + H(Y ) − H(X, Y )
Demonstraţie: Avem: I(X|Y ) = H(X) − H(X|Y ) şi H(X, Y ) = H(Y ) + H(X|Y ).
Obţinem
H(X|Y ) = H(X, Y ) − H(Y ),
prin urmare
I(X|Y ) = H(X) − H(X|Y ) = H(X) + H(Y ) − H(X, Y ).

Exemplul 7. Considerăm că avem două monede: o moneda de tip I ce are două
feţe diferite (cap/pajură) şi o moneda de tip II care are numai feţe cap (cap/cap).
Se alege o monedă la ı̂ntâmplare şi se aruncă moneda de două ori. Se ı̂nregistrează
numărul de feţe de tip cap apărute. Se cere cantitatea de informaţie despre tipul
de monedă folosit cunoscând numărul de feţe de tip cap.
Observaţia. Cu siguranţă, dacă avem mai puţin de două feţe cap, atunci s-a folosit
moneda de tip I. Dacă au apărut exact două feţe de tip cap, atunci intuitiv pre-
supunem că s-a folosit moneda de tip II.
Soluţie: Fie X variabila aleatoare ce are valorile x1 , x2 , ce corespund evenimentelor
x1 : s-a folosit moneda de tip I, x2 : s-a folosit moneda de tip II. Fie Y variabila
aleatoare ce are valorile y0 , y1 , y2 , ce corespund evenimentelor y0 : apar zero feţe de
tip cap la cele două aruncări, y1 : apare o faţă de tip cap, y2 : apar două feţe de tip
cap.
INFORMAŢIA ŞI ENTROPIA 9

Avem de calculat cantitatea de informaţie pe care o obţinem despre X prin


realizarea lui Y , deci
I(X|Y ) = H(X) − H(X|Y ).
Entropia lui X avem
1 1 1 1
H(X) = − log2 − log2 = log2 2 = 1.
2 2 2 2
Avem de calculat
H(X|Y ) = pY (y0 )H(X|y0 ) + pY (y1 )H(X|y1 ) + pY (y2 )H(X|y2 )
Din formula probabilităţii totale avem:
pY (y0 ) = pX (x1 )pY |X (y0 |x1 ) + pX (x2 )pY |X (y0 |x2 ) =
1 1 1 1
= · + ·0= .
2 4 2 8

pY (y1 ) = pX (x1 )pY |X (y1 |x1 ) + pX (x2 )pY |X (y1 |x2 ) =


1 1 1 1
= · + ·0= ,
2 2 2 4
pY (y2 ) = pX (x1 )pY |X (y2 |x1 ) + pX (x2 )pY |X (y2 |x2 ) =
1 1 1 5
= · + ·1= .
2 4 2 8
Deci Y are distribuţia:
 
y0 y1 y2
Y : 1 1 5 .
8 4 8
10 INFORMAŢIA ŞI ENTROPIA

Pentru a calcula H(X|y0 ) aplicăm formula lui Bayes:


1
pX (x1 ) · p(y0 |x1 ) 8
p(x1 |y0 ) = = 1 =1
p(y0 ) 8
1
p(x2 ) · p(y0 |x2 ) 2 ·0
p(x2 |y0 ) = = = 0,
p(y0 ) 1
deci  
x1 x2
X|y0 :
1 0
şi H(X|Y = y0 ) = −1 log2 1 − 0 log2 0 = 0
Analog obţinem:
1
p(x1 ) · p(y1 |x1 ) 4
p(x1 |y1 ) = = 1 =1
p(y1 ) 4
1
p(x2 ) · p(y1 |x2 ) 2 ·0
p(x2 |y1 ) = = 1 = 0,
p(y1 ) 4
deci  
x1 x2
X|Y = y1 :
1 0
şi H(X|Y = y1 ) = −1 log2 1 − 0 log2 0 = 0
Respectiv avem:
1
p(x1 ) · p(y2 |x1 ) 8 1
p(x1 |y2 ) = = 5 =
p(y2 ) 8
5
1
p(x2 ) · p(y2 |x2 ) 2 ·1 4
p(x2 |y2 ) = = 5 = ,
p(y2 ) 8
5
deci  
x1 x2
X|Y = y2 : 1 4
5 5
şi H(X|Y = y2 ) = − 15 log2 1
5 − 4
5 log2 4
5 = log2 5 − 85 .
În concluzie obţinem
H(X|Y ) = p(y0 )H(X|Y = y0 ) + p(y1 )H(X|Y = y1 ) + p(y2 )H(X|Y = y2 ) =
 
1 1 5 8
= ·0+ ·0+ log2 5 − =
8 4 8 5
5
= −1 + log2 5 ≈ 0.45,
8
deci cantitatea de informaţie pe care o obţinem despre X prin realizarea lui Y este
I(X|Y ) = H(X) − H(X|Y ) = 1 − 0.45 = 0.55

Observaţia. Reamintim că I(X|Y ) = pY (y0 )i(y0 /X)+pY (y1 )i(y1 /X)+pY (y2 )i(y2 /X).
În plus, avem:
i(y0 /X) = H(X) − H(X|y0 ) = H(X) − 0 = 1,
i(y1 /X) = H(X) − H(X|y1 ) = H(X) − 0 = 1
8
i(y2 /X) = H(X) − H(X|y2 ) = 1 − log2 5 + ≈ 0.278
5
INFORMAŢIA ŞI ENTROPIA 11

Metoda 2: Pentru a calcula I(X|Y ) folosim formula:


I(X|Y ) = H(X) + H(Y ) − H(X, Y ).
Avem:
1 1 1 1 5 5 22 5
H(X) = 1, H(Y ) = − log2 − log2 − log2 = − log2 5
8 8 4 4 8 8 8 8
şi    
1 1 1
1 1 1 1
H(X, Y ) = H , + H , ,
+ H(0, 0, 1) =
2 2 2
2 4 2 4
 
1 1 1 1 1 1 1 7
=1+ − log2 − log2 − log2 +0= ,
2 4 4 2 2 4 4 4
22 5 14
deci I(X|Y ) = H(X) + H(Y ) − H(X, Y ) = 1 + 8 − 8 log2 5 − 8 = 0.55.
Exemplul 8. Fie X variabila aleatoare ce corespunde semnalelor emise de o
sursă, Y este variabila ce corespunde semnalelor primite.  Considerăm un canal 
pY |x (0, 0) pY |x (1, 0)
binar simetric dat de matricea de tranziţie P (Y |X) = =
pY |x (0, 1) pY |x (1, 1)
 
1− 
unde  este probabilitatea de apariţie a unei erori ı̂n canal. Alegem
 1−
 = 0.1 şi presupunem că  
0 1
X:
0.2 0.8
Calculăm probabilităţile semnalelor recepţionate:
pY (0) = pX (0)pY |0 (0, 0) + pX (1)pY |1 (0, 1) = 0.2 · 0.9 + 0.8 · 0.1 = 0.26
pY (1) = pX (0)pY |0 (1, 0) + pX (1)pY |1 (1, 1) = 0.2 · 0.1 + 0.8 · 0.9 = 0.74
deci H(Y ) = −0.26 log2 0.26 − 0.74 log2 0.74 ≈ 0.8267 biţi.
H(Y |0) = −pY |x (0, 0) log2 pY |x (0, 0) − pY |x (1, 0) log2 pY |x (1, 0) =
−0.9 log2 0.9 − 0.1 log2 0.1 ≈ 0.469
H(Y |1) = −pY |x (0, 1) log2 pY |x (0, 1) − pY |x (1, 1) log2 pY |x (1, 1) =
−0.1 log2 0.1 − 0.9 log2 0.9 ≈ 0.469
Cum H(Y |0) = H(Y |1) avem
H(Y |X) = pX (0)H(Y |0) + pX (1)H(Y |1) = (0.2 + 0.8)H(Y |0) =
= H(Y |0) ≈ 0.469
Obţinem
I(X|Y ) = I(Y |X) = H(Y ) − H(Y |X) ≈ 0.3578 biţi.
Cum H(X) = −0.2 log2 0.2 − 0.8 log2 0.8 ≈ 0.7219 > I(X|Y ), ı̂nseamnă că
pierderea de informaţie este:
H(X) − I(Y |X) ≈ 0.3641 biţi.
Reamintim că entropia unei variabile aleatoare X depinde doar de distribuţia de
probabilitate. În practică, există posibilitatea să nu cunoaştem distribuţia exactă
şi astfel să fim nevoiţi să aproximăm distribuţia.
12 INFORMAŢIA ŞI ENTROPIA

Definiţia 2. Fie (S, PX ), (S, PY ) două sisteme probabilistice definite pe aceeaşi


mulţime S şi X şi Y variabilele aleatoare asociate. Atunci:
X pX (x)
K(PX , PY ) = pX (x) log2
pY (x)
x∈S

se numeşte divergenţă Kullback–Leibler (sau entropie relativă) ı̂ntre X şi Y .


Teorema 3. Avem
K(PX , PY ) ≥ 0
şi
K(PY , PX ) ≥ 0.
În plus,
K(PX , PY ) = K(PY , PX ) = 0
dacă şi numai dacă PX = PY
Demonstraţie: Reamintim că dacă avem două sisteme de probabilităţi pe aceeaşi
mulţime, atunci
Xn n
X
pi log2 qi ≤ pi log2 pi ,
i=1 i=1
cu egalitatea dacă şi numai dacă pi = qi .
Avem
X pX (x)
K(PX , PY ) = pX (x) log2 =
pY (x)
x∈S
X X
= pX (x) log2 pX (x) − pX (x) log2 pY (x) ≥ 0,
x∈S x∈S
conform rezultatului menţionat. Mai mult, K(PX , PY ) = 0 dacă şi numai dacă
pX (x) = pY (x), pentru orice x ∈ S. 

Observaţia. De precizat că K(PX , PY ) 6= K(PY , PX ), deci nu este simetrică. În


concluzie, K(PX , PY ) nu este o distanţă.
Exemplul 9. Revenim la exemplul canalului binar simetric:
pX (0) pX (1)
K(PX , PY ) = pX (0) log2 + pX (1) log2 =
pY (0) pY (1)
0.2 0.8
= 0.2 log2 + 0.8 log2 ≈ 0.0143 bit
0.26 0.74
şi
pY (0) pY (1)
K(PY , PX ) = pY (0) log2 + pY (1) log2 =
pX (0) pX (1)
0.26 0.74
= 0.26 log2 + 0.74 log2 ≈ 0.0152 bit
0.2 0.8
Observaţia. Dacă considerăm sistemul probabilistic (S×S, P ) şi variabilele aleatoare
asociate X, Y , corespunzătoare sistemelor (S, PX ) şi (S, PY ). Reamintim că
X X
pX (x) = pX,Y (x, y), pY (y) = pX,Y (x, y).
y∈S x∈S
INFORMAŢIA ŞI ENTROPIA 13

Am arătat că informaţia mutuală este


X pX,Y (x, y)
I(X|Y ) = I(Y |X) = pX,Y (x, y) log2 = K(P, PX · PY ),
x,y
p X (x)pY (y)

unde PX PY este sistemul de probabilităţi cu valorile pX (x)pY (y).


Deci informaţia mutuală obţinută din X prin observarea Y măsoară gradul ı̂n
care mulţimea de probabilităţi P corespunzătoare vectorului (X, Y ) diverge de cazul
variabilelor independente.
Exemplul 10. Considerăm S = {0, 1} şi sistemul probabilistic (S × S, P ), unde
P = {0.5, 0.1, 0.3, 0.1}. Considerăm vectorul bidimensional (X, Y ):
XY 0 1
0 0.5 0.1 pX (0)
1 0.3 0.1 pX (1)
pY (0) pY (1)
Obţinem imediat variabilele aleatoare
   
0 1 0 1
X: ⇔X:
pX (0) pX (1) 0.6 0.4
   
0 1 0 1
Y : ⇔Y :
pY (0) pY (1) 0.8 0.2
Avem I(X|Y ) = H(X) − H(X|Y ), deci calculăm entropiile:
H(X) = −0.6 log2 0.6 − 0.4 log2 0.4 ≈ 0.971
H(X|Y ) = pY (0)H(X|0) + pY (1)H(X|1)
H(X|0) = −pX|0 (0) log2 pX|0 (0) − pX|0 (1) log2 pX|0 (1) =
pX,Y (0, 0) pX,Y (0, 0) pX,Y (1, 0) pX,Y (1, 0)
=− log2 − log2 =
pY (0) pY (0) pY (0) pY (0)
0.5 0.5 0.3 0.3
=− log2 − log2 ≈ 0.9544
0.8 0.8 0.8 0.8
Analog
H(X|1) = −pX|1 (0) log2 pX|1 (0) − pX|1 (1) log2 pX10 (1) =
pX,Y (0, 1) pX,Y (0, 1) pX,Y (1, 1) pX,Y (1, 1)
=− log2 − log2 =
pY (1) pY (1) pY (1) pY (1)
0.1 0.1 0.1 0.1
=− log2 − log2 =1
0.2 0.2 0.2 0.2
Prin urmare:
H(X|Y ) = pY (0)H(X|0) + pY (1)H(X|1) = 0.8 · 0.9544 + 0.2 · 1 = 0.9635
şi
I(X|Y ) = H(X) − H(X|Y ) = 0.971 − 0.9635 = 0.0074
Calculăm
X pX,Y (x, y)
K(P, PX PY ) = pX,Y (x, y) log2
x,y
pX (x)pY (y)
pX,Y (0, 0) pX,Y (0, 1)
= pX,Y (0, 0) log2 + pX,Y (0, 1) log2 +
pX (0)pY (0) pX (0)pY (1)
14 INFORMAŢIA ŞI ENTROPIA

pX,Y (1, 0) pX,Y (1, 1)


+pX,Y (1, 0) log2 + pX,Y (1, 1) log2 =
pX (1)pY (0) pX (1)pY (1)
0.5 0.1 0.3 0.1
= 0.5 log2 + 0.1 log2 + 0.3 log2 + 0.1 log2 =
0.6 · 0.8 0.6 · 0.2 0.4 · 0.8 0.4 · 0.2
= 0.0074
Se verifică faptul că I(X|Y ) = K(P, PX PY ).
Observaţia. Putem să calculăm I(X|Y ) = I(Y |X) = pX (0)i(0/Y ) + pX (1)i(1/Y ).
Reamintim:
i(0/Y ) = H(Y ) − H(Y |0) şi i(1/Y ) = H(Y ) − H(Y |1).
Avem:
H(Y |X = 0) = −pY |X=0 (0) log2 pY |0 (0) − pY |0 (1) log2 pY |0 (1) =
pX,Y (0, 0) pX,Y (0, 0) pX,Y (0, 1) pX,Y (0, 1)
=− log2 − log2 =
pX (0) pX (0) pX (0) pX (0)
0.5 0.5 0.1 0.1
=− log2 − log2
0.6 0.6 0.6 0.6
H(Y |X = 1) = −pY |X=1 (0) log2 pY |1 (0) − pY |1 (1) log2 pY |1 (1) =
pX,Y (1, 0) pX,Y (1, 0) pX,Y (1, 1) pX,Y (1, 1)
=− log2 − log2 =
pX (1) pX (1) pX (1) pX (1)
0.3 0.3 0.1 0.1
=− log2 − log2
0.4 0.4 0.4 0.4
Deci
i(0/Y ) = H(Y ) − H(Y |0) = −0.8 log2 0.8 − 0.2 log2 0.2+
0.5 0.5 0.1 0.1
+ log2 + log2 = 0.0719
0.6 0.6 0.6 0.6
i(1/Y ) = H(Y ) − H(Y |1) = −0.8 log2 0.8 − 0.2 log2 0.2+
0.3 0.3 0.1 0.1
+ log2 + log2 = −0.0894
0.4 0.4 0.4 0.4
şi
I(X|Y ) = I(Y |X) = pX (0)i(0/Y ) + pX (1)i(1/Y ) =
= 0.6 · 0.0719 − 0.4 · 0.0894 = 0.0074
Presupunem că avem un sistem probabilistic (S, P ) şi E ⊂ S este un eveniment
ce apare rar, deci apariţia acestui eveniment surprinde. Ne interesează să măsurăm
gradul de surprindere (neaşteptare) a acestui eveniment. Notăm cu s(E) gradul de
surprindere a producerii evenimentului E. Mai mult, presupunem că:
• s(E) depinde doar de probabilitatea p(E) a evenimentului E;
• s(E) este o funcţie monoton descrescătoare, adică cu cât este mai mare
p(E), cu atât este mai mic s(E) (cu cât este mai mică p(E), cu atât este
mai mare s(E));
• Dacă avem două evenimente independente E1 şi E2 , atunci gradul de sur-
prindere de producere evenimentului E1 ∩ E2 este suma gradelor pentru
cele două evenimente, adică s(E1 ∩ E2 ) = s(E1 ) + s(E2 ).
Se poate demonstra că singura funcţie care verifică cele trei condiţii este

s(E) = − log2 p(E)


INFORMAŢIA ŞI ENTROPIA 15

Exemplul 11. Presupunem că avem jocul LOTO 6/49, deci sunt
6 49!
C49 = = 13983816
6! · 43!
posibilităţi, prin urmare gradul de surpindere pentru s(câştig) = log2 13983816 =
23.737254771. Fie X variabila aleatoare ce ia valorile 0 :câştig, 1 : nu câştig. Atunci:
1 1
pX (0) = , pX (1) = 1 − ,
13983816 13983816
deci entropia variabilei X este
1 1
H(X) = − log2 −
13983816 13983816
   
1 1
− 1− log2 1 − ≈ 0.0000018
13983816 13983816
Prin urmare, incertitudinea asupra posibilităţii de câştig este foarte mică, deoarece
suntem aproape convinşi că nu vom câştiga.
Exemplul 12. Considerăm că ı̂n urma unui experiment apar evenimentele E sau
Ē cu probabilităţile p, respectiv 1 − p. Cantitatea de incertitudine este
H = −p log2 p − (1 − p) log2 (1 − p)

Incertitudinea este 0 dacă p = 0 sau p = 1 şi este maximală când p = 1/2. În
acest ultim caz avem şi cantitatea maximală de informaţie obţinută prin observarea
evenimentului E relativ la X (are sau nu are loc evenimentul E). Gradul de sur-
prindere este maximal (infinit) dacă p = 0 (deoarece nu ne aşteptăm să apară E)
şi este 0 dacă p = 1 (deoarece suntem convinşi că apare E, deci producerea acestui
eveniment nu surprinde.)
În concluzie, dacă X este o variabilă aleatoare, atunci entropia este:
H(X) = −pX (x1 ) log2 pX (x1 ) − . . . − pX (xn ) log2 pX (xn )
16 INFORMAŢIA ŞI ENTROPIA

valoarea medie a gradelor de surprindere − log2 pX (xi ) a evenimentelor X = xi .


Considerăm două variabile aleatoare X,Y asociate sistemului probabilistic (S1 ×
S2 , P ). Vrem să aflăm cum se modifică gradul de surprindere al evenimentului
X = x când se observă Y = y. Iniţial, gradul de surprindere pentru evenimentul
E = {X = x} este − log2 pX (x). După ce s-a observat Y = y, gradul de surprindere
este
pX,Y (x, y)
−log2 pX|y (x|y) = − log2 .
pY (y)
Prin urmare, gradul de surprindere se modifică şi este egal cu:
pX,Y (x, y) pX,Y (x, y)
− log2 pX (x) + log2 = log2 .
pY (y) pX (x)pY (y)
Reamintim că informaţia mutuală despre X prin observarea lui Y este:
X pX,Y (x, y)
I(X|Y ) = pX,Y (x, y) log2 ,
x,y
pX (x)pY (y)

deci este valoarea medie a gradelor de surprindere a unei valori X când s-a observat
o valoare Y .
Altfel spus, valoarea medie a cantităţii de informaţie obţinută din X prin obser-
varea Y este egală cu valoarea medie a gradelor de surprindere observând X, ştiind
că Y s-a observat.
CODAREA SURSELOR

Definiţia 1. • O sursă de informaţie este un dispozitiv care emite mesaje ca


sunete, imagini, forme. O sursă discretă de informaţie debitează mesaje la
momente discrete de timp, fiecare mesaj fiind reprezentat printr-un număr
finit de simboluri
• Un simbol este un element dintr-o mulţime finită numită alfabet.
• Mesajele sursei ajung ı̂ntr-un emiţător (aflat ı̂ntre sursă şi canal) care le
transformă ı̂n secvenţe de cuvinte de cod. Cuvintele de cod sunt secvenţe
de simboluri din alfabetul folosit de emiţător.

Emiţătorul conţine:
• un codor de sursă care realizează codarea sursei transformând cuvintele
sursei ı̂n cuvinte de cod. Se folosesc:
– coduri de compactare a datelor, care oferă posibilitatea reprezentării
mai restrânse a datelor sursei; dispozitivul corespunzător este un codor
de compactare a datelor;
– coduri de compresie a datelor pentru scurtarea ı̂n medie a cuvintelor
furnizate de sursa de informaţie; sunt implementate ı̂ntr-un codor de
compresie a datelor;
• un codor de canal care realizează codarea canalului transformând o secvenţă
de simboluri ale unui cuvânt de cod al sursei ı̂ntr-o altă secvenţă numită
cuvânt de cod al canalului. Se folosesc:
– coduri de transmisiune a datelor sau coduri cu controlul erorilor pentru
a contracara efectul perturbaţiilor de pe canal
– coduri de translaţie a datelor sau coduri pentru canale cu constrângeri
care prepară secvenţa de simboluri transmisă pentru a deveni compat-
ibilă cu constrângerile canalului
• un modulator care reprezintă fiecare simbol al cuvântului de cod al canalu-
lui prin simboluri analogice alese dintr-un set finit de simboluri analogice
posibile. Secvenţa de simboluri analogice se numeşte formă de undă şi
reprezintă semnalul transmis, propagat pe canal. Semnalul este, de ex-
emplu, o undă electromagnetică, sonoră, capabilă să se propage printr-un
mediu dat.
Receptorul conţine blocurile care realizează operaţiile inverse celor realizate de
emiţător:

Date: 2022-2023.
1
2 CODAREA SURSELOR

• demodulatorul care primeşte de la canal semnalul recepţionat şi furnizează


cuvântul recepţionat demodulat;
• decodorul de canal care furnizează cuvântul de cod al sursei estimat;
• decodorul de sursă care furnizează mesajul decodat estimat.
Formal, o sursă de informaţie, notată cu U sau cu Ut (când depinde de timp),
este un şir de variabile aleatoare cu valori din alfabetul νU . Fiecare simbol cu
probabilitatea P (Ut = ui ) este emis de sursă la momentul de timp t. O sursa fără
memorie emite câte un simbol ui a cărui probabilitate de apariţie nu depinde de
simbolurile precedente, adică:
∀t ≥ 1, ∀ui ∈ νU : P (Ut = ui |U1 , . . . , Ut−1 ) = P (Ut = ui ).
Pentru moment vom considera numai surse staţionare, adică surse care generează
simboluri ale căror probabilităţi nu depind de timp, ci doar de poziţiile lor relative.
Notăm P (U = ui ) = pi şi presupunem că toate simbolurile din alfabetul sursei au
pi 6= 0 (deci nu ne interesează simbolurile din alfabetul sursei a căror probabilitate
de apariţie este zero.)
Mai mult, considerăm doar cazul ı̂n care un singur cuvânt de cod este asociat
fiecărui simbol al sursei, deci procedeul de codare Z := f (U ) este o funcţie de la
alfabetul sursei νU la mulţimea cuvintelor de cod νZ .
Dacă notăm cu Z ∗ mulţimea tuturor secvenţelor de lungime finită de simboluri
din alfabetul codului Z, atunci mulţimea cuvintelor de cod νZ este o submulţime
a lui Z ∗ care nu conţine cuvântul vid (unica secvenţă de lungime zero).
Definiţia 2. Pentru o sursă discretă de informaţie un cod se numeşte nesingular
dacă
ui 6= uj ⇒ zi 6= zj ,
adică toate cuvintele de cod zi sunt diferite (f : νU → νZ este injectivă).
Cum nu ne interesează cuvinte de cod care nu corepund simbolurilor sursei,
putem să considerăm f : νU → νZ o funcţie bijectivă.
Definiţia 3. Un cod al unei surse discrete se numeşte unic decodabil dacă fiecărei
succesiuni de cuvinte de cod ı̂i corespunde un simbol unic sau o succesiune unică
de simboluri ale sursei.
Exemplul 1. Fie o sursă cu simbolurile νU = {a, b, c} şi considerăm codarea acestei
surse dată de:
a 7→ 1 b 7→ 00 c 7→ 11.
Avem un cod nesingular, deoarece toate cuvintele de cod sunt diferite, νZ = {z1 =
1, z2 = 00, z3 = 11}. Cum mesajele aaaa 7→ 1111 şi cc 7→ 1111, codul nu este unic
decodabil.
Exemplul 2. Fie o sursă cu simbolurile νU = {a, b, c} şi considerăm codarea acestei
surse dată de:
a 7→ 1 b 7→ 00 c 7→ 10.
Avem un cod nesingular, deoarece νZ = {z1 = 1, z2 = 00, z3 = 10}. Se poate
arăta că este un cod unic decodabil. De exemplu, secvenţa 11000 este z1 z3 z2 şi se
decodează prin acb, iar secvenţa 100001 reprezintă z1 z2 z2 z1 şi se decodează prin
abba.
CODAREA SURSELOR 3

Definiţia 4. Cuvântul de cod z este prefix pentru cuvântul de cod z 0 dacă z este
ı̂nceputul cuvântului z 0 (dacă presupunem că z are n simboluri, atunci primele n
simboluri ale lui z 0 sunt cele din z.)
Observaţia. Orice cuvânt de cod z este prefix pentru z.
Definiţia 5. Un cod al unei surse discrete este fără prefix dacă nici un cuvânt de
cod nu este prefix pentru alt cuvânt de cod.
Altfel spus, un cod Z, cu mulţimea de cuvinte de cod νZ din alfabetul Z, este
fără prefix dacă şi numai dacă pentru orice z ∈ νZ şi pentru orice y ∈ Z ∗ , dacă zy
este un cuvânt de cod, atunci y =  (este cuvântul de lungime zero).
Exemplul 3. Considerăm o sursă cu simbolurile νU = {a, b, c} şi codul Z definit
astfel:
a 7→ 0 b→
7 10 c 7→ 11.
Codul Z este fără prefix.
Exemplul 4. Considerăm o sursă cu simbolurile νU = {a, b, c} şi codul Z definit
astfel:
a 7→ 1 b 7→ 00 c 7→ 10.
Codul Z nu este fără prefix deoarece z1 = 1 este prefix pentru z3 = 10.
Propoziţia 1. Orice cod fără prefix este unic decodabil.
Observaţia. Reciproca nu este adevărată, deci există coduri unic decodabile care
nu sunt fără prefix.
Exemplul 5. Fie o sursă cu simbolurile νU = {a, b, c} şi considerăm codarea acestei
surse dată de:
a 7→ 1 b 7→ 00 c 7→ 10.
Acest cod este unic decodabil, dar nu este fără prefix, deoarece 1 este prefix pentru
10.
Definiţia 6. Un cod se numeşte instantaneu decodabil dacă şi numai dacă fiecare
cuvânt de cod poate fi decodat rapid, imediat ce este recepţionat.
Propoziţia 2. Un cod este instantaneu decodabil dacă şi numai dacă este fără
prefix.
4 CODAREA SURSELOR

Un cod fără prefix poate fi reprezentat sub forma unui graf arbore.
• Un arbore este un graf ce ı̂ncepe din ”nodul rădăcină”. Fiecare alt nod din
graf este fie nod interior, fie nod final (leaf).
• Nodurile interioare au una sau mai multe ramificaţii, iar numărul aces-
tor ramificaţii se numeşte aritatea nodului (vom numi nodurile interioare
”părinţi” pentru ramificaţii, iar nodurile ce corespund ramificaţiilor sunt
”copii”; astfel, nodurile finale sunt cele fără copii, deci cu aritate zero).
• Profunzimea unui nod este numărul de arce/muchii ce leagă nodul rădăcină
de acel nod. Prin convenţie, nodul rădăcină are profunzime zero.
• Profunzimea unui arbore este maximum profunzimilor nodurilor finale.
• Nodul n1 acoperă nodul n2 dacă drumul de la rădăcină la nodul n2 conţine
n1 . Nodul n1 acoperă pe n1 .

Definiţia 7. Un arbore n−ar, n ≥ 1, este un arbore ı̂n care fiecare nod interior
are aritate n sau 0 (deci fiecare nod interior are exact n ramificaţii sau nu are
ramificaţii).
Definiţia 8. Un arbore n−ar este complet dacă toate nodurile finale au aceeaşi
profunzime.
Propoziţia 3. Într-un arbore n−ar complet de profunzime d ≥ 0, fiecare nod cu
profunzimea δ, 0 ≤ δ ≤ d acoperă exact nd−δ noduri finale.

Figure 1. arbore complet ternar

Figure 2. arbore ternar


CODAREA SURSELOR 5

Definiţia 9. Un arbore de codare este un arbore n−ar, muchiile fiind notate cu


litere dintr-un alfabet cu n litere, astfel ı̂ncât fiecare latură ce părăseşte nodul
este notată cu una din cele n litere. Cuvintele de cod se asociază nodurilor finale,
simbolurile care-l compun fiind asociate ramurilor succesive ce leagă nodul rădăcină
de nodul final ales.
Un cod cu un alfabet cu n litere se numeşte cod n−ar.
Exemplul 6. Considerăm codul binar
νZ = {00, 01, 10, 110, 11100, 11101, 11110, 11111}
reprezentat sub forma unui arbore binar:

Propoziţia 4. Pentru fiecare cod n−ar fără prefix, există un arbore n−ar de codare
astfel ı̂ncât fiecare cuvânt de cod corespunde literelor de pe drumul ce leagă nodul
rădăcină de nodul final.
Invers, orice arbore de codare defineşte un cod fără prefix, cuvintele de cod fiind
definite de drumurile de la nodul rădăcină la nodul final din arborele de codare.
Facem convenţia ca nodurile finale dintr-un arbore de codare să fie notate cu
simbolurile sursei astfel ı̂ncât cuvântul de cod dat de literele drumului să core-
spundă semnalului sursei. Spunem că avem un cod complet dacă fiecare nod final
corespunde unui cuvânt de cod.
Exemplul 7. Considerăm sursa cu simbolurile {a, b, c} şi codul fără prefix
a 7→ 0, b 7→ 10, c 7→ 11.
Arborele corespunzător acestui cod este:
6 CODAREA SURSELOR

şi este un cod complet (toate nodurile finale corespund cuvintelor de cod)
Exemplul 8. Considerăm sursa cu simbolurile {a, b} şi codul binar fără prefix
a 7→ 0, b 7→ 100.
Arborele binar corespunzător acestui cod este:

şi nu este un cod complet (sunt noduri finale care ar conduce la cuvintele de cod
11, 101, inexistente ı̂n codul considerat.)
Teorema 1 (Teorema de existenţă a codurilor fără prefix: inegalitatea lui Kraft).
Există un cod D−ar fără prefix cu N cuvinte de cod de lungimi l1 , . . . , lN dacă şi
N
D−li ≤ 1, cu egalitate pentru codurile fără prefix complete.
P
numai dacă
i=1

Observaţia. Teorema afirmă că se poate construi un cod fără prefix dacă şi numai
dacă are loc inegalitatea, dar nu orice cod care verifică inegalitatea este fără prefix.
Exemplul 9. Considerăm codul binar complet fără prefix
CODAREA SURSELOR 7

Cuvintele de cod sunt z1 = 0, z2 = 10, z3 = 11, de lungimi l1 = 1, l2 = l3 = 2.


Avem D = 2 (cod binar), N = 3, iar relaţia se verifică (cu egalitate):
N
X
D−li = 2−1 + 2−2 + 2−2 = 1.
i=1

Exemplul 10. Inegalitatea lui Kraft afirmă că se poate construi un cod ternar
(D = 3) fără prefix cu lungimile cuvintelor de cod l1 = 1, l2 = l3 = 2, l4 = 3
deoarece:
N
X 46
D−li = 3−1 + 3−2 + 3−2 + 3−3 = < 1,
i=1
81
deci codul nu este complet.
Un astfel de cod este:

deci
a 7→ 0, b 7→ 12, c 7→ 20, d 7→ 211.
Exemplul 11. Presupunem că vrem să construim un cod binar (D = 2) pentru
o sursă primară care emite N = 5 simboluri. Dacă alegem lungimile cuvintelor
l1 = 1, l2 = 2, l3 = 2, l4 = 3, l5 = 3, atunci
5
2−1 + 2−2 + 2−2 + 2−3 + 2−3 = > 1,
4
deci nu putem să construim un cod fără prefix cu aceste lungimi ale cuvintelor de
cod.
Nu orice cod care verifică inegalitatea lui Kraft este cod fără prefix.
Exemplul 12. Fie o sursă cu simbolurile νU = {a, b, c} şi considerăm codarea
acestei surse dată de:
a 7→ 1 b 7→ 00 c 7→ 10.
Acest cod nu este fără prefix, deoarece 1 este prefix pentru 10. Inegalitatea lui
Kraft devine:
X 3
D−li = 2−1 + 2−2 + 2−2 = 1,
i=1
prin urmare teorema afirmă că se poate construi un cod fără prefix cu aceste lungimi
ale cuvintelor.
8 CODAREA SURSELOR

Demonstraţie (inegalitatea lui Kraft): Presupunem că există un cod D−ar fără pre-
N
D−li ≤ 1.
P
fix ale cărui cuvinte de cod au lunigimile l1 , . . . , lN . Demonstrăm că
i=1
Notăm cu L = max li + 1 şi considerăm arborele D−ar complet de profunzime L.
i
Evident, arborele corespunzător codului fără prefix se obţine din arborele complet
astfel: nodurile ce corespund cuvintelor de cod nu se mai ramifică (fiind cod fără
prefix), deci ”ştergem” subgraful generat de fiecare astfel de nod.
Arborele ternar complet şi codul fără prefix
a 7→ 0, b 7→ 12, c 7→ 20, d 7→ 21.

Arborele complet are DL noduri finale. Nodul ce corespunde cuvântului de


cod zi de lungime li blochează utilizarea a DL−li noduri pe nivelul L (deci, faţă
de arborele complet cu DL noduri finale, are DL−li noduri finale). De exemplu,
cuvântul de cod 0, cu l1 = 1, blochează folosirea a 33−1 = 9 noduri pe nivelul
L = 3, iar cuvântul de cod 12, cu l1 = 2, blochează folosirea a 33−2 = 3 noduri.
Două cuvinte de cod de lungime lk < L blochează noduri diferite pe nivelul L.
Numărul tuturor nodurilor blocate este cel mult egal cu numărul tuturor nodurilor
de la nivelul L, deci:
N
X
DL−lk ≤ DL ,
k=1
de unde
N
X
D−lk ≤ 1.
k=1
Dacă presupunem că avem un cod complet fără prefix, atunci toate nodurile
finale corespund cuvintelor de cod, deci toate cele DL noduri de la nivelul L vor fi
eliminate. Atunci
XN
DL−li = DL ,
i=1
deci obţinem egalitate.
Invers, presupunem că
N
X
D−lk ≤ 1
k=1
şi vrem să construim codul fără prefix.
CODAREA SURSELOR 9

Fie ni numărul cuvintelor de cod de lungime i ≤ l, unde l = max li este lungimea


i
maximă a cuvintelor de cod. Atunci are loc relaţia:
l
X N
X
ni D−i = D−lk ≤ 1.
i=1 k=1
−1 −2 −l
n1 D + n2 D + . . . + nl D ≤ 1 ⇔ nl ≤ Dl − n1 Dl−1 − . . . − nl−1 D
Cum nl ≥ 0, obţinem Dl − n1 Dl−1 − . . . − nl−1 D ≥ 0, deci nl−1 ≤ Dl−1 − n1 Dl−2 −
. . . − nl−2 D. Asemănător folosim, pe rând, nl−1 , . . . , n1 ≥ 0, şi, ı̂ntr-un final,
ajungem la
n2 ≤ D2 − n1 D, n1 ≤ D

• Condiţia n1 ≤ D afirmă că numărul cuvintelor de cod de lungime 1 este cel
mult egal cu numărul nodurilor de la nivelul 1.
• Condiţia n2 ≤ D2 − n1 D afirmă că numărul cuvintelor de cod de lungime
2 este cel mult egal cu diferenţa dintre numărul nodurilor de la nivelul 2
şi numărul n1 D de noduri blocate la nivelul 2 de cuvintele de cod de pe
primul nivel.
• Asemănător se interpretează celelalte condiţii.
Obţinem deci că putem alege n1 cuvinte de un simbol, n2 cuvinte de 2 simboluri
ş.a.m.d. astfel ı̂ncât să nu fie prefixe pentru următoarele alegeri.
Prin această construcţie, de fapt se realizează un graf arbore al unui cod fără
prefix.
• ı̂ncepem cu nodul rădăcină
• pentru orice 0 ≤ k ≤ l:
(a) atribuim un cuvânt de cod astfel ı̂ncât li = k unui nod de la nivelul k;
(b) ramificăm nodurile rămase la nivelul k cu câte D noduri la nivelul
k + 1;
• numărul nodurilor ramificate la (b) este Dk − nj Dk−j , ceea ce ı̂nseamnă
P
j≤k
Dk+1 − nj Dk+1−j noduri noi la nivelul k+1. Dar Dk+1 − nj Dk+1−j ≥
P P
j≤k j≤k
nk+1 , adică rămân noduri pentru a repeta (a) şi (b).
• Pentru egalitate, atunci numărul nodurilor rămase după pasul (a) pentru
N
ultimul nivel l este: Dl − nj Dl−j = Dl − Dl−li = Dl (1− D−li ) = 0,
P P P
j≤l i=1 i
deci toate nodurile au fost folosite, deci codul este complet.
Scopul este de a coda o sursă de informaţie astfel ı̂ncât să minimizăm media
lungimilor cuvintelor de cod.
Definiţia 10. Fie o sursă de informaţie cu simbolurile ui , 1 ≤ i ≤ N , şi prob-
abilităţile de apariţie pi , li este lungimea cuvântului de cod corespunzătoare sim-
bolului ui . Atunci lungimea medie a codului (a cuvintelor de cod) se notează cu
E[L] şi se defineşte prin:
XN
E[L] = pi li .
i=1

Ne interesează codurile fără prefix pentru care E[L] este cât mai mică posibil.
10 CODAREA SURSELOR

Exemplul 13. Considerăm sursa de informaţie U cu simbolurile u1 = 1, u2 =


2, u3 = 3, u4 = 4, u5 = 5 şi probabilităţile p1 = 0.125, p2 = 0.3, p3 = 0.125, p4 =
0.25, p5 = 0.2. Considerăm cuvintele de cod ce corespund simbolurilor sursei:
z1 = 1110, z2 = 110, z3 = 10, z4 = 1111, z5 = 0.
Avem l1 = 4, l2 = 3, l3 = 2, l4 = 4, l5 = 1 şi lungimea medie a codului este:
E[L] = p1 l1 + . . . + p5 l5 = 2.85
Am văzut că orice cod fără prefix defineşte un arbore n−ar, ı̂n care fiecare cuvânt
de cod este atribuit unui nod final din arbore (unui drum ce leagă nodul rădăcină
de nodul final). Mai mult, cum simbolurile sursei au probabilităţi, ataşăm fiecărui
cuvânt de cod probabilitatea corespunzătoare simbolului, deci fiecărui nod final.
Prin convenţie, un nod care nu corespunde unui cuvânt de cod are probabilitate
0.
Definiţia 11. Un arbore n−ar de probabilitate este un arbore n−ar cu numere
ı̂ntre 0 şi 1 atribuite nodurilor astfel:
• nodul rădăcină are atribuită probabilitatea 1;
• probabilitatea unui nod este suma probabilităţilor nodurilor copii.
Exemplul 14. Arbore binar de probabilitate:

Lema 2. Într-un arbore n−ar de probabilitate valoarea medie a profunzimii nodurilor


finale este egală cu suma probabilităţilor nodurilor interioare (eliminând nodurile
finale, dar considerând nodul rădăcină).
Observaţia. Pentru exemplul nostru avem:
1 + 0.8 + 0.675 + 0.375 =
= (0.2 + 0.8) + (0.125 + 0.675) + (0.3 + 0.375) + (0.125 + 0.25) =
= (0.2 + (0.125 + (0.3 + (0.125 + 0.25)))) + (0.125 + (0.3 + (0.125 + 0.25)))+
CODAREA SURSELOR 11

+(0.3 + (0.125 + 0.25)) + (0.125 + 0.25) =


= 0.2 · 1 + 0.125 · 2 + 0.3 · 3 + 0.125 · 4 + 0.25 · 4 = 2.85
Demonstraţie: Probabilitatea unui nod este egală cu suma probabilităţilor nodurilor
care se ramifică din nodul considerat. Deci suma probabilităţilor tuturor nodurilor
interioare este o sumă a probabilităţilor nodurilor finale. Dar fiecare probabilitate
a unui nod final apare ı̂n această sumă de d ori, unde d este profunzimea acestui
nod. Într-adevăr, un nod final de profunzime d este acoperit de d noduri interioare,
toate aceste noduri interioare fiind pe drumul de la rădăcină la nodul considerat.
Prin urmare, suma probabilităţilor nodurilor interioare este egală cu suma din-
tre produsul dintre probabilitatea fiecărui nod final şi profunzimea acestuia (adică
valoarea medie a profunzimilor nodurilor finale.) 
Definiţia 12. Fie N numărul nodurilor finale dintr-un arbore n−ar de probabili-
tate şi p1 , . . . , pN probabilităţile asociate. Atunci entropia nodurilor finale a unui
astfel de arbore se defineşte prin
X
Hleaf = − pi log2 pi .
i

Propoziţia 5. Pentru arborele n−ar de probabilitate ce corespunde arborelui de


codare fără prefix a unei surse de informaţie U , avem:
H(U ) = Hleaf .
Definiţia 13. Fie M numărul nodurilor interioare dintr-un arbore n−ar de prob-
abilitate şi P1 , . . . , PM probabilităţile acestora. Fie qi1 , . . . qini probabilităţile celor
ni noduri copii (includem şi nodurile finale) ale nodului interior de probabilitate
Pi . Atunci entropia ramificării acestui nod este:
ni
X qij qij
Hi = − log2 ,
j=1
Pi Pi
ni
P
unde Pi = qij .
j=1

Exemplul 15. Considerăm


12 CODAREA SURSELOR

Avem P1 = 1, P2 = 0.8, P3 = 0.675, P4 = 0.375 probabilităţile nodurilor interioare.


Pentru P1 = 1 avem n1 = 2, q11 = 0.2, q12 = 0.8, deci entropia ramificării
nodului P1 este:
H1 = −0.2 log2 0.2 − 0.8 log2 0.8 ≈ 0.7219
Pentru P2 = 0.8 avem n2 = 2, q21 = 0.125, q22 = 0.675, deci entropia ramificării
nodului P2 este:
0.125 0.125 0.675 0.675
H2 = − log2 − log2 ≈ 0.6252
0.8 0.8 0.8 0.8
Pentru P3 = 0.675 avem n3 = 2, q31 = 0.3, q32 = 0.375, deci entropia ramificării
nodului P3 este:
0.3 0.3 0.375 0.375
H3 = − log2 − log2 ≈ 0.99107
0.675 0.675 0.675 0.675
Pentru P4 = 0.375 avem n4 = 2, q41 = 0.125, q42 = 0.25, deci entropia ramificării
nodului P4 este:
0.125 0.125 0.25 0.25
H4 = − log2 − log2 ≈ 0.9182
0.375 0.375 0.375 0.375
Mai mult,
Hleaf = −0.2 log2 0.2 − 0.125 log2 0.125 − 0.3 log2 0.3−
−0.125 log2 0.125 − 0.25 log2 0.25 ≈ 2.23
Propoziţia 6. Entropia nodurilor finale dintr-un arbore n−ar de probabilitate este
egală cu
XM
Hleaf = Pi Hi ,
i=1
unde P1 , . . . , PM probabilităţile nodurilor interioare (inclusiv nodul rădăcină).
Teorema 3. Pentru orice două coduri fără prefix ale unei surse de informaţie,
codul care are cea mai mică lungime a cuvintelor de cod are cea mai mare rata de
entropie a simbolurilor.
Ne propunem să obţinem o margine inferioară a lungimii cuvintelor unui cod
fără prefix.
Teorema 4 (Prima teorema de codare a lui Shannon). Pentru orice cod fără pre-
fix D−ar folosit pentru codarea sursei discrete de informaţie fără memorie U de
entropie H(U ), lungimea medie a cuvintelor de cod satisface inegalitatea
H(U )
E[L] ≥ .
log2 D
Egalitatea are loc când cele D simboluri apar ı̂ntr-un cuvânt de cod cu aceeaşi
probabilitate, p(ui ) = pi = D−li .
Demonstraţie: Inegalitatea de demonstrat este echivalentă cu
H(U ) − E[L] log2 D ≤ 0.
Avem X X
H(U ) − E[L] log2 D = − pi log2 pi − li pi log2 D =
i i
CODAREA SURSELOR 13

D−li D−li
X X  
= pi log2 ≤ pi −1 ,
i
pi i
pi
unde am folosit log2 x ≤ x − 1 (dacă x ≤ 1).
Obţinem
X  D−li  X X
H(U ) − E[L] log2 D ≤ pi −1 = D−li − pi ≤ 1 − 1 = 0,
i
pi i i

ultima inegalitate fiind inegalitatea lui Kraft. 


Exemplul 16. Considerăm sursa U cu simbolurile u1 = 1, u2 = 2, u3 = 3, u4 = 4
şi probabilităţile de apariţie p1 = 0.5, p2 = 0.25, p3 = 0.125, p4 = 0.125. Fie Z
codul binar (D = 2) fără prefix dat prin z1 = 0, z2 = 10, z3 = 110, z4 = 111.
Avem lungimea medie a cuvintelor de cod este:
E[LZ ] = p1 l1 + . . . + p4 l4 = 0.5 · 1 + 0.25 · 2 + 0.125 · 3 + 0.125 · 3 = 1.75,
iar entropia sursei este
H(U ) = −p1 log2 p1 − . . . − p4 log2 p4 = 1.75.
În plus, orice alt cod fără prefix Z 0 verifică prima teoremă a lui Shannon, deci
H(U )
E[LZ 0 ] ≥ log = H(U ) = E[LZ ], ceea ce ı̂nseamnă că primul cod este optimal
22
(deci nu există alt cod fără prefix cu lungimea medie a cuvintelor de cod mai mică).
Teorema 5 (Teorema de existenţă a unui cod fără prefix optimal). Pentru orice
sursă de entropie H(U ) există un cod fără prefix D−ar astfel ı̂ncât lungimea medie
a cuvintelor de cod satisface inegalitatea:
H(U )
E[L] < +1
log2 D
Demonstraţie: Alegem lungimile cuvintelor de cod l1 , . . . , lQ astfel ı̂ncât să verifice
relaţia:
− log2 pi − log2 pi
≤ li < +1
log2 D log2 D
Demonstrăm că există un cod fără prefix cu aceste lungimi ale cuvintelor de cod.
Avem:
Q Q Q Q
X X log2 pi X X
D−li ≤ D log2 D = DlogD pi = pi = 1,
i=1 i=1 i=1 i=1
unde am folosit relaţia de schimbare a bazei logaritmului
log2 pi = log2 D logD pi .
Inegalitatea lui Kraft se verifică, deci există un cod fără prefix D−ar cu lungimile
cuvintelor l1 , . . . , lQ . Din alegerea făcută avem:
− log2 pi
li < + 1,
log2 D
deci
Q Q  
X X − log2 pi H(U )
E[L] = pi li < + 1 pi = +1
i=1 i=1
log2 D log2 D
ceea ce ı̂ncheie demonstraţia. 
14 CODAREA SURSELOR

Definiţia 14. Un cod fără prefix D−ar este optimal dacă nu există alt cod D−ar
care să prezinte o lungime medie a cuvintelor de cod mai mică. Deci un cod este
optimal dacă
H(U ) H(U )
≤ E[L] < +1
log2 D log2 D
Definiţia 15. Dacă lungimea medie a cuvintelor de cod este
H(U )
E[L] = ,
log2 D
atunci codul este absolut optimal.
TEHNICI DE CODARE COMPACTĂ FĂRĂ PREFIX.
ALGORITMUL HUFFMAN

1. Reamintim:
Definiţie 1.1. Un cod este o funcţie f : νU → νZ , unde νU este alfabetul sursei
discrete fără memorie U .
• Numim cod nesingular codul ce are toate cuvintele de cod distincte (adică f
este injectivă).
• Un cod este unic decodabil dacă fiecărei succesiuni de cuvinte de cod ı̂i core-
spunde o singură succesiune de simboluri ale sursei.
• Un cod este fără prefix dacă nici un cuvânt cod nu poate fi obţinut din altul
prin adăugarea de simboluri din alfabetul codului.
Teoremă 1.1 (Teorema de existenţă a codurilor fără prefix: inegalitatea lui Kraft).
Există un cod D−ar fără prefix cu N cuvinte de cod de lungimi l1 , . . . , lN dacă şi
N
D−li ≤ 1, cu egalitate pentru codurile fără prefix complete.
P
numai dacă
i=1

Observaţie. Teorema afirmă că se poate construi un cod fără prefix dacă şi numai
dacă are loc inegalitatea, dar nu orice cod care verifică inegalitatea este fără prefix.
Teoremă 1.2. Pentru orice cod fără prefix D−ar folosit pentru codarea sursei dis-
crete de informaţie fără memorie U de entropie H(U ), lungimea medie a cuvintelor
de cod satisface inegalitatea
H(U )
E[L] ≥ .
log2 D
Egalitatea are loc când cele D simboluri apar ı̂ntr-un cuvânt de cod cu aceeaşi prob-
abilitate, p(ui ) = pi = D−li .
Teoremă 1.3 (Teorema de existenţă a unui cod fără prefix optimal). Pentru orice
sursă de entropie H(U ) există un cod fără prefix D−ar fără prefix astfel ı̂ncât
lungimea medie a cuvintelor de cod satisface inegalitatea:
H(U )
E[L] < +1
log2 D
Definiţie 1.2. Un cod fără prefix D−ar este optimal dacă nu există alt cod D−ar
fără prefix care să prezinte o lungime medie a cuvintelor de cod mai mică. Prin
urmare, o condiţie (necesară, dar nu suficientă) pentru ca un cod să fie optimal este
H(U ) H(U )
≤ E[L] < +1
log2 D log2 D

1
Definiţie 1.3. Dacă lungimea medie a cuvintelor de cod este
H(U )
E[L] =
log2 D
atunci codul este absolut optimal.
Condiţia are loc dacă p(ui ) = D−li . Într-adevăr,
X 1 X X
E[L] = pi li = − pi log2 pi = − pi logD pi ,
i
log 2 D i i
deci X
pi (li + logD pi ) = 0.
i
Obţinem logD pi = −li , deci pi = D−li , pentru orice i.

2. Algoritmul de codare Shannon-Fano


Ne dorim să optimizăm codul fără prefix, adică să minimizăm lungimea medie a
H(U )
cuvintelor de cod cât mai aproape de log D
, astfel ı̂ncât:
2
• cuvintele de cod să fie de lungimi l1 , . . . , lQ ;
• să fie verificată inegalitatea lui Kraft cât mai aproape de limită.
Definiţie 2.1. Un cod se numeşte compact dacă prin procedeul de codare a sim-
bolurilor sursei se minimizează lungimea medie a cuvintelor de cod.
Pentru ı̂nceput, presupunem că vrem să construim un cod binar fără prefix, alfa-
betul pentru cuvintele de cod fiind format din Z = {0, 1}, D = 2. Reamintim faptul
că un cod absolut optimal se obţine dacă
p(ui ) = D−li = 2−li ,
echivalent cu
li = − log2 p(ui ).

Algoritm de codare binară Shannon-Fano:


• Considerăm sursa U cu simbolurile {u1 , . . . , uQ }, p(ui ) = 2−li , şi le ordonăm
descrescător după probabilităţi:
p(u1 ) ≥ p(u2 ) ≥ . . . ≥ p(uQ ).
• Împărţim simbolurile {u1 , . . . , uQ } ı̂n două submulţimi disjuncte, notate cu
U0 şi U1 astfel ı̂ncât p(U0 ) = p(U1 ), unde
X X
p(U0 ) = p(ui ), p(U1 ) = p(ui ).
ui ∈U0 ui ∈U1
P
Cum p(ui ) = 1, obţinem că
ui ∈U

p(U0 ) = p(U1 ) = 2−1

2
• Convenim să atribuim 0 fiecărui simbol din U0 şi 1 fiecărui simbol din U1 .
• Fiecare submulţime U0 şi U1 este ı̂mpărţită ı̂n două submulţimi: U00 , U01 ,
respectiv U10 , U11 astfel ı̂ncât
p(U00 ) = p(U01 ) = p(U10 ) = p(U11 ) = 2−2 .
Convenim să atribuim 0 fiecărui simbol din U00 , U10 şi 1 fiecărui simbol din
U01 , U11 . Deci cuvintele de cod vor fi de forma 00, 10, 01, 11.
• Se continuă până când fiecare submulţime este formată dintr-un singur sim-
bol uk , cu p(uk ) = 2−lk , lk este numărul de indici din mulţimea corespunzătoare
şi s-au epuizat toate simbolurile sursei. Cuvântul de cod corespunzător sim-
bolului uk se obţine prin concatenarea indicilor.
Concluzie:
Se obţine un cod absolut optimal
H(U )
E[L] = = H(U )
log2 D
deoarece
Q Q
X X
E[L] = p(ui )li = − p(ui ) log2 p(ui ) = H(U ).
i=1 i=1
Pentru coduri absolut optimale, inegalitatea lui Kraft este verificată la limită:
Q Q
X X
−li
2 = p(ui ) = 1.
i=1 i=1

În concluzie, orice cod absolut optimal este compact, reciproca nu este ı̂n general
valabilă.
Exemplu 2.1. Considerăm sursa cu distribuţia:
 
u1 u2 u3 u4 u5 u6 u7 u8 u9 u10
U : 
−2 −2 −3 −3 −4 −4 −5 −5 −5 −5
2 2 2 2 2 2 2 2 2 2
pe care vrem să o codăm.
Pas 1: Considerăm submulţimile
U0 = {u1 , u2 }, U1 = {u3 , . . . , u10 }
astfel ı̂ncât p(U0 ) = p(U1 ) = 2−1 .
Pas 2: Considerăm
U00 = {u1 }, U01 = {u2 }
−2
cu p(U00 ) = p(U01 ) = 2 . Considerăm
U10 = {u3 , u4 }, U11 = {u5 , . . . , u10 }
cu p(U10 ) = p(U11 ) = 2−2 .
Pas 3: Considerăm
U100 = {u3 }, U101 = {u4 }

3
cu p(U100 ) = p(U101 ) = 2−3 şi
U110 = {u5 , u6 }, U111 = {u7 , u8 , u9 , u10 }
−3
p(U110 ) = p(U111 ) = 2
Pas 4: Considerăm
U1100 = {u5 }, U1101 = {u6 }, U1110 = {u7 , u8 }, U1111 = {u9 , u10 }
cu p(U1100 ) = p(U1101 ) = p(U1110 ) = p(U1111 ) = 2−4
Pas 5: Considerăm
U11100 = {u7 }, U11101 = {u8 }, U11110 = {u9 }, U11111 = {u10 }
cu
p(U11100 ) = p(U11101 ) = p(U11110 ) = p(U11111 ) = 2−5
Putem să reprezentăm algoritmul sub forma unui tabel
ui p(ui ) ci li
u1 1/4 0 0 00 2
u2 1/4 1 01 2
u3 1/8 1 0 0 100 3
u4 1/8 1 101 3
u5 1/16 1 0 0 1100 4
u6 1/16 1 1101 4
u7 1/32 1 0 0 11100 5
u8 1/32 1 11101 5
u9 1/32 1 0 11110 5
u10 1/32 1 11111 5
sau sub forma unui graf arbore, ı̂n care fiecărui nod i se ataşează probabilitatea
grupului asociat de simboluri. Unui nod final i se ataşează probabilitatea unui
simbol iniţial. Cuvântul de cod este alcătuit prin concatenarea literelor ce denumesc
muchiile grafului.

4
Pentru acest cod avem:
l1 = l2 = 2, l3 = l4 = 3, l5 = l6 = 4, l7 = l8 = l9 = l10 = 5
entropia sursei
10
X
H(U ) = − p(ui ) log2 p(ui ) = 2.18 bit/simbol,
i=1
lungimea medie a cuvintelor de cod este
10
X
E[L] = p(ui )li = 2.18 simbol.
i=1

Observaţie. Algoritmul poate fi aplicat şi ı̂n cazul ı̂n care p(ui ) 6= 2−li . În acest caz,
ı̂mpărţirea ı̂n submulţimi se face astfel ı̂ncât probabilitatea ca un simbol să aparţină
unei submulţimi să fie apropiată de probabilitatea să fie ı̂n altă mulţime. Pentru
lungimea cuvintelor de cod se doreşte a se verifica relaţia:
− log2 p(ui ) ≤ li < − log2 p(ui ) + 1.
Exemplu 2.2. Considerăm sursa cu distribuţia:
 
u1 u2 u3 u4
U : 
0.45 0.3 0.15 0.1
Putem să reprezentăm algoritmul sub forma unui tabel
ui p(ui ) ci li − log2 p(ui )
u1 0.45 0 0 00 2 1.15
u4 0.1 0 1 0 0 0100 4 3.32
u2 0.3 1 1 11 2 1.73
u3 0.15 1 0 0 100 3 2.73

5
Pentru acest cod avem:
l1 = l2 = 2, l3 = 3, l4 = 4
entropia sursei este
4
X
H(U ) = − p(ui ) log2 p(ui ) = 1.77 bit/simbol.
i=1

lungimea medie a cuvintelor de cod este


4
X
E[L] = p(ui )li = 2.35 simbol.
i=1

Sau:
ui p(ui ) ci li − log2 p(ui )
u1 0.45 0 0 00 2 1.15
u2 0.3 0 1 01 2 1.73
u3 0.15 1 0 0 100 3 2.73
u4 0.1 1 0 1 0 1010 4 3.32

Pentru acest cod avem:


l1 = l2 = 2, l3 = 3, l4 = 4.
entropia sursei este
4
X
H(U ) = − p(ui ) log2 p(ui ) = 1.77 bit/simbol,
i=1

6
lungimea medie a cuvintelor de cod este
4
X
E[L] = p(ui )li = 2.35.
i=1

Putem să renunţăm la condiţia


− log2 p(ui ) ≤ li < − log2 p(ui ) + 1,
mai exact la limita inferioară.
ui p(ui ) ci li − log2 p(ui )
u1 0.45 0 0 1 1.15
u2 0.3 1 0 01 2 1.73
u3 0.15 1 1 0 110 3 2.73
u4 0.1 1 1 1 111 3 3.32

Pentru acest cod avem:


l1 = 1, l2 = 2, l3 = l4 = 3
entropia sursei
4
X
H(U ) = − p(ui ) log2 p(ui ) = 1.77 bit/simbol,
i=1

7
lungimea medie a cuvintelor de cod este
4
X
E[L] = p(ui )li = 1.8 simbol.
i=1

În concluzie, ı̂n cazul codurilor ı̂n care se pleacă de la simboluri cu p(ui ) 6= 2−li ,
algoritmul de codare binară Shannon-Fano nu asigură obţinerea codului de lungime
medie minimă.

3. Algoritmul Huffman
Algoritmul Huffman este singurul algoritm care conduce la un cod fără prefix ı̂n
care lungimea medie a cuvintelor de cod penru codarea este minimă.
Lema 3.1. Orice cod optimal fără prefix al unei surse cu simbolurile u1 , . . . , un şi
probabilităţile p(u1 ), p(u2 ), . . . , p(un ) are proprietatea că dacă p(ui ) > p(uj ), atunci
li ≤ lj .
Demonstraţie: Fie Z un cod optimal fără prefix şi considerăm codul Y obţinut din
codul Z prin interschimbarea a două cuvinte de cod zi şi zj : deci ı̂n Y avem yj = zi
şi yi = zj , iar yk = zk , pentru orice k 6= i, k 6= j. Atunci
X X
E[LY ] − E[LZ ] = p(us )ls − p(ut )lt = p(uj )li + p(ui )lj − (p(ui )li + p(uj )lj ) =
s t

= (p(ui ) − p(uj ))(lj − li )


Cum Z este optimal, avem E[LY ] ≥ E[LZ ], deci
(p(ui ) − p(uj ))(lj − li ) ≥ 0
Prin urmare, dacă p(ui ) > p(uj ), atunci lj − li ≥ 0, deci li ≤ lj 
Lema 3.2. Fie un cod optimal fără prefix al unei surse cu simbolurile u1 , . . . , un şi
probabilităţile p(u1 ) ≥ p(u2 ) ≥ . . . ≥ p(un ). Cuvintele de cod ce corespund ultimelor
două simboluri de cea mai mică probabilitate din alfabetul sursei au aceeaşi lungime,
adică ln−1 = ln .
Demonstraţie: Considerăm că pentru simbolurile un−1 şi un cuvintele de cod core-
spunzătoare zn−1 şi zn au lungimi diferite ln−1 < ln . Atunci, deoarece codul este fără
prefix, putem să eliminăm ultima cifră din cuvântul mai lung, zn (zn−1 nu poate să
fie prefix pentru zn ) şi obţinem un alt cod de lungime medie mai mică, contradicţie
cu proprietatea codului de a fi optimal. 
Lema 3.3. Fie un cod optimal fără prefix al unei surse cu simbolurile u1 , . . . , un
şi probabilităţile p(u1 ), p(u2 ), . . . , p(un ). În cazul ı̂n care avem două sau mai multe
cuvinte de cod de aceeaşi lungime, atunci două dintre acestea diferă numai prin
ultimul simbol.

8
Demonstraţie: Presupunem că dacă eliminăm ultimul simbol din toate cuvintele de
cod de aceeaşi lungime, atunci obţinem cuvinte de cod diferite. Atunci obţinem un
alt cod fără prefix ı̂n care lungimea medie a cuvintelor de cod este mai mică.

Corolar 3.1. Pentru un cod binar fără prefix optimal graful arbore nu conţine
noduri neutilizate. Deci un cod binar fără prefix este complet.
Demonstraţie: Presupunem că avem noduri finale neutilizate ı̂n graful arbore. Atunci,
pentru simbolul ui se poate renunţa la ultima cifră şi astfel se obţine un cod de
lungime medie mai mică. 

Teoremă 3.4 (de construcţie a unui cod binar fără prefix optimal). Fie o sursă
U şi simbolurile uQ−1 , uQ având probabilităţile cele mai mici. Considerăm un cod
Z 0 ataşat sursei artificiale U 0 ı̂n care simbolurile uQ−1 şi uQ formează un singur
simbol notat uQ−1,Q cu probabilitatea p(uQ−1,Q ) = p(uQ−1 ) + p(uQ ). Fie un cod Z
pentru sursa U se construieşte din codul pentru sursa U 0 ı̂n care cuvintele de cod
corespunzătoare simbolurilor uQ−1 şi uQ din sursa primară U sunt
0 0
zQ−1 = zQ−1,Q 0, zQ = zQ−1,Q 1,
0
unde zQ−1,Q este cuvântul de cod corespunzător simbolului uQ−1,Q , iar celelalte cu-
vinte de cod fiind cele din Z 0 .
Atunci codul Z este cod optimal pentru sursa U dacă codul Z 0 este cod optimal
pentru sursa artificială U 0 .
Demonstraţie. Considerăm simbolurile uQ−1 , uQ din sursa primară U având proba-
bilităţile cele mai mici. Cum dorim să obţinem un cod optimal, lungimile cuvintelor
de cod corespunzătoare celor două simboluri sunt printre cele mai lungi şi cuvintele
de cod diferă numai prin ultima poziţie. Considerăm un cod optimal Z 0 pentru
sursa artificială U 0 . Notăm cu li0 lungimile cuvintelor de cod zi0 din Z 0 şi cu E[LZ 0 ]

9
lungimea medie a cuvintelor de cod. Construim codul Z ı̂n care:
 0
l, i<Q−1
li = 0 i
li + 1 i ∈ {Q − 1, Q}
Atunci lungimea medie a cuvintelor din cod din Z este:
Q Q−2
X X
E[LZ ] = p(ui )li = p(ui )li + p(uQ−1 )lQ−1 + p(uQ )lQ
i=1 i=1

Q−2
X
= 0
p(ui )li0 + p(uQ−1 )(lQ−1 + 1) + p(uQ )(lQ + 1) =
i=1

Q
X
= p(ui )li0 + p(uQ−1 ) + p(uQ ) = E[LZ 0 ] + p(uQ−1 ) + p(uQ ).
i=1

Cum suma p(uQ−1 ) + p(uQ ) nu depinde de codul Z 0 , obţinem că E[LZ ] este minimă
dacă E[LZ 0 ] este minimă, deci codul Z este optimal dacă Z 0 este optimal. 

Algoritmul de codare binară Huffman: Se consideră sursa U cu simbolurile


{u1 , . . . , uQ }.
Pas 1: Ordonăm simbolurile descrescător ı̂n funcţie de probabilităţi:
p(u1 ) ≥ p(u2 ) ≥ . . . ≥ p(uQ−1 ) ≥ p(uQ ).
Pas 2: Grupăm ultimele două simboluri cu cele mai mici probabilităţi şi obţinem
U00 sursa artificială restrânsă (de ordin zero) cu simbolurile {u1 , . . . , uQ−2 , uQ−1,Q } şi
p(uQ−1,Q ) = p(uQ−1 ) + p(uQ ).
Pas 3: Prin convenţie, se asociază cifra 1 simbolului uQ−1 şi 0 simbolului uQ .
Pas 4: Se repetă Pas 1 - Pas 3 pentru noua sursă artificială U00 şi se obţine
sursa artificială restrânsă de ordin 1, U10 , cu simbolurile {u1 , . . . , uQ−3 , uQ−2,Q−1,Q }.
Pas 5: Se continuă până când se obţine o sursă artificială restrânsă de ordin Q−2
cu două simboluri: u1 şi u2,3,...,Q .
Pas 6: Cuvântul de cod complet pentru un simbol din sursa primară U se obţine
prin concatenarea cifrelor atribuite, parcurgând sursele restrânse ı̂n ordine inversă.
Observaţie. Se poate obţine un cod absolut optimal dacă probabilităţile simbolurilor
reunite ı̂n simbolul artificial sunt egale. În general se obţine un cod optimal cu atât
mai apropiat de un cod absolut optimal cu cât diferenţa probabilităţilor simbolurilor
reunite este mai mică.
Exemplu 3.1. Considerăm o sursă U cu simbolurile {u1 , . . . , u7 } şi probabilităţile
p1 = 0.25, p2 = 0.2, p3 = p4 = 0.15, p5 = p6 = 0.1, p7 = 0.05.

10
Cuvintele de cod corespunzătoare simbolurilor sunt:

u1 11
u2 01
u3 101
u4 100
u5 001
u6 0001
u7 0000

Evident că putem să inversăm atribuirea cifrelor (0 pe ramura superioară şi 1 pe
ramura inferioară) şi obţinem codul având cuvintele

u1 00
u2 10
u3 010
u4 011
u5 110
u6 1110
u7 1111

Putem să facem convenţia să punem 0 pe ramura simbolului cu probabilitate mai
mică:

11
În acest caz, cuvintele de cod corespunzătoare simbolurilor sunt:
u1 10
u2 00
u3 111
u4 100
u5 010
u6 0111
u7 0110
Evident că putem să inversăm atribuirea cifrelor şi obţinem codul având cuvintele
u1 01
u2 11
u3 000
u4 011
u5 101
u6 100
u7 1001
Pentru codurile obţinute avem:
7
X
E[L] = p(ui )li = 2.7 simboluri,
i=1

7
X
H(U ) = − p(ui ) log2 p(ui ) = 2.66 bit/simbol
i=1

12
Mai mult,
H(U ) = 2.66 < E[L] = 2.7 < H(U ) + 1 = 3.66,
deci codul este optimal, dar nu este absolut optimal.
Dacă folosim un alfabet cu D cifre 0, 1, . . . , D − 1, atunci putem să obţinem un
cod Huffman astfel:
Pas 1: ordonăm descrescător simbolurile sursei primare.
Pas 2: grupăm ultimele D simboluri cu cele mai mici probabilităţi şi obţinem sim-
bolul artificial uQ−D+1,...,Q−1,Q . După prima restrângere obţinem o sursă artificială
cu Q − D + 1 simboluri.
Pas 3: Se repetă algoritmul. După n restrângeri obţinem o sursă cu Q − nD + n
simboluri. Pentru ca operaţia de codare să fie posibilă, trebuie ca ultima sursă să
furnizeze D simboluri, deci avem D = Q − nD + n, de unde obţinem numărul total
de restrângeri
Q−D
n=
D−1
Exemplu 3.2. Considerăm o sursă U cu simbolurile {u1 , . . . , u7 } şi probabilităţile
p1 = 0.25, p2 = 0.2, p3 = p4 = 0.15, p5 = p6 = 0.1, p7 = 0.05. Vrem un cod ternar.

Pentru codul Huffman cu alfabetul {0, 1, 2} avem cuvintele de cod:


u1 0 u2 22
u3 20 u4 21
u5 12 u6 11
u7 10

13
Pentru codul obţinut avem:
7
X 7
X
E[L] = p(ui )li = 1.75 simboluri, H(U ) = − p(ui ) log2 p(ui ) = 2.66 bit/simbol
i=1 i=1
Mai mult,
H(U ) H(U )
= 1.68 < E[L] = 1.75 < 2.68 = + 1,
log2 D log2 D
deci codul este optimal, dar nu este absolut optimal.
Exemplu 3.3. Considerăm o sursă U cu simbolurile {u1 , . . . , u7 } şi probabilităţile
p1 = 0.25, p2 = 0.2, p3 = p4 = 0.15, p5 = p6 = 0.1, p7 = 0.05. Vrem un cod 4−ar

Pentru codul Huffman cu alfabetul {0, 1, 2, 3} avem cuvintele de cod:


u1 2 u2 1
u3 0 u4 33
u5 32 u6 31
u7 30
Pentru codul obţinut avem:
7
X 7
X
E[L] = p(ui )li = 1.4 simboluri, H(U ) = − p(ui ) log2 p(ui ) = 2.66 bit/simbol
i=1 i=1
Mai mult,
1.33 < E[L] = 1.4 < 2.33,

14
deci codul este optimal, dar nu este absolut optimal.
Exemplu 3.4. Să se folosească algoritmul de codare binară Huffman şi algoritmul
de codare binară Shannon-Fano pentru sursa ce emite simbolurile:
 
a b c d e f g
U:
0.01 0.24 0.05 0.2 0.47 0.01 0.02

Pentru codul Huffman cu alfabetul binar {0, 1} avem cuvintele de cod:


a 110001 b 10
c 1101 d 111
e 0 f 110000
g 11001
Pentru codul obţinut avem:
7
X
E[L] = p(ui )li = 1.97 simboluri, H(U ) = 1.85 bit/simbol
i=1

Pentru codul Shannon-Fano cu alfabetul binar {0, 1} avem cuvintele de cod:


a 111 b 110
c 101 d 100
e 01 f 001
g 000

15
Pentru codul obţinut avem:
X7
E[L] = p(ui )li = 2.53 simboluri, H(U ) = 1.85 bit/simbol
i=1

16
CANALE DISCRETE DE TRANSMISIE A INFORMAŢIEI

1. Canale de transmisie:
Definiţie 1.1. Un canal de comunicaţie reprezintă mediul fizic prin care se propagă
semnalele de la sursă la utilizator.
Orice canal este caracterizat de spaţiul de intrare, spaţiul de ieşire şi de legătura
probabilistică ı̂ntre cele două spaţii.

Clasificarea canalelor:
• după natura spaţiilor de intrare şi de ieşire:
– canale discrete: dacă ambele spaţii sunt discrete, formate deci din valori
discrete considerate la momente discrete de timp;
– canale continue: dacă ambele spaţii sunt continue din punctul de vedere
al valorilor conţinute. Mai mult, acestea pot fi discrete ı̂n timp (dacă se
transmite la momente discrete de timp) sau continue ı̂n timp (dacă se
transmite tot timpul);
– continuu-discrete sau discrete-continue dacă un spaţiu este continuu şi
celălalt este discret.
• după natura legăturii probabilistice intrare-ieşire:
– canal fără memorie dacă probabilităţile de tranziţie sunt independente
de succesiunea simbolurilor de intrare;
– canal cu memorie dacă probabilitatea oricărei ieşiri depinde de sim-
bolurile de intrare anterioare.
• după influenţa perturbaţiilor:
– canal cu perturbaţii
– canal fără perturbaţii.
Definiţie 1.2. Un canal discret fără memorie (DMC discrete memoryless channel)
este format din:
• un alfabet discret de intrare νX , elementele acestuia reprezentând posibilele
semnale emise pentru toate mesajele de intrare (sursa X);
• un alfabet discret de ieşire νY , elementele acestuia reprezentând posibilele
semnale primite;
• pentru fiecare x ∈ νX , probabilitatea condiţionată pY |X=x pe νY descrie
canalul prin faptul că pentru orice n ∈ N∗ avem:
P (Yn = yn |X1 = x1 , X2 = x2 , . . . , Xn = xn , Y1 = y1 , . . . , Yn−1 = yn−1 ) = P (Y = yn |X = xn )

1
Exemplu 1.1 (Canal binar simetric CBS). Cel mai simplu caz de DMC este canalul
binar simetric. Acesta este definit prin νX = νY = {0, 1} şi prin probabilităţile
condiţionate
pY |X=0 (1) = pY |X=1 (0) (”simetrie”).
Notăm cu p = pY |X=0 (1) = pY |X=1 (0), se numeşte rată de eroare, şi este singurul
parametru al unui canal binar simetric. Într-adevăr, avem
pY |X=0 (0) = pY |X=1 (1) = 1 − p.
Canalul binar simetric poate fi reprezentat sub forma unei diagrame, astfel:

Exemplu 1.2 (Prezenţa perturbaţiilor de-a lungul unui CBS). Vrem să transmitem
8 mesaje:
000, 001, 010, 011, 100, 101, 110, 111.
Presupunem că apar perturbaţii pe canal astfel ı̂ncât este schimbat un simbol din
zece, deci probabilitatea ca un simbol să fie transmis greşit (0 este recepţionat 1 şi
1 este recepţionat 0) este p = 0.1. Prin urmare, avem un canal binar simetric cu
parametrul (rata de eroare) p = 0.1.
Cum fiecare mesaj ce se doreşte a fi transmis este format din 3 simboluri, probabil-
itatea ca acesta să fie transmis corect este (1−p)3 = 0.93 = 0.719 (este probabilitatea
de a transmite corect cele trei simboluri ale mesajului). Prin urmare, probabilitatea
să recepţionăm un mesaj greşit este 1 − 0.719 = 0.281.
Definiţie 1.3. Un canal discret fără memorie este fără reacţie dacă
pXn |x1 ,x2 ,...,xn−1 ,y1 ,...,yn−1 = pXn |x1 ,x2 ,...,xn−1 ,
adică la alegerea unei succesiuni de simboluri de intrare nu intervine cunoaşterea
simbolurilor de ieşire anterioare y1 , . . . , yn−1 .
Teoremă 1.1. Pentru un canal discret fără memorie şi fără reacţie, pentru orice
n ∈ N avem:
n
X
H(Y1 , . . . , Yn |X1 , . . . , Xn ) = H(Yi |Xi ),
i=1
unde X1 , . . . , Xn este o secvenţă de intrare de lungime n şi Y1 , . . . , Yn corespunde
secvenţei de ieşire.

2
Demonstraţie: Din regula lanţului pentru probabilităţi, adică
n
Y
p(x1 , . . . , xn ) = p(xi |x1 , . . . xi−1 )
i=1
avem:
pX1 ,...,Xn ,Y1 ,...,Yn (x1 , . . . , xn , y1 , . . . , yn ) =
Yn
= pX1 (x1 )pY1 |x1 (y1 ) · pXi |x1 ,...,xi−1 ,y1 ,...,yi−1 (xi )pYi |x1 ,...,xi ,y1 ,...,yi−1 (yi ).
i=1
Deoarece canalul este fără reacţie, pentru orice 1 ≤ i ≤ n avem
pXi |x1 ,x2 ,...,xi−1 ,y1 ,...,yi−1 = pXi |x1 ,x2 ,...,xi−1 .
Obţinem:
pX1 ,...,Xn ,Y1 ,...,Yn (x1 , . . . , xn , y1 , . . . , yn ) =
n
Y
= pX1 (x1 )pY1 |x1 (y1 ) · pXi |x1 ,x2 ,...,xi−1 (xi )pYi |x1 ,...,xi ,y1 ,...,yi−1 (yi ) =
i=1
n
! n
!
Y Y
= pX1 (x1 ) pXi |x1 ,x2 ,...,xi−1 (xi ) · pY1 |x1 (y1 ) pYi |x1 ,...,xi ,y1 ,...,yi−1 (yi ) =
i=1 i=1
n
Y
= pX1 ,...,Xn (x1 , . . . , xn ) pY |Xi (yi ).
i=1
Rezultă că n
pX1 ,...,Xn ,Y1 ,...,Yn (x1 , . . . , xn , y1 , . . . , yn ) Y
= pY |Xi (yi ),
pX1 ,...,Xn (x1 , . . . , xn ) i=1
de unde obţinem
n
Y
pY1 ,...,Yn |x1 ,...,xn (y1 , . . . , yn ) = pY |Xi (yi ).
i=1

2. Capacitatea unui canal discret
Definiţie 2.1. Capacitatea unui canal discret fără memorie este cantitatea maximă
de informaţie pe care o poate transmite, deci
C = max I(X|Y ) = max I(Y |X)
pX pX

Exemplu 2.1. Capacitatea canalului binar simetric este


C = max I(X|Y ) = max(H(Y ) − H(Y |X)).
pX pX

Avem
H(Y |X) = pX (0)H(Y |X = 0) + pX (1)H(Y |X = 1)
şi
H(Y |X = 0) = −pY |X=0 (0) log2 pY |X=0 (0) − pY |X=0 (1) log2 pY |X=0 (1) =
= −(1 − p) log2 (1 − p) − p log2 p

3
H(Y |X = 1) = −pY |X=1 (0) log2 pY |X=1 (0) − pY |X=1 (1) log2 pY |X=1 (1) =
= −p log2 p − (1 − p) log2 (1 − p)
Obţinem deci
H(Y |X) = pX (0)H(Y |X = 0) + pX (1)H(Y |X = 1) =
= pX (0)(−(1 − p) log2 (1 − p) − p log2 p) + pX (1)(−p log2 p − (1 − p) log2 (1 − p)) =
= (−(1 − p) log2 (1 − p) − p log2 p)(pX (0) + pX (1) = −(1 − p) log2 (1 − p) − p log2 p
Am obţinut deci
H(Y |X) = −(1 − p) log2 (1 − p) − p log2 p.
Notăm cu h̃(p) = (1 − p) log2 (1 − p) + p log2 p şi observăm că nu depinde de pX .
Prin urmare, capacitatea canalului binar simetric este:
C = max(H(Y ) − H(Y |X)) = max H(Y ) − h̃(p).
pX pX

Cum Y este o variabilă aleatoare binară, avem că H(Y ) ≤ log2 2 = 1, deci
H(Y ) ≤ 1. Dacă presupunem că X este uniform repartizată (pX (0) = pX (1) = 0.5),
atunci
pY (0) = pX (0)pY |X=0 (0) + pX (1)pY |X=1 (0) = pX (0)(1 − p) + pX (1)p =
= 0.5(1 − p) + 0.5p = 0.5
pY (1) = pX (0)pY |X=0 (1) + pX (1)pY |X=1 (1) = pX (0)(1 − p) + pX (1)p =
= 0.5(1 − p) + 0.5p = 0.5
deci Y este uniform repartizată, prin urmare H(Y ) = 1. Obţinem deci max H(Y ) =
pX
1 şi capacitatea canulului binar simetric este
C = 1 − h̃(p) = 1 − ((1 − p) log2 (1 − p) + p log2 p).
Observaţie. Dacă p = 0, atunci capacitatea canalului este C = 1 − h̃(0) = 0, deci
canalul nu are perturbaţii.
Dacă p = 21 , atunci canalul are capacitate zero, iar dacă p = 1, capacitatea este 1.
În acest ultim caz, se poate identifica corect simbolul de intrare deoarece obţinerea
lui y1 reprezintă emisia lui x2 şi obţinerea lui y2 reprezintă emisia lui x1 .

4
Exemplu 2.2 (Canal binar cu anulări CBA). Notăm cu p probabilitatea de anulare
a fiecărui simbol. CBA are matricea de tranziţie dată de
 
1−p 0 p
P (Y |X) = ,
0 1−p p
şi capacitatea este C = 1 − p.

unde y3 este simbolul de anulare. Într-adevăr avem


C = max I(X|Y ) = max(H(Y ) − H(Y |X)).
pX pX

H(Y |X) = pX (x1 )H(Y |X = x1 ) + pX (x2 )H(Y |X = x2 )


şi
H(Y |X = x1 ) = −pY |X=x1 (y1 ) log2 pY |X=x1 (y1 ) − pY |X=x1 (y2 ) log2 pY |X=x1 (y2 )−
−pY |X=x1 (y3 ) log2 pY |X=x1 (y3 ) =
= −(1 − p) log2 (1 − p) − p log2 p = h˜(p)
H(Y |X = x2 ) = −pY |X=x2 (y1 ) log2 pY |X=x2 (y1 ) − pY |X=x2 (y2 ) log2 pY |X=x2 (y2 )−
−pY |X=x2 (y3 ) log2 pY |X=x2 (y3 ) =
= −(1 − p) log (1 − p) − p log p = h˜(p)
2 2
Obţinem
C = max(H(Y ) − H(Y |X)) = max H(Y ) − h̃(p).
pX pX
Cum
pY (y1 ) = pX (x1 )pY |X=x1 (y1 ) + pX (x2 )pY |X=x2 (y1 ) = pX (x1 )(1 − p)
pY (y2 ) = pX (x1 )pY |X=x1 (y2 ) + pX (x2 )pY |X=x2 (y2 ) = pX (x2 )(1 − p)
pY (y3 ) = pX (x1 )pY |X=x1 (y3 ) + pX (x2 )pY |X=x2 (y3 ) =
= pX (x1 )p + pX (x2 )p = p(pX (x1 ) + pX (x2 )) = p

5
deci
H(Y ) = −pX (x1 )(1−p) log2 (pX (x1 )(1−p))−pX (x2 )(1−p) log2 (pX (x2 )(1−p))−p log2 p =
= −pX (x1 )(1 − p) log2 pX (x1 ) − pX (x1 )(1 − p) log2 (1 − p)−
−pX (x2 )(1 − p) log2 pX (x2 ) − pX (x2 )(1 − p) log2 (1 − p) − p log2 p =
= (1 − p)(−pX (x1 ) log2 pX (x1 ) − pX (x2 ) log2 pX (x2 ))−
−pX (x1 )(1 − p) log2 (1 − p) − pX (x2 )(1 − p) log2 (1 − p) − p log2 p
Cum pX (x2 ) = 1 − pX (x1 ), avem:
H(Y ) = (1 − p)[−pX (x1 ) log2 pX (x1 ) − (1 − pX (x1 )) log2 (1 − pX (x1 ))]−
−pX (x1 )(1 − p) log2 (1 − p) − (1 − pX (x1 ))(1 − p) log2 (1 − p) − p log2 p =
= (1 − p)h̃(1 − pX (x1 )) + (1 − p) log2 (1 − p)(−pX (x1 ) − (1 − pX (x1 )) − p log2 p =
= (1 − p)h̃(1 − pX (x1 )) + h̃(p)
Am obţinut
max H(Y ) = max(1 − p)h̃(1 − pX (x1 )) + h̃(p)
pX pX
şi maximum este 1 şi se obţine pentru pX (x1 ) = 0.5, deci
max H(Y ) = max(1 − p)h̃(1 − pX (x1 )) − h̃(p) = 1 − p + h̃(p).
pX pX

Prin urmare, capacitatea canalului binar cu anulări este


C = max(H(Y ) − H(Y |X)) = max H(Y ) − h̃(p) = 1 − p + h̃(p) − h̃(p) = 1 − p.
pX pX

Exemplu 2.3 (Canal binar cu erori şi anulări). Notăm cu q probabilitatea de anu-
lare a fiecărui simbol. CBEA are matricea de tranziţie dată de
 
1−p−q p q
P (Y |X) = ,
p 1−p−q q
şi capacitatea este C = 1 − q − (1 − q) log2 (1 − q) + p log2 p + (1 − p − q) log2 (1 − p − q)
şi se obţine pentru pX (x1 ) = pX (x2 ) = 0.5.

Exemplu 2.4 (Canal binar general). CB are matricea de tranziţie dată de


 
p11 p12
P (Y |X) = ,
p21 p22
şi capacitatea este C = log2 (2Q1 + 2Q2 ) unde:
p22 p12 p21 p11
∆ = p11 p22 − p12 p21 , q11 = , q12 = − , q21 = − , q22 =
∆ ∆ ∆ ∆
H(Y |x1 ) = −p11 log2 p11 − p12 log2 p12 ,
H(Y |x2 ) = −p21 log2 p21 − p22 log2 p22
Q1 = −q11 H(Y |x1 ) − q12 H(Y |x2 ), Q2 = −q21 H(Y |x1 ) − q22 H(Y |x2 )
Probabilităţile simbolurilor de intrare
p(x1 ) = 2−C (q11 2Q1 + q12 2Q2 ), p(x2 ) = 2−C (q21 2Q1 + q22 2Q2 ).

6
Canalul are capacitate maximă dacă p11 = p22 = 1, deci p12 = p21 = 0.

2.1. Canal simetric la intrare. Considerăm un canal discret fără memorie (DMC)
cu alfabetele de intrare şi ieşire finite, adică |νX | = K < ∞ şi |νY | = J < ∞.
Definiţie 2.1.1. Un DMC se numeşte simetric la intrare dacă toate probabilităţile
condiţionate sunt la fel pentru toate simbolurile de ieşire, adică {pY |xi (y) : y ∈ νY }
sunt independente de xi
Cu alte cuvinte, ı̂n diagramă, probabilităţile ce pleacă din fiecare simbol de la
intrare sunt egale (până la o permutare). Elementele de pe fiecare linie din P (Y |X)
sunt aceleaşi, eventual permutate.
Exemplu 2.1.1. Exemple de DMC simetric la intrare (stânga) şi care nu este
simetric la intrare (dreapta).

7
Propoziţie 2.1.1. Pentru un DMC simetric la intrare H(Y |X) este independentă
de distribuţia pX şi H(Y |X) = H(Y |xi ), pentru orice xi ∈ νX .
Demonstraţie: Din definiţia canalului simetric la intrare avem că pentru orice xi ∈
n
P
νX : H(Y |xi ) = − pj log2 pj , unde pj (y) = pY |xi (y), 1 ≤ j ≤ n şi sunt indepen-
j=1
dente de xi . Atunci:
X X
H(Y |X) = pX (x)H(Y |x) = H(Y |x) pX (x) = H(Y |x).
x∈νx x


Teoremă 2.1.1. Un canal discret fără memorie simetric la intrare are capacitatea
C = max H(Y ) − H0 ,
pX

unde H0 = H(Y |xi ), pentru orice xi ∈ νX .


2.2. Canal simetric la ieşire. Considerăm un DMC cu proprietatea că ı̂n di-
agramă probabilităţile ce ajung la fiecare simbol de ieşire sunt egale (până la o
permutare).
Definiţie 2.2.1. Un DMC se numeşte simetric la ieşire dacă toate probabilităţile
condiţionate sunt la fel pentru toate simbolurile de intrare, adică {pY |xi (y) : x ∈ νX }
sunt independente de yi
Cu alte cuvinte, ı̂n diagramă, probabilităţile ce ajung la fiecare simbol de ieşire
sunt egale (până la o permutare). Elementele de pe fiecare coloană din P (Y |X) sunt
aceleaşi, eventual permutate. Mai mult, ı̂n acest caz,
X
pY |x (yi )
x
sunt independente de yi .
Exemplu 2.2.1. Exemple de DMC simetric la ieşire (stânga) şi care nu este simetric
la ieşire (dreapta).

8
Teoremă 2.2.1. Un canal discret fără memorie simetric la ieşire are proprietatea
că
max H(Y ) = log2 |νY |.
pX

2.3. Canal simetric.


Definiţie 2.3.1. Un DMC se numeşte simetric dacă este simetric la intrare şi si-
metric la ieşire.
Teoremă 2.3.1. Capacitatea unui canal DMC simetric este
C = log2 |νY | − H0 ,
unde H0 = H(Y |xi ), pentru orice simbol de intrare xi ∈ νX .
Exemplu 2.3.1. Exemplu de DMC simetric

Capacitatea canalului este


C = log2 3 − H0 ,
unde
H0 = H(Y |0) = −pY |0 (0) log2 pY |0 (0) − pY |0 (1) log2 pY |0 (1) − pY |0 (2) log2 pY |0 (2) =
= −(1 − p) log2 (1 − p) − p log2 p = h̃(p).
Obţinem deci
C = log2 3 − h̃(p).
Definiţie 2.2. Rata de transmitere (ı̂n baza b) a unui cod al unei surse discrete U
cu |νU | mesaje ce au cuvintele de cod de lungime n este definită prin
logb |νU |
Rb = .
n
Deci rata de transmitere a unui cod este raportul ı̂ntre numărul de simboluri ale
sursei ce urmează a fi codate simultan şi numărul de simboluri pe care codul le
alocă cuvântului de cod corespunzător.

9
Observaţie. Baza b se alege ca fiind aritatea codului. Mai mult, |νU | este numărul
tuturor cuvintelor de cod.
Exemplu 2.5. Considerăm că avem un canal cu perturbaţii şi vrem să folosim un
cod definit prin:
a 7→ aaa, b 7→ bbb, c 7→ ccc.
Indiferent de mesajul transmis, prin codare fiecare simbol al sursei este scris de trei
ori, deci mesajul va fi codat ı̂ntr-un mesaj de trei ori mai lung. Ne propunem să
calculăm rata de transmitere a codului prin canal. Avem D = 3 (aritatea codului),
toate cuvintele de cod au lungime fixată n = 3m, unde m este lungimea mesajului şi
numărul tuturor mesajelor de lungime m este |νU | = 3m . Atunci rata de transmitere
este:
log3 |νU | log3 3m m 1
R3 = = = =
n 3m 3m 3

3. Teorema de codare printr-un canal cu perturbaţii


Lema 3.1. Dacă un canal discret fără memorie şi fără reacţie de capacitate C este
folosit de n ori, atunci:
I(X1 , . . . , Xn |Y1 , . . . , Yn ) ≤ nC.
Demonstraţie: Din definiţia informaţiei mutuale avem:
I(X1 , . . . , Xn |Y1 , . . . , Yn ) = H(Y1 , . . . , Yn ) − H(Y1 , . . . , Yn |X1 , . . . , Xn )
Din Teorema 1.1 avem
n
X
H(Y1 , . . . , Yn |X1 , . . . , Xn ) = H(Yi |Xi ),
i=1
deci
n
X
I(X1 , . . . , Xn |Y1 , . . . , Yn ) = H(Y1 , . . . , Yn ) − H(Yi |Xi ).
i=1
Mai mult, ştim că (vezi curs 2)
H(Y1 , . . . , Yn ) = H(Y1 ) + H(Y2 |Y1 ) + H(Y3 |Y1 , Y2 ) + . . . + H(Yn |Y1 , . . . , Yn−1 )
şi
H(Yi |Y1 , . . . , Yi−1 ) ≤ H(Yi ).
Obţinem astfel
n
X n
X
H(Y1 , . . . , Yn ) = H(Y1 ) + H(Yi |Y1 , . . . , Yi−1 ) ≤ H(Yi ).
i=2 i=1
Atunci:
n
X n
X n
X
I(X1 , . . . , Xn |Y1 , . . . , Yn ) = H(Y1 , . . . , Yn )− H(Yi |Xi ) ≤ H(Yi )− H(Yi |Xi )
i=1 i=1 i=1

10
deci
n
X n
X n
X
I(X1 , . . . , Xn |Y1 , . . . , Yn ) ≤ (H(Yi ) − H(Yi |Xi )) = I(Xi |Yi ) ≤ C = nC.
i=1 i=1 i=1

Fie U o variabilă aleatoare şi considerăm Û o variabilă aleatoare ce estimează pe
U (ambele variabile aleatoare iau valori din aceeaşi mulţimea νU ). Atunci o eroare
apare când Û 6= U şi probabilitatea de apariţie a unei erori este
Pe = P (Û 6= U ).
Lema 3.2 (Lema lui Fano). Fie U şi Û două variabile aleatoare cu aceleaşi valori
dintr-un alfabet D−ar şi Pe = P (Û 6= U ). Atunci:
h̃(Pe ) + Pe log2 (D − 1) ≥ H(U |Û ),
unde h̃(Pe ) = −Pe log2 Pe − (1 − Pe ) log2 (1 − Pe ).
Demonstraţie: Definim variabila aleatoare Z prin

0; Û = U
Z=
1; Û 6= U
care indică diferenţa dintre U şi Û . Deci Z este variabilă aleatoare
 
0 1
Z:
1 − Pe P e
de entropie
H(Z) = −Pe log2 Pe − (1 − Pe ) log2 (1 − Pe ) = h̃(Pe ).
Atunci
H(U, Z|Û ) = H(U |Û ) + H(Z|Û , U ) = H(U |Û )
deoarece H(Z|Û , U ) = 0 pentru că Z este ı̂n mod unic determinat de U şi Û . Atunci:
H(U |Û ) = H(U, Z|Û ) = H(Z|Û ) + H(U |Û , Z).
Cum H(Z|Û ) ≤ H(Z), obţinem
H(U |Û ) = H(U, Z|Û ) = H(Z|Û ) + H(U |Û , Z) ≤ H(Z) + H(U |Û , Z).
Mai mult, H(U |Û , Z = 0) = 0 deoarece, ı̂n acest caz, U este unic determinat. În
plus, H(U |Û , Z = 1) ≤ log2 (D − 1), deoarece, pentru orice valoare u ∈ Û există,
când Z = 1, cel mult D − 1 valori cu probabilităţi nenule pentru U (sunt cel mult
D − 1 valori pentru U când Z = 1):
∀u ∈ νU : H(U |Û , Z = 1) ≤ log2 (D − 1).
Atunci, prin ı̂nlocuire ı̂n definiţia entropiei condiţionate, avem:
H(U |Û , Z) = pZ (0)H(U |Û , Z = 0)+pZ (1)H(U |Û , Z = 1) = pZ (1)H(U |Û , Z = 1) ≤
≤ pZ (1) log2 (D − 1) = Pe log2 (D − 1).

11
Prin urmare, am obţinut:
H(U |Û ) ≤ H(Z) + H(U |Û , Z) ≤ h̃(Pe ) + Pe log2 (D − 1),
ceea ce ı̂ncheie demonstraţia. 
Interpretare pentru lema lui Fano: Incertitudinea ı̂n determinarea lui U
când se cunoaşte Û , H(U |Û ), are două componente. Prima componentă este incer-
titudinea apariţiei unei erori, deci pentru a determina pe U se verifică dacă U = Û ,
situaţie ı̂n care sunt necesari h̃(Pe ) biţi (erorile apar cu probabilitatea Pe ). A doua
componentă a incertitudinii apare dacă U este diferit de Û , caz ı̂n care rămân doar
D − 1 posibilităţi pentru U . Dacă U 6= Û (se ı̂ntâmplă cu probabilitatea Pe ), atunci
sunt necesari ı̂ncă cel mult Pe log2 (D − 1) biţi. Egalitatea ı̂n lema lui Fano apare
când toate cele D − 1 valori false sunt echiprobabile.

Fie două procesoare legate ı̂n cascadă, ieşirea Z fiind legată de intrarea X prin
intermediul lui Y . Dacă X, Y, Z sunt variabile aleatoare care verifică condiţia:
p(Z|X, Y ) = p(Z|Y ),
atunci secvenţa X → Y → Z formează un lanţ Markov.
Observaţie. pZ|x,y (z) = pZ|y (z) pentru orice y cu pY (y) 6= 0 ı̂nseamnă că atunci când
y este dat, z nu mai este influenţat de x.

Lema 3.3 (Lema prelucrării datelor). Dacă X, Y, Z este un lanţ Markov, atunci:
I(X|Z) ≤ I(X|Y ), I(X|Z) ≤ I(Y |Z).
Demonstraţie: Cum X, Y, Z formează un lanţ Markov, avem că p(Z|X, Y ) = p(Z|Y ),
deci H(Z|X, Y ) = H(Z|Y ). Avem:
I(Y |Z) = H(Z) − H(Z|Y ) = H(Z) − H(Z|X, Y ) ≥ H(Z) − H(Z|X) = I(X|Z),
unde am folosit H(Z|X, Y ) ≤ H(Z|X) deoarece orice condiţionare suplimentară
micşorează incertitudinea.
Mai departe, demonstrăm că p(Z|X, Y ) = p(Z|Y ) implică p(X|Y, Z) = p(X|Y ),
adică
pX|y,z (x) = pX|y (z).
De fapt, demonstrăm că Z, Y, X este un lanţ Markov. Avem:
pX,Y,Z (x, y, z) pZ|x,y (z) · pX,Y (x, y)
pX|y,z (x) = = .
pY,Z (y, z) pY,Z (y, z)

12
Cum pZ|x,y (z) = pZ|y (z) pentru orice y cu pY (y) 6= 0, obţinem:
pZ|y (z) · pX,Y (x, y) pY,Z (y, z) pX,Y (x, y) pX,Y (x, y)
pX|y,z (x) = = · = = pX|y (x).
pY,Z (y, z) pY (y) pY,Z (y, z) pY (y)
Analog, din p(X|Z, Y ) = p(X|Y ) avem H(X|Z, Y ) = H(X|Y ). Atunci
I(X|Y ) = H(X) − H(X|Y ) = H(X) − H(X|Z, Y ) ≥ H(X) − H(X|Z) = I(X|Z).

Observaţie. Prin prelucrarea datelor nu se poate obţine mai multă informaţie su-
plimentară. Procesoarele doar pierd informaţia, informaţia transmisă de la intrarea
primului procesor până la ieşirea celui de-al doilea procesor fiind mai mică decât
informaţia transmisă prin fiecare procesor ı̂n parte. Dacă se consideră un lanţ for-
mat din codor, canal şi decodor, obţinem că atât codorul cât şi decodorul nu conduc
la nici un câştig de informaţie, ele fiind necesare doar pentru a transmite informaţia
prin canal.
Considerăm un canal discret fără memorie şi fără reacţie şi presupunem că informaţia
ce urmează a fi transmisă este dată de o sursă binară simetrică (BSS), adică de o
sursă binară, fără memorie, cu p(0) = p(1) = 0.5. Ne propunem să demonstrăm că
este imposibil să transmitem corect informaţia cu o rată de transmitere mai mare
decât capacitatea canalului.
Teoremă 3.4 (Reciproca teoremei de codare pe un canal cu perturbaţii). Dacă se
foloseşte o sursă binară simetrică (BSS) la o rată R pe un DMC fără reacţie de
capacitate C şi dacă R > C, atunci Pb , probabilitatea de eroare per bit la recepţia
mesajului, verifică inegalitatea
 
−1 C
Pb ≥ h̃ 1− ,
R
unde h̃−1 (x) = min{p : −p log2 p − (1 − p) log2 (1 − p) = x}.
Demonstraţie: Probabilitatea de eroare per bit la recepţionare este
m
1 X
Pb = P (Ûi 6= Ui ),
m i=1
unde m este lungimea mesajului de la intrare.
Aplicăm lema lui Fano pentru cazul binar (D = 2) şi obţinem:
h̃(P (Ûi 6= Ui )) ≥ H(Ui |Ûi ),
de unde obţinem
m
X m
X
h̃(P (Ûi 6= Ui )) ≥ H(Ui |Ûi ).
i=1 i=1
Remarcăm faptul că:
Xm m
X
H(U1 , . . . , Um |Û1 , . . . , Ûm ) = H(U1 |Û1 )+ H(Ui |Û1 , . . . , Ûm , U1 , . . . , Ui−1 ) ≤ H(Ui |Ûi ),
i=2 i=1

13
deoarece condiţionările suplimentare micşorează incertitudinea.
Mai mult, ştim că funcţia h̃(x) este concavă (pentru 0 ≤ x ≤ 1), deci:
m m
!
1 X 1 X
h̃(P (Ûi 6= Ui )) ≤ h̃ P (Ûi 6= Ui ) = h̃(Pb ).
m i=1 m i=1
Până acum am obţinut:
m m
1 X 1 X 1
h̃(Pb ) ≥ h̃(P (Ûi 6= Ui )) ≥ H(Ui |Ûi ) ≥ H(U1 , . . . , Um |Û1 , . . . , Ûm ),
m i=1 m i=1 m
deci
1
h̃(Pb ) ≥ H(U1 , . . . , Um |Û1 , . . . , Ûm ).
m
Dar
H(U1 , . . . , Um |Û1 , . . . , Ûm ) = H(U1 , . . . , Um ) − I(U1 , . . . , Um |Û1 , . . . , Ûm ).
Am presupus că sursa este binară şi simetrică (BSC), deci H(U1 , . . . , Um ) = log2 2m =
m, deci
H(U1 , . . . , Um |Û1 , . . . , Ûm ) = m − I(U1 , . . . , Um |Û1 , . . . , Ûm ).
Pentru I(U1 , . . . , Um |Û1 , . . . , Ûm ) aplicăm lema lui Fano astfel: procesorul 1 este
codarea şi procesorul 2 este canalul. Dacă notăm cu zi codul pentru Ui , avem:
I(U1 , . . . , Um |Û1 , . . . , Ûm ) ≤ I(z1 , . . . , zn |Û1 , . . . , Ûm ).

Aplicăm din nou lema lui Fano astfel: procesorul 1 este canalul şi procesorul 2 este
decodorul.
I(z1 , . . . , zn |Û1 , . . . , Ûm ) ≤ I(z1 , . . . , zn |ẑ1 , . . . , ẑn ).
Obţinem
I(U1 , . . . , Um |Û1 , . . . , Ûm ) ≤ I(z1 , . . . , zn |ẑ1 , . . . , ẑn ).
În plus, avem
I(U1 , . . . , Um |Û1 , . . . , Ûm ) ≤ nC.
Rezultă că
H(U1 , . . . , Um |Û1 , . . . , Ûm ) = m − I(U1 , . . . , Um |Û1 , . . . , Ûm ) ≥ m − nC
şi cum
1
h̃(Pb ) ≥ H(U1 , . . . , Um |Û1 , . . . , Ûm ),
m

14
obţinem
1 n
h̃(Pb ) ≥ (m − nC) = 1 − C.
m m
Din definiţia ratei de transmitere a codului R = m
n
, găsim că
C
h̃(Pb ) ≥ 1 − .
R

Teoremă 3.5 (Teorema de codare pe un canal cu perturbaţii). Fie un DMC fără
reacţie de capacitate C şi un mesaj ce se transmite la o rată R. Atunci pentru R < C
şi pentru orice ε > 0 există un cod (corector de erori) de rată R şi cu probabilitatea
de eroare per bit la ieşire Pb < ε.
Prin urmare, alegând o metodă adecvată de a coda informaţia printr-un canal, se
poate ajunge la probabilitate de eroare cât mai mică posibil.

15
CODURI CORECTOARE DE ERORI
CURS 6

1. Distanţa Hamming
Teorema de codare pe canale cu zgomot determină limite teoretice pentru a coda
un mesaj ce urmează a a fi transmis printr-un canal cu zgomot. Totuşi, această
teoremă nu furnizează indicaţii asupra modului ı̂n care, ı̂n practică, pot fi construitte
coduri corectoare de erori eficiente.
Când un cuvânt de cod zi este transmis printr-un canal cu zgomot şi se primeşte
ẑ, eroarea apărută este caracterizată de e = ẑ − zi , prin urmare este important să
definim o astfel de diferenţă.
Fie D un număr prim, n ∈ N∗ , şi considerăm
ZnD = {x = (x1 , . . . , xn ) : xi ∈ ZD , 1 ≤ i ≤ n}
şi pentru orice x = (x1 , . . . , xn ), y = (y1 , . . . , yn ) ∈ ZnD avem:
x + y = (x1 + y1 , . . . , xn + yn ).
De remarcat faptul că pentru orice x ∈ ZnD avem D · x = x + . . . + x = 0, unde
0 = (0, . . . , 0) ∈ ZnD .
Observaţie. Pentru simplitate, notăm x = (x1 . . . , xn ) cu x = x1 x2 . . . xn .
Definiţie 1.1. Un cod bloc D−ar de lungime n este o submulţime nevidă a spaţiului
vectorial ZnD .
Exemplu 1.1. Un cod bloc binar de lungime 4 este C = {1101, 0001, 1010}. În
schimb, C = {111, 0} nu este cod bloc deoarece cele două cuvinte de cod au lungimi
diferite.
Definiţie 1.2. Fie w = a1 a2 · · · an un cuvânt de lungime n. Se numeşte ponderea
lui w şi se notează cu wt(w) numărul de elemente nenule ai :
wt(w) = |{i : ai 6= 0}|,
Exemplu 1.2. Avem wt(w) = 1221002 = 5 şi wt(11101101) = 6.
Observaţie. În cazul ı̂n care w = a1 a2 · · · an este un cuvânt binar de lungime n,
atunci wt(w) este numărul de elemente ai ce au valoarea 1, deci
Xn
wt(w) = ai .
i=1

Propoziţie 1.1. Pentru orice cuvinte w = a1 · · · an , v = b1 · · · bn avem:


• wt(w) ≥ 0
• wt(w) = 0 dacă şi numai dacă w = 0;

1
• wt(−w) = wt(w), unde −w este cuvântul ı̂n care fiecare simbol este opusul
simbolului corespunzător din w ;
• wt(v + w) ≤ wt(v) + wt(w).
Exemplu 1.3. Considerăm cuvintele binare v = 011011 şi w = 111001. Avem:
wt(v) = 4, wt(w) = 4. Obţinem
v + w = 011011 + 111001 = 100010
şi wt(v + w) = wt(100010) = 2 < wt(v) + wt(w).
Considerăm cuvintele ternare v = 01221021 şi w = 21002010. Avem: wt(v) = 6,
wt(w) = 4. Obţinem
v + w = 01221021 + 21002010 = 22220001
şi wt(v + w) = wt(22220001) = 5 < wt(v) + wt(w) = 10.
Dacă v = 01221021 este cuvânt ternar, atunci −v = 02112012 şi wt(v) = 6 =
wt(−v).
Observaţie. Proprietatea wt(−w) = wt(w) este trivială pentru cazul binar, deoarece
−w = w.
Demonstraţie: Demonstrăm ultima afirmaţie pentru cazul binar: notăm cu x =
v + w, x = x1 · · · xn , unde xi = ai + bi , pentru orice 1 ≤ i ≤ n. Remarcăm faptul
că xi = 1 dacă ai = 1 sau bi = 1, dar nu simultan. Deci:
{i : xi = 1} ⊂ {i : ai = 1} ∪ {i : bi = 1}
şi cum |A ∪ B| ≤ |A| + |B|, obţinem că wt(v + w) = wt(x) ≤ wt(v) + wt(w). 
Definiţie 1.3. Fie zi , zj două cuvinte de cod de lungime n. Se numeşte distanţa
dintre cuvinte şi se notează cu d(v, w) numărul natural:
d(v, w) = wt(v − w).
Distanţa dintre v şi w reprezintă numărul de poziţii ı̂n care cele două cuvinte diferă
şi se mai numeşte distanţă Hamming.
Exemplu 1.4. Considerăm cuvintele binare v = 011011 şi w = 110001. Avem:
wt(v) = 4, w = 3.
Distanţa dintre cuvintele v şi w este:
d(v, w) = wt(v − w) = wt(101010) = 3.
Cele două cuvinte diferă pe poziţiile 1, 3, 5.
Considerăm cuvintele 4−are v = 0123 şi w = 2103. Avem: wt(v) = 3, wt(w) = 3.
Distanţa dintre cuvintele v şi w este:
d(v, w) = wt(v − w) = wt(0123 − 2103) = wt(2020) = 2.
Cele două cuvinte diferă pe poziţiile 1, 3.
Propoziţie 1.2. Distanţa Hamming este o distanţă pe ZnD × ZnD , adică verifică
relaţiile:
• d(v, w) ≥ 0 şi d(v, w) = 0 dacă şi numai dacă v = w;

2
• d(v, w) = d(w, v);
• d(v, w) ≤ d(v, u) + d(u, w), pentru orice v, u, w cuvinte.
Am văzut că eroarea care apare când se transmite zi şi se primeşte ẑ este carac-
terizată de e = ẑ − zi . Prin urmare, numărul erorilor care apar reprezintă wt(ẑ − zi ),
adică distanţa Hamming dintre ẑ şi zi , d(ẑ, zi ).
Definiţie 1.4 (decodare prin minimum distanţei). Fie C un cod. Dacă ẑ este
cuvântul primit, atunci a corecta (sau a decoda) cuvântul prin minimum distanţei
ı̂nseamnă a selecta cuvântul de cod z ∈ C astfel ı̂ncât:
d(z, ẑ) = min{d(z, ẑ) : z ∈ C}.
Prin urmare, decodorul D este definit de
D(ẑ) = Argminz∈C d(z, ẑ) = {z ∈ C : d(z 0 , ẑ) ≥ d(z, ẑ), ∀z 0 ∈ C}.
Deci decodăm ẑ prin cuvântul de cod aflat la distanţa Hamming cea mai mică
faţă de ẑ.
Exemplu 1.5. Considerăm codul bloc binar C = {111, 000} şi vrem să decodăm
ẑ = 010 prin minimum distanţei. Avem d(111, ẑ) = 2, d(000, ẑ) = 1, deci D(ẑ) =
000.
Observaţie. O altă metodă de a decoda este ”Maximum Likelihood Decoding” (MLD).
Dacă se primeşte ẑ, atunci un observator ideal va alege să decodeze ẑ prin cuvântul
de cod z cu proprietatea că P (X = z|Y = ẑ) este cea mai mare, deci D(ẑ) =
Argmaxz∈C P (X = z|Y = ẑ). Numim această metodă de decodare ”Maximum Like-
lihood Decoding” (MLD). Cum, ı̂n practică, P (X = zi ) nu sunt cunoscute, dacă
presupunem că toate cuvintele de cod sunt echiprobabile, avem:

P (Y = ẑ|X = z) · P (X = z)
Argmaxz∈C P (X = z|Y = ẑ) = Argmaxz∈C =
P (Y = ẑ)
= Argmaxz∈C P (Y = ẑ|X = z) · P (X = z) = Argmaxz∈C P (Y = ẑ|X = z).
Am folosit faptul că ẑ a fost recepţionat, deci P (Y = ẑ) = 1 şi, la ultima egalitate,
faptul că toate cuvintele de cod sunt echiprobabile.
Am obţinut
Argmaxz∈C P (X = z|Y = ẑ) = Argmaxz∈C P (Y = ẑ|X = z),
deci decodorul va decoda pe ẑ prin cel mai probabil cuvânt de cod, adică prin
cuvântul de cod z cu proprietatea că P (Y = ẑ|X = z) este cea mai mare.
Observaţie. Dacă considerăm un canal binar simetric CBS ı̂n care cele două sim-
boluri au aceeaşi probabilitate de eroare p, atunci
P (X = z|Y = ẑ) = pd(z,ẑ) (1 − p)n−d(z,ẑ)
deoarece sunt exact d(z, ẑ) simboluri care au fost transmise greşit şi exact n − d(z, ẑ)
simboluri transmise corect.
Cuvântul de cod z cu proprietatea că P (Y = ẑ|X = z) este cea mai mare este cel
pentru care d(z, ẑ) este cea mai mică. Prin urmare, pentru un CBS avem:

3
D(ẑ) = Argminz∈C d(z, ẑ) = Argmaxz∈C P (Y = ẑ|X = z),
deci metoda de decodare prin minimum distanţei coincide cu MLD.
2. Detectarea şi corectarea erorilor
Dat un cod bloc de lungime n, ne punem problema să decidem a priori câte
erori poate corecta codul, respectiv câte erori poate detecta. Pentru codurile bloc
răspunsurile sunt date ı̂n termeni de distanţa unui cod.
Definiţie 2.1. Se numeşte distanţă Hamming a codului C = {z1 , . . . , zM } ⊆ ZnD cea
mai mică distanţă Hamming dintre elementele codului:
dmin C = min d(zi , zj ).
i6=j

Exemplu 2.1. Distanţa codului C = {00000, 00111, 11100, 11011} este dmin C = 3
deoarece
d(00000, 00111) = 3, d(00000, 11100) = 3, d(00000, 11011) = 4,
d(00111, 11100) = 4, d(00111, 11011) = 3, d(11100, 11011) = 3.
Observaţie. Dacă se transmite un cuvânt z şi se recepţionează ẑ, atunci considerăm
ẑ = z + e, unde e = ẑ − z este eroarea de transmitere. Codul C este cod corector de t
erori dacă pentru orice cuvânt de cod z şi orice cuvânt e cu wt(e) ≤ t, atunci z este
singurul cuvânt de cod aflat la distanţă minimă de z + e. Deci dacă z este un cuvânt
de cod şi ẑ se obţine din z schimbând cel mult t intrări, atunci, prin decodarea prin
minimum distanţei, ẑ se va decoda prin z, deci D(ẑ) = z.
Teoremă 2.1 (Capacitatea de corectare şi detectare a erorilor). Fie C un cod bloc de
lungime n. Pentru orice numere ı̂ntregi t, s astfel ı̂ncât 0 ≤ t ≤ n şi 0 ≤ s ≤ n − t,
codul, folosind distanţa minimă, poate corecta toate tipurile de cel mult t erori şi
poate detecta toate tipurile de t+1, . . . , t+s erori dacă şi numai dacă dmin C > 2t+s.
Deci
C corectează t erori şi detectează t + s erori ⇔ dmin C > 2t + s.
Demonstraţie: Demonstrăm că C nu poate corecta toate tipurile de cel mult t erori
sau nu poate detecta toate tipurile de t + 1, . . . , t + s erori dacă şi numai dacă
dmin C ≤ 2t + s.
Dacă C nu poate corecta toate tipurile de cel mult t erori, atunci există un cuvânt
de cod zi şi o eroare e cu wt(e) ≤ t astfel ı̂ncât D(zi + e) 6= zi . Notăm cu zj cuvântul
de cod astfel ı̂ncât D(zi + e) = zj . Avem:
d(zi , zj ) ≤ d(zi , zi + e) + d(zi + e, zj ),
din inegalitatea triunghiului. Avem d(zi , zi + e) = wt((zi + e) − zi ) = wt(e) ≤ t.
În plus, pentru că decodorul foloseşte decodarea prin minimum distanţei, avem
d(zi + e, zj ) ≤ d(zi + e, zi ), deci d(zi + e, zj ) ≤ d(zi + e, zi ) = wt(e) ≤ t. Obţinem
deci:
d(zi , zj ) ≤ d(zi , zi + e) + d(zi + e, zj ) ≤ t + t ≤ 2t + s.

4
Rezultă că
dmin C ≤ d(zi , zj ) ≤ 2t + s.
Dacă C poate corecta cel mult t erori dar nu poate detecta t + 1, . . . , t + s erori,
atunci există un cuvânt de cod zi şi o eroare e cu t + 1 ≤ wt(e) ≤ t + s care nu este
detectată şi este decodată prin cuvântul de cod zj , adică D(zi +e) = zj . Considerăm
eroarea e0 = zj − (zi + e) şi avem D(zj + e0 ) = zj (adică e0 este o eroare corectată
când se aplică lui zj .) Cum
wt(e0 ) = d(zj + e0 , zj ) = d(zi + e, zj ) ≤ d(zi + e, zi ) = wt(e)
inegalitatea pentru că folosim decodarea prin minimum distanţei, avem
wt(e0 ) ≤ t + s şi D(zj + e0 ) = zj .
Atunci wt(e0 ) ≤ t, deci
d(zi , zj ) ≤ d(zi , zi + e) + d(zi + e, zj ) ≤ (t + s) + t = 2t + s,
deci dmin C ≤ 2t + s.
Prin urmare, dacă C nu poate corecta cel mult t erori şi nu poate detecta toate
cele t + 1, . . . , t + s erori, atunci am demonstrat că dmin C ≤ 2t + s.
Invers, presupunem că dmin C ≤ 2t + s. Atunci există două cuvinte de cod diferite
zi , zj astfel ı̂ncât d(zi , zj ) ≤ 2t + s, deci wt(zi − zj ) ≤ 2t + s.
Dar orice vector z cu wt(z) ≤ 2t + s poate fi fi scris ca suma dintre vectorii e şi
f astfel ı̂ncât wt(e) ≤ t şi wt(f ) ≤ t + s astfel: trecem primele t componente nenule
din z ı̂n e (sau toate cele t componente dacă wt(z) < t) şi restul componentelor,
completând cu zerouri, ı̂n f . De exemplu, dacă z = 01111011 şi considerăm t = 2 şi
s = 2, atunci e = 01100000 şi f = 00011011. Prin urmare, există erorile e şi e0 = −f
astfel ı̂ncât wt(e) ≤ t, wt(e0 ) ≤ t + s şi zi − zj = e − e0 , adică zi + e0 = zj + e. Acest
lucru ı̂nseamnă că două cuvinte de cod diferite şi două erori diferite vor fi decodate
la fel, deoarece zi + e0 = zj + e implică D(zi + e0 ) = D(zj + e). Prin urmare, fie
zi + e0 nu este corectat (D(zi + e0 ) 6= zi ), fie zj + e nu este detectat (D(zj + e) = zi ).
Obţinem deci că nu toate tipurile de cel puţin t erori pot fi corectate sau nu toate
tipurile de t + 1, . . . , t + s erori pot fi detectate. 
Teoremă 2.2 (Capacitatea de detectare a erorilor). Un cod bloc C, cu decodarea
prin minimum distanţei, poate detecta cel mult dmin C − 1 erori.
Demonstraţie: Se alege t = 0 şi s = dmin C − 1 ı̂n Teorema [Capacitatea de corectare
şi detectare a erorilor]. 
Teoremă 2.3 (Capacitatea de corectare a erorilor). Un cod bloc C, cu decodarea
prin minimum distanţei, poate corecta cel mult dmin2C−1 erori, dar nu poate corecta
dmin C−1
2
+ 1 erori.
Demonstraţie: Se alege t = dmin2C−1 şi s = 0 ı̂n Teorema [Capacitatea de corectare
şi detectare a erorilor]. Nu se poate alege o valoare t mai mare deoarece dmin C ≤
dmin C−1

2· 1+ 2
. 
Exemplu 2.2. Un cod bloc de distanţă minimă 8 poate:

5
• corecta cel mult o eroare şi poate detecta ı̂ntre 2 şi 6 erori (t = 1, s = 5);
• corecta cel mult 2 erori şi poate detecta ı̂ntre 3 şi 5 erori (t = 2, s = 3);
• corecta cel mult 3 erori şi poate detecta 4 erori (t = 3, s = 1);
• detecta cel mult 7 erori (t = 0, s = 7);
Un cod bloc de distanţă minimă 9 poate:
• corecta cel mult o eroare şi poate detecta ı̂ntre 2 şi 7 erori (t = 1, s = 6);
• corecta cel mult 2 erori şi poate detecta ı̂ntre 3 şi 6 erori (t = 2, s = 4);
• corecta cel mult 3 erori şi poate detecta 4 şi 5 erori (t = 3, s = 2);
• corecta cel mult 4 erori (t = 4, s = 0);
• detecta cel mult 8 erori (t = 0, s = 8);

3. Coduri liniare
Definiţie 3.1. Un (n, m)−cod liniar D−ar de lungime n este orice subspaţiu vecto-
rial C de dimensiune m al spaţiului vectorial ZnD peste ZD , 1 ≤ m ≤ n. Elementele
acestei submulţimi se numesc cuvinte de cod.
Exemplu 3.1. • Mulţimea C = {000, 010, 100, 110} este un (3, 2) cod liniar bi-
nar (subspaţiu vectorial de dimensiune m = 2, şi lungimea cuvintelor de cod
este n = 3), iar mulţimea C = {0000, 1000, 1100, 0100, 1101, 0001, 0101, 1001}
este un (4, 3) cod liniar binar (subspaţiu vectorial de dimensiune m = 3, şi
lungimea cuvintelor de cod este n = 4).
• Mulţimea C = {010, 100, 110} nu este cod liniar deoarece nu conţine cuvan̂tul
de cod 000 (orice subspaţiu vectorial conţine vectorul nul).
• Mulţimea C = {00, 01, 10} nu este cod liniar deoarece 01 + 10 = 11 şi 11 nu
este cuvânt de cod.
Propoziţie 3.1. Orice cod liniar conţine cuvântul de cod nul 0.
Propoziţie 3.2. Un (n, m) cod liniar D−ar conţine Dm cuvinte de cod diferite.
Demonstraţie: Un (n, m) cod liniar D−ar este un subspaţiu vectorial de dimensiune
m al lui ZnD , deci conţine o bază cu m vectori din ZnD . Prin urmare, orice cuvânt
de cod este o combinaţie liniară de cei m vectori cu coeficienţi din ZD . Cum sunt
exact Dm combinaţii, obţinem că sunt exact Dm cuvinte de cod distincte. 
m
Propoziţie 3.3. Rata de transmitere a unui (n, m) cod liniar D−ar este R = n
.
Demonstraţie: Rata de transmitere a unui cod D−ar al unei surse cu M mesaje
diferite având cuvintele de cod de lungime n este R = logDn M . Cum avem Dm
cuvinte de cod, ı̂nseamnă că putem coda M = Dm mesaje diferite, deci
logD M logD Dm m
R= = = .
n n n


6
Propoziţie 3.4. Pentru orice cod liniar C avem:
dmin C = wtmin C,
unde wtmin C este ponderea minimă a codului, adică
wtmin C = min{wt(z) : z ∈ C, z 6= 0}.
Demonstraţie: Fie codul liniar C şi, prin definiţie, dmin C = min d(zi , zj ). Atunci
i6=j

dmin C = min d(zi , zj ) = min wt(zi − zj ).


i6=j i6=j

Dar codul este liniar, deci pentru cuvintele de cod zi şi zj avem şi zi − zj cuvânt de
cod (mai mult, dacă i = j, atunci zi − zj = 0). Prin urmare:
dmin C = min wt(zi − zj ) ≥ wtmin C = min wt(z).
i6=j

Invers, pentru orice cuvânt de cod zi , avem d(zi , 0) = wt(zi ). Cum 0 ∈ C, pentru
orice cod liniar, obţinem:
dmin C = min d(zi , zj ) ≤ min d(zi , 0) = min wt(zi ) = wtmin C.
i6=j i i


Exemplu 3.2. Codul liniar C = {0000, 1000, 1100, 0100, 1101, 0001, 0101, 1001} are
wtmin C = 1, deci dmin C = 1 (poate corecta dmin2C−1 = 0 erori). Avem: wt(0000) = 0,
wt(1000) = 1, wt(1100) = 2, wt(0100) = 1, wt(1101) = 3, wt(0001) = 1, wt(0101) =
2, wt(1001) = 2.
Fie x1 , . . . , xn ∈ ZD simbolurile care apar ı̂n scrierea unui cuvânt cod.
Definiţie 3.2. Se consideră sistemul de ecuaţii liniare cu coeficienţi ı̂n ZD :

 a11 x1 + a12 x2 + . . . + a1n xn = 0
 a21 x1 + a22 x2 + . . . + a2n xn = 0

..


 .
am1 x1 + am2 x2 + . . . + amn xn = 0
Mulţimea soluţiilor sistemului se numeşte cod grup.
Matricea A = (aij ) ∈ Mm,n (ZD ) se numeşte matrice de control. Presupunem că
rang(A) = t şi că j1 , . . . , jt sunt coloanele liniar independente. Atunci cele m =
n − t simboluri xi , i ∈ [n] \ {j1 , . . . , jt } sunt simboluri informaţionale. Simbolurile
xj1 , . . . , xjt se numesc simboluri de control. Un cod grup trebuie să conţină Dm
cuvinte de cod m = n − rang A. Fiecare cuvânt se obţine dând valori celor m
simboluri informaţionale.
Exemplu 3.3. Se consideră sistemul de ecuaţii liniare ı̂n Z2 :

 x1 + x4 + x5 = 0
x2 + x3 + x4 + x6 = 0
x + x + x + x = 0
1 3 4 6

7
Atunci matricea de control:
   
1 0 0 1 1 0 1 0 0 1 1 0
A = 0 1 1 1 0 1 ∼  0 1 1 1 0 1
1 0 1 1 0 1 0 0 1 0 1 1
are rangul t = rang(A) = 3, simbolurile de control sunt x1 , x2 , x3 , iar cele informaţionale
fiind cele m = n − t = 6 − 3 = 3 simboluri rămase (x4 , x5 , x6 ).
Rezolvăm sistemul: 
 x1 = x4 + x5
x2 + x3 = x4 + x6
 x =x +x
3 5 6
deci soluţia generală este:
x1 x4 + x5 1 1 0
         
 x2   x4 + x5  1 1 1
 x3   x5 + x6  0 0 1
         
 =  = x4   + x5   + x6  
 x4   x4  1 0 0
x   x  0 1 0
5 5
x6 x6 0 0 1
Cuvintele codului sunt toate soluţiile acestui sistem (23 = 8 cuvinte distincte),
deci:
w1 000000
w2 001001
w3 111010
w4 110011
w5 110100
w6 101101
w7 001110
w8 000111

8
TEORIA INFORMAŢIEI ŞI CODURI

CURS 7

Coduri liniare

1. Codarea folosind coduri liniare


Definiţie 1.1. Un (n, m)−cod liniar D−ar este un subspaţiu vectorial de dimensi-
une m al lui ZnD
Propoziţie 1.1. Fie C un (n, m)−cod liniar D−ar. Atunci:
• C conţine cuvântul nul 0;
• C conţine Dm cuvinte de cod distincte;
• dmin (C) = wtmin (C), unde dmin (C) = min d(zi , zj ) este distanţa Hamming a
i6=j
codului, iar wtmin (C) = min wt(z).
z∈C,z6=0

Observaţie. Fie C un (n, m)−cod liniar D−ar. Fie z1 , . . . , zm o bază pentru acest
subspaţiu, zi ∈ ZnD , 1 ≤ i ≤ m. Orice cuvânt de cod z ∈ C se scrie unic sub forma
m
ui zi , ui ∈ ZD . Deci u = (u1 , . . . , um ) ∈ Zm
P
z= D determină ı̂n mod unic cuvântul
i=1
de cod z.
Definiţie 1.2. O matrice G ∈ Mm,n (ZD ),
z1
 
 z2 
G=
 ... 

zm
se numeşte matrice generatoare a unui (n, m)−cod liniar C dacă şi numai dacă
{z1 . . . , zm } este o bază pentru C.
Mesajul u ∈ Zm D este codat prin z = u · G, deci cuvintele codului C sunt date de
C = {z = u · G|u ∈ Zm D}

Exemplu 1.1. Se consideră matricea


 
1 0 0 1 1
G= ∈ M2,5 (Z2 )
0 1 1 0 1

1
Aceasta este matricea generatoare a (5, 2)−codului liniar binar ı̂n care cuvintele
de cod sunt obţinute astfel: ı̂nmulţim fiecare succesiune de simboluri u ∈ Z22 cu
matricea generatoare:
 
1 0 0 1 1
(u1 u2 ) · = (u1 u2 u2 u1 u1 + u2 ),
0 1 1 0 1
deci cuvintele de cod sunt
C = {00000, 01101, 10011, 11110}.
Funcţia de codificare este:
u1 u2 zi
0 0 00000
0 1 01101
1 0 10011
1 1 11110
Se observă că 10011 şi 01101 sunt liniar independenţi, deci formează o bază pentru
subspaţiul C (rangul matricei G este 2)
Observaţie. Deoarece baza unui subspaţiu nu este unică, matricea generatoare nu
este unică. Cuvintele de cod sunt unice, dar se modifică funcţia de codificare.
Exemplu 1.2. Matricea
 
1 1 1 1 0
G= ∈ M2,5 (Z2 )
1 0 0 1 1

este matricea generatoare a codului C = {00000, 01101, 10011, 11110}. În acest caz:
 
1 1 1 1 0
(u1 u2 ) · = (u1 + u2 u1 u2 u1 + u2 u2 ).
1 0 0 1 1
Funcţia de codificare este:
00 00000
01 01101
10 11110
11 10011
Exemplu 1.3. Fie (4, 2)−codul liniar binar C = {0000, 1101, 0110, 1011}. O bază
pentru subspaţiul C este formată din 1101, 0110 (se observă relaţia de dependenţă
1011 = 1101 + 0110). O matricea generatoare a codului este
 
1 1 0 1
G= ∈ M2,4 (Z2 ).
0 1 1 0

În acest caz:  


1 1 0 1
(u1 u2 ) · = (u1 u1 + u2 u2 u1 ).
0 1 1 0

2
Funcţia de codificare este:
00 0000
10 1101
01 0110
11 1011
Definiţie 1.3. O matrice generatoare G ∈ Mm,n (ZD ) a unui (n, m)−cod liniar
D−ar este sub formă sistematică dacă
1 0 ... 0 p1,1 . . . p1,n−m
 
0 1 . . . 0 p2,1 . . . p2,n−m 
G = [Im P ] = 
 ... ... . . .
.. .. ..  ,
. . ... . 
0 0 . . . 1 pm,1 . . . pm,n−m
unde P = (pi,j ) ∈ Mm,n−m (ZD ). Matricea P se numeşte matrice de paritate (sau
de control a parităţii)-parity(-check) matrix.
Observaţie. Matricea generatoare sistematică a unui cod liniar este unică.
Definiţie 1.4. Un cod liniar a cărui matrice generatoare este sub formă sistematică
se numeşte cod liniar sistematic.
Exemplu 1.4. Fie matricea generatoare
 
1 1 0 0 1 0 0
0 1 0 1 0 0 1
G= 1 0 1

1 0 0 0
1 0 1 0 1 1 1
a unui (7, 4)−cod liniar binar. Prin transformări elementare avem:
     
1 1 0 0 1 0 0 1 1 0 0 1 0 0 1 0 0 1 1 0 1
0 1 0 1 0 0 1 0 1 0 1 0 0 1 0 1 0 1 0 0 1
1 0 1 1 0 0 0 ∼ 0 1 1 1 1 0 0 ∼ 0 0 1
G=     ∼
0 1 0 1
1 0 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 1 0 1 0
   
1 0 0 1 1 0 1 1 0 0 0 0 1 0
0 1 0 1 0 0 1 0 1 0 0 1 1 0
∼0 0 1 0 1 0 1 ∼ 0 0 1 0 1 0 1 = [I4
   P ],
0 0 0 1 1 1 1 0 0 0 1 1 1 1
unde  
0 1 0
1 1 0
P =
1

0 1
1 1 1
Observaţie. Dacă o matrice generatoare este sub formă sistematică, atunci primele
m simboluri din cele n ale unui cuvânt de cod sunt simbolurile mesajului codat:
0
z = u1 . . . um zm+1 · · · zn0 .

3
Prin urmare, codul sistematic trimite ı̂ntâi mesajul necodat (simbolurile de informaţie)
şi mai apoi cele n − m simboluri codate (simboluri de control) folosite pentru a de-
tecta/corecta erori.
Exemplu 1.5. Fie matricea generatoare sub formă sistematică
 
1 0 0 0 0 1 0
0 1 0 0 1 1 0
G= 0 0 1 0

1 0 1
0 0 0 1 1 1 1
a unui (7, 4)−cod liniar. Cuvintele codului sunt date de z = u · G, u ∈ Z42 , deci
 
1 0 0 0 0 1 0
0 1 0 0 1 1 0
z = (u1 u2 u3 u4 )·
0 0
 = (u1 u2 u3 u4 u2 +u3 +u4 u1 +u2 +u3 u3 +u4 )
1 0 1 0 1
0 0 0 1 1 1 1
De exemplu, 1011 este codat prin z = 1011000.
Exemplu 1.6 (Bit de paritate). Pentru mesajele binare bit-ul de paritate core-
spunde parităţii unui mesaj, adică sumei binare a simbolurilor. De exemplu, bit-ul
de paritate pentru mesajul 11100101 este 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 = 1. A
coda mesajul u = (u1 . . . um ) folosind bit-ul de paritate ı̂nsemnă a asocia mesajului
cuvântul de cod z = (u1 , . . . , um , u1 + . . . + um ). Prin urmare, se foloseşte o matrice
generatoare de forma G = [Im 1m,1 ], adică matricea sistematică
1 0 ... 0 1
 
0 1 . . . 0 1 
G=  ... ... ... ... 1 .

0 0 ... 1 1
Un cod liniar binar C care are această matrice generatoare sub formă sistematică
are dmin (C) = wtmin (C) = 2. Într-adevăr, pentru orice cuvânt de cod nenul binar
avem
wt(z) = u1 + . . . + um + (u1 + . . . + um ) = 2(u1 + . . . + um ) ≥ 2 · 1 = 2
(ui ∈ {0, 1}). Cum dmin (C) = 2, codul poate detecta o singură eroare.
Definiţie 1.5. Două (n, m)−coduri liniare D−are C şi C 0 se numesc echivalente
dacă există o permutare astfel ı̂ncât
z = z1 . . . zn ∈ C ⇔ z 0 = zπ(1) . . . zπ(n) ∈ C 0
Exemplu 1.7. Codul liniar ternar cu matricea generatoare
 
1 1 0 0 0 0
G= 0  0 2 2 0 0
1 1 1 1 1 1
este echivalent cu codul liniar ternar cu matricea generatoare (sub formă sistematică)

4
 
1 0 0 1 0 0
G0 = 0 1 0 0 1 0
0 0 1 0 0 1
Într-adevăr, prin transformări liniare, avem:
     
1 1 0 0 0 0 1 1 0 0 0 0 1 0 0 1 0 0
L −L C ↔C 2L −L
G = 0 0 2 2 0 0 3∼ 1 0 0 2 2 0 0 4∼ 2 0 2 2 0 0 0 3∼ 2
1 1 1 1 1 1 0 0 1 1 1 1 0 1 1 0 1 1
     
1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0
C ↔C 2L2 ,2L3
∼ 0 2 2 0 0 0 5∼ 3 0 2 0 0 2 0 ∼ 0 1 0 0 1 0 = G0
0 0 0 0 2 2 0 0 2 0 0 2 0 0 1 0 0 1
Prin urmare, trebuie să permutam simbolurile 2 cu 4 şi 3 cu 5. De exemplu, mesajul
u = 011 este codat ı̂n z = u · G = 110011 cuvânt de cod al lui C. Dacă permu-
tam simbolurile 2 cu 4 şi 3 cu 5, avem z 0 = 101101 (este cuvântul de cod din C 0
corespunzător mesajului u0 = 101, z 0 = u0 · G0 ).
Teoremă 1.1. Orice cod liniar este echivalent cu un cod sistematic.

2. Decodarea codurilor liniare


Am văzut că mulţimea soluţiilor unui sistem liniar omogen A · x = 0 cu coeficienţi
ı̂n ZD formează un cod, numit cod grup. Fie z un cuvânt de cod al unui cod grup
(o soluţie a sistemului), deci A · z T = 0. Prin urmare z · AT = 0.
Considerăm, pe caz general, că există o matrice F astfel ı̂ncât z · F = 0. Dacă s-a
produs o eroare e, atunci cuvântul recepţionat este ẑ = z + e. Avem:
ẑ · F = (z + e) · F = z · F + e · F = 0 + e · F = e · F
Deci ẑ · F nu depinde de mesajul transmis z, ci doar de eroarea e.
Definiţie 2.1. O matrice H ∈ Mn−m,n (ZD ) este o matrice de control a unui
(n, m)−cod liniar C D−ar dacă şi numai dacă pentru orice z ∈ ZnD avem:
z · HT = 0 ⇔ z ∈ C
Observaţie. O matrice de control pentru un cod liniar C este orice matrice cu pro-
prietatea ker H = C.
Pentru un cod liniar C matricea de control nu este unică: orice matrice ale cărei
linii formează o bază pentru spaţiul vectorial ortogonal pe spaţiul vectorial C poate
fi matrice de control a codului.
În cazul ı̂n care codul liniar este sistematic, deci cunoaştem matricea generatoare
sub formă sistematică, atunci putem construi imediat o matrice de control a codului.
Teoremă 2.1. Dacă G = [Im P ], unde P ∈ Mm,n−m (ZD ) este matricea generatoare
sub formă sistematică a unui cod liniar C atunci o matrice de control a codului liniar
este H = [−P T In−m ].

5
Demonstraţie: Pentru a demonstra că H = [−P T In−m ] este o matrice de control,
trebuie să arătăm echivalenţa
z · H T = 0 ⇔ z ∈ C.
”⇐” Pentru orice mesaj ui = (u1 , . . . , um ) ∈ Zm D notăm cu zi = ui · G = ui · [Im P ]
cuvântul de cod corespunzător, zi = (zi,1 , . . . , zi,n ). Atunci:

(zi,1 , . . . , zi,m ) = (u1 , . . . , um )
zi = (u1 . . . um ) · [Im P ] ⇔
(zi,m+1 , . . . , zi,n ) = (u1 , . . . , um ) · P
Obţinem
(zi,m+1 , . . . , zi,n ) = (u1 , . . . , um ) · P = (zi,1 , . . . , zi,m ) · P ⇔
−(zi,1 , . . . , zi,m ) · P + (zi,m+1 , . . . , zi,n ) = 0,
adică, matriceal,  
−P
zi · = 0.
In−m
Am demonstrat că dacă zi ∈ C, atunci există matricea H = (−P T In−m ) astfel
ı̂ncât zi · H T = 0.
”⇒” Ştim că zi · H T = 0, adică zi · (−P T In−m )T = 0. Demonstrăm că există
ui ∈ Zm D astfel ı̂ncât zi = ui · G.
Avem zi · (−P T In−m )T = 0 implică (zi,m+1 , . . . , zi,n ) = (zi,1 , . . . , zi,m ) · P . Deci,
dacă notăm ui = (zi,1 , . . . , zi,m ), atunci (zi,m+1 , . . . , zi,n ) = ui · P . Obţinem
zi = ui · [Im P ] = ui · G

Observaţie. Pentru codurile binare matricea de control este H = [P T In−m ] deoarece
−P = P .
Exemplu 2.1. Fie matricea generatoare sub formă sistematică
 
1 0 0 0 0 1 0
0 1 0 0 1 1 0
G = [I4 P ] = 
0 0 1 0 1 0 1

0 0 0 1 1 1 1
a unui (7, 4)−cod liniar. Atunci o matrice de control este
 
0 1 1 1 1 0 0
H = [P T I3 ] = 1 1 0 1 0 1 0 .
0 0 1 1 0 0 1
De exemplu, cuvântul de cod zi = 1011000 (corespunde mesajului ui = 1011) verifică
zi · H T = 0.
Teoremă 2.2. Fie C un cod liniar de lungime n. Atunci C este un cod grup, adică
există o matrice de control A astfel ı̂ncât cuvintele codului C sunt determinate de A.

6
Demonstraţie: Fie C = {z1 , . . . , zs } şi considerăm matricea M ∈ Ms,n (ZD ), liniile
z1
 
z2 
fiind formate din simbolurile cuvintelor din cod, M =   ... . Considerăm că ma-

zs
tricea M are rangul rang(M ) = m şi k = n − m. Atunci m este numărul maxim de
linii liniar independente ale lui M şi numărul maxim de coloane liniar independente
ale lui M .
Presupunem că primele m linii ale matricei M sunt liniar independente, deci
z1 , . . . , zm . Atunci orice alt cuvânt cod din C este o combinaţie liniară de z1 , . . . , zm
cu coeficienţi ı̂n ZD . Avem

C = {z = u1 z1 + . . . + um zm : ui ∈ ZD }.

Mai mult, obţinem că |C| = Dm deoarece fiecare cuvânt de cod este determinat de
ui = (u1 , . . . , um ) ∈ Zm D.
Mai departe, presupunem că primele m coloane din matricea M sunt liniar in-
dependente (deci coloanele 1, . . . , m). Atunci celelalte n−m coloane sunt combinaţii
liniare de coloanele liniar independente, deci simbolurile um+1 , . . . , un sunt combinaţii
liniare de u1 , . . . , um :

um+1 = b11 u1 + b12 u2 + . . . + b1m um


um+2 = b21 u1 + b22 u2 + . . . + b2m um
..
.
um+k = un = bn−m,1 u1 + bn−m,2 u2 + . . . + bn−m,m um

Atunci obţinem sistemul sub formă matriceală:

u1
 

A ·  ...  = 0,
um

unde matricea A = (−B|In−m ), B = (bij ) ∈ Mn−m,m (ZD ).


Am obţinut astfel că fiecare cuvânt de cod z verifică A · z t = 0. Invers, pentru
a demonstra că fiecare soluţie z a sistemului A · z t = 0 este cuvânt de cod, z ∈ C,
remarcăm faptul că ı̂n total sunt Dm soluţii. Prin urmare, mulţimea cuvintelor de
cod C coincide cu mulţimea soluţiilor sistemului A · z t = 0. 

Exemplu 2.2. Considerăm codul

C = {000000, 101001, 110010, 010101, 011011, 111100, 100111, 001110}

7
şi matricea
0 0 0 0 0 0
 

   1 0 1 0 0 1
w1 1

1 0 0 1 0

w2  
 0 1 0 1 0 1

M =
 ...  =   ∈ M8,6 (Z2 )
0 1 1 0 1 1
1 1 1 1 0 0
w8  
1 0 0 1 1 1
0 0 1 1 1 0
Calculăm rangul matricei M :
0 0 0 0 0 0 0 0 0 0 0 0
   
1 0 1 0 0 1 1 0 1 0 0 1
1 1 0 0 1 0  0 1 1 0 1 1
   
0 1 0 1 0 1  0 1 0 1 0 1
   
M = ∼
0 1 1 0 1 1  0 1 1 0 1 1

1 1 1 1 0 0
 0 1 0 1 0 1

 
1 0 0 1 1 1 0 0 1 1 1 0
0 0 1 1 1 0 0 0 1 1 1 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
     
1 0 1 0 0 1 1 0 1 0 0 1 1 0 1 0 0 1
0 1 1 0 1 1  0 1 1 0 1 1  0 1 1 0 1 1
     
0 1 0 1 0 1  0 0 1 1 1 0  0 0 1 1 1 0
     
∼ ∼
0 1 1 0 1 1  0 0 0 0 0 0  0 0 0 0 0 0
 
0 1 0 1 0 1
 0 0 1 1 1  0
0 0 0 0 0 0
 
 
0 0 1 1 1 0  0 0 1 1 1 0  0 0 0 0 0 0
0 0 1 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0
Am obţinut că rang M = 3, deci w2 , w3 , w4 sunt liniar independente. Fie
   
w2 1 0 1 0 0 1
G = w3  = 1 1 0 0 1 0 ∈ M3,6 (Z2 )
w4 0 1 0 1 0 1
Primele trei coloane din G sunt liniar independente, deci putem să exprimăm ul-
timele trei coloane ı̂n funcţie de celelalte:

       
0 1 0 1
[col 4] = 0 = a1 1 + a2 1 + a3 0 = [col 1] + [col 2] + [col 3]
      
1 0 1 0
       
0 1 0 1
[col 5] = 1 = a1 1 + a2 1 + a3 0 = [col 1] + [col 3]
      
0 0 1 0

8
       
1 1 0 1
[col 6] = 0 = a1 1 + a2 1 + a3 0 = [col 1] + [col 2]
      
1 0 1 0
Obţinem deci:
u4 = u1 + u2 + u3
u5 = u1 + u3
u6 = u1 + u2
deci matricea A este:
 
1 1 1 | 1 0 0
A = (−B|I3 ) = 1 1 0 | 0 1 0
1 0 1 | 0 0 1
A este matricea de control.
Observaţie. O matrice de control pentru un (n, m)−cod liniar poate fi construită
astfel: fie G matrice generatoare a codului cu liniile z1 , . . . , zm .
(1) Pentru fiecare m + 1 ≤ i ≤ n, alegem zi ∈ ZnD astfel ı̂ncât să fie liniar
independent cu z1 , . . . , zi−1 (de fapt, construim zi ortogonal pe z1 , . . . , zi−1 ).
(2) Considerăm M matricea cu liniile z1 , . . . , zn şi calculăm M −1 (folosim faptul
că ZnD = C ⊕ C ⊥ , {z1 , . . . , zm } este o bază pentru C şi {zm+1 , . . . , zn } este o
bază pentru subspaţiul ortogonal C ⊥ ).
(3) Considerăm matricea H T formată din ultimele n − m coloane ale matricei
M −1 .
Exemplu 2.3. Fie
 
1 0 1 0 0 1
G = 1 1 0 0 1 0 ∈ M3,6 (Z2 )
0 1 0 1 0 1
o matrice generatoare a (6, 3)−codului liniar binar
C = {000000, 101001, 110010, 010101, 011011, 111100, 100111, 001110}.
Deci z1 = 101001, z2 = 110010, z3 = 010101 (m = 3). Prin urmare, trebuie să
adăugăm trei vectori z4 , z5 , z6 astfel ı̂ncât:
• z4 să fie liniar independent cu z1 , z2 , z3 ;
• z5 să fie liniar independent cu z1 , z2 , z3 , z4 ;
• z6 să fie liniar independent cu z1 , z2 , z3 , z4 , z5 .
Alegem z4 = 100000, z5 = 010000, z6 = 001000.
Fie M matricea cu liniile z1 , . . . , z6 şi calculăm inversa acesteia:
1 0 1 0 0 1
 
1 1 0 0 1 0
0 1 0 1 0 1
 
M =
1 0 0 0 0 0

0 1 0 0 0 0
0 0 1 0 0 0

9
Obţinem imediat că
0 0 0 1 0 0
 
0 0 0 0 1 0
1 0 0 1 0 0
 
M −1 = 
0 0 1 0 1 0

0 1 0 1 1 0
1 0 0 1 1 1
Prin urmare alegem ultimele n − m = 6 − 3 = 3 coloane şi rezultă
1 0 0
 
0 1 0
1 0 0
 
T
H =
0 1 0

1 1 0
1 1 1
Observaţie. Fie H ∈ Mn−m,n (ZD ) o matrice de control a unui (n, m)−cod liniar C,
deci ker H = C. Ştim că dim ker H + dim Im H = n, deci rank(H) = n − m. Prin
urmare, cele n − m linii ale lui H generează un subspaţiu vectorial de dimensiune
n − m al lui ZnD , astfel H poate fi considerată matricea generatoare a unui (n, n −
m)−cod liniar, numit codul dual al lui C.
Propoziţie 2.1. Dualul dualului unui cod liniar C este codul C.
Propoziţie 2.2. O matrice generatoare a unui cod liniar este o matrice de control
a codului dual şi reciproc.

3. Sindrom
Reamintim că dacă s-a transmis z şi s-a recepţionat ẑ, atunci ẑ = z + e, unde e
este eroarea apărută şi
ẑ · H T = (z + e) · H T = z · H T + e · H T = e · H T ,
unde H este o matrice de control.
Definiţie 3.1. Se numeşte sindrom al unui cuvânt recepţionat ẑ relativ la o matrice
de control H produsul ẑ · H T .
Propoziţie 3.1. Sindromul s = ẑ · H T al lui ẑ relativ la o matrice de control H
depinde doar de eroarea de transmisie e = ẑ − z şi nu depinde de z ∈ C.
Considerăm eroarea e = (e1 , . . . , en ), unde ek este o eroare ce acţionează asupra
unui singur simbol (eroare elementară). Atunci
Xn
s(ẑ) = ẑ · H T = e · H T = ei [col i din H].
i=1

Pentru a afla corectorul (opusul erorii) trebuie să cunoaştem corectorii pentru erorile
elementare ei , şi mai apoi le ı̂nsumăm.

10
Exemplu 3.1. Fie  
1 1 1 0 0
H = 0 1 0 1 0
1 1 0 0 1
o matrice de control a unui cod liniar binar. Considerăm erorile simple e1 = 10000,
e2 = 01000, e3 = 00100, e4 = 00010, e5 = 00001. Fie ẑ cuvântul recepţionat şi
calculăm sindromul:
 
1 1 1 0 0
s(ẑ) = (e1 e2 e3 e4 e5 ) · 0 1 0 1
 0 =
1 1 0 0 1
= (e1 + e2 + e3 e2 + e4 e1 + e2 + e5 ) =
X
= e1 (1 0 1) + e2 (1 1 1) + e3 (1 0 0) + e4 (0 1 0) + e5 (0 0 1) = ei [col i din H]T

Exemplu 3.2. Fie  


1 1 1 0 0
H = 0 1 0 1 0 
1 1 0 0 1
o matrice de control a unui cod liniar. Considerăm erorile simple e1 = 10000,
e2 = 01000, e3 = 00100, e4 = 00010, e5 = 00001 şi calculăm, pentru fiecare,
sindromul:
 
1 0 1
1 1 1
 
e1 · H T = (1 0 0 0 0) ·  1 0 1 = [col 1 H]T

1 0 0
=
0 1 0
0 0 1
 
1 0 1
1 1 1
 
e2 · H T = (0 1 0 0 0) ·  1 1 1 = [col 2 H]T

1 0 0
=
0 1 0
0 0 1
 
1 0 1
1 1 1
 
e3 · H T = (0 0 1 0 0) ·  1 0 0 = [col 3 H]T

1 0 0
=
0 1 0
0 0 1
 
1 0 1
1 1 1
 
e4 · H T = (0 0 0 1 0) ·  0 1 0 = [col 4 H]T

1 0 0
=
0 1 0
0 0 1

11
 
1 0 1
1 1 1
 
e5 · H T = (0 0 0 0 1) ·  T

1 0 0
 = 0 0 1 = [col 5 H]
0 1 0
0 0 1
Din coloanele matricei H putem considera următorii corectori:
sindrom corector
101 10000
111 01000
100 00100
010 00010
001 00001
deci am asociat fiecărei coloane din matricea H câte un corector.
De remarcat faptul că pentru 011 şi 110 nu am asociat corectori deoarece:
011 = 010 + 001 conduce la corectorul 00011 = 00010 + 00001

011 = 111 + 100 conduce la corectorul 10100 = 10000 + 00100


prin urmare corectorul nu este unic (s-au produs două erori, iar codul poate corecta
o singură eroare, deoarece dmin = 3, deci dmin2 −1 = 1 erori ce pot fi corectate şi
dmin − 1 = 2 erori ce pot fi detectate).
Observaţie. Sindromul nul corespunde corectorului nul.
Algoritm de decodare şi corectare: Presupunem că s-a recepţionat ẑ.:
(1) calculăm sindromul s(ẑ) = ẑ · H T ;
(2) obţinem corectorul e = −e din combinaţiile liniare ale corectorilor asociaţi
coloanelor matricei H;
(3) decodăm prin z = ẑ + e.
Exemplu 3.3. Fie (5, 2)−codul liniar binar cu o matrice generatoare
 
1 0 1 0 1
G= .
0 1 1 1 1
Presupunem că s-a transmis mesajul u = 10 ce corespunde cuvântului de cod
 
1 0 1 0 1
z = u · G = (1 0) · = 10101.
0 1 1 1 1

Matricea G = (I2 P ), deci o matrice de control este


 
1 1 1 0 0
H = (−P T I3 ) = (P T I3 ) = 0 1 0 1 0
1 1 0 0 1

12
Din coloanele matricei H putem considera următorii corectori:
sindrom corector
101 10000
111 01000
100 00100
010 00010
001 00001
000 00000
110 ?
011 ?
Presupunem că s-a recepţionat ẑ = 00101 (deci s-a produs o eroare la primul simbol).
Calculăm sindromul:
 
1 0 1
 1 1 1
 
T
s(ẑ) = ẑ · H = 0 0 1 0 1 · 1 0 0
 = (1 0 1).
0 1 0
0 0 1
Corectorul sindromului 101 este 10000, deci e = 10000.
Corectăm z = ẑ + e = 00101 + 10000 = 10101 şi decodăm prin u = 10 (am
folosit un cod sistematic, deci primele două poziţii din cuvântul de cod corespund
mesajului transmis).
Teoremă 3.1. Dacă H este o matrice de control a unui (n, m)−cod liniar D−ar C,
atunci dmin (C) este numărul minim de coloane liniar dependente ale lui H.
Demonstraţie: Fie z un cuvânt de cod. Atunci z · H T este o combinaţie liniară de
wt(z) coloane ale lui H. Mai mult, din definiţia matricei de control, z ∈ C dacă şi
numai dacă z · H T = 0.
Prin urmare, z ∈ C dacă şi numai dacă wt(z) coloane ale lui H sunt liniar depen-
dente.
În concluzie, numărul minim de coloane liniar dependente este wtmin(C) , care,
pentru codurile liniare, coincide cu dmin (C). 
Observaţie. Pentru codurile liniare binare obţinem:
• dacă H nu are nicio coloană nulă, atunci dmin (C) > 1
• dacă H nu are nicio coloană nulă şi nici două coloane egale, atunci dmin (C) >
2
Exemplu 3.4. Fie codul liniar binar cu matricea de control
 
1 1 1 0 0
H = 0 1 0 1 0  .
1 1 0 0 1
Matricea H nu are coloane nule sau coloane egale, deci dmin (C) > 2. Se observă că
există 3 coloane liniar dependente: coloanele 1, 3 şi 5, prin urmare dmin (C) = 3.

13
Propoziţie 3.2. Pentru un (n, m)−cod liniar C avem dmin (C) ≤ n − m + 1.
Demonstraţie: Ştim că numărul minim de coloane liniar dependente ale unei matrice
de control este dmin (C). Dar orice matrice de control are fiecare coloană cu n − m
elemente, deci orice combinaţie de n−m+1 coloane este liniar dependentă. Obţinem
deci că dmin (C) ≤ n − m + 1. 
Exemplu 3.5. Fie o matrice de control
 
1 1 0 1 0 1 0 0 0
0 1 1 1 0 0 1 0 0
H= 1

0 0 1 1 0 0 1 0
0 0 1 1 1 0 0 0 1
a unui (9, 5)−cod liniar binar C. Atunci dmin (C) ≤ 9−5+1 = 5. Observăm coloanele
2, 4, 5 sunt liniar dependente (C2 + C4 + C5 = 0) şi dmin (C) > 2 (deoarece H nu
are coloane nule sau egale), deci dmin (C) = 3. Prin urmare, codul poate detecta
dmin − 1 = 2 erori şi poate corecta dmin2 −1 = 1 erori.

14
TEORIA INFORMAŢIEI ŞI CODURI

CURS 9

Clase de coduri liniare

1. Coduri Hamming binare


Definiţie 1.1. Fie r un număr natural nenul, r ≥ 2. Codul liniar binar ı̂n care
coloanele din matricea de control reprezintă scrierea binară a numerelor 1, 2, . . . , 2r −
1 se numeşte cod Hamming binar.
Observaţie. • Pentru fiecare r ≥ 2 se poate construi un cod binar (2r − 1, 2r −
r − 1) liniar;
• În matricea de control facem convenţia ca pe coloana i să trecem reprezentarea
binară a numărului i.
Exemplu 1.1. Pentru r = 3 avem codul Hamming binar de lungime n = 23 − 1 = 7
şi cu m = 23 − 3 − 1 = 4 simboluri de informaţie (deci cu 3 simboluri de control.)
Matricea de control este:
 
0 0 0 1 1 1 1
H3 = 0 1 1 0 0 1 1
1 0 1 0 1 0 1

Cuvintele codului sunt soluţiile sistemului x · H T = 0, x ∈ Z72 , deci:



x 4 + x 5 + x 6 + x 7 = 0
x2 + x3 + x6 + x7 = 0
x + x + x + x = 0
1 3 5 7

   
0 0 0 1 1 1 1 1 0 1 0 1 0 1
H3 = 0 1 1 0 0 1 1 ∼  0 1 1 0 0 1 1
1 0 1 0 1 0 1 0 0 0 1 1 1 1
deci simbolurile x1 , x2 , x4 sunt de control şi x3 , x5 , x6 , x7 sunt simboluri de informaţie.
Vom avea 24 cuvinte de cod.
Obţinem:

x 1 = x 3 + x 5 + x 7
x2 = x3 + x6 + x7
x4 = x5 + x6 + x7

1
deci cuvintele codului sunt:
x3 x5 x6 x7 z x3 x5 x6 x7 z
0000 0000000 0110 1100110
1000 1100000 0101 0100101
0100 1001100 0011 1000011
0010 0101010 1110 0010110
0001 1101001 1101 1010101
1100 0111100 1011 1110011
1010 1011010 0111 0001111
1001 0011001 1111 1111111
Pentru a obţine matricea generatoare (sub formă sistematică), procedăm astfel:
   
0 0 0 1 1 1 1 0 0 0 1 1 1 1
H3 = 0 1 1 0 0 1 1 ∼ 0 1 1 0 0 1 1 ∼
1 0 1 0 1 0 1 1 0 1 1 0 1 0
   
0 1 1 1 1 0 0 0 1 1 1 1 0 0
∼ 0 1 1 0 0 1 1  ∼ 1 0 1 1 0 1 0  = (−P T |I3 ) = (P T |I3 ),
1 1 0 1 0 0 1 1 1 0 1 0 0 1
 
1 0 0 0 0 1 1
0 1 0 0 1 0 1
deci G = (I4 |P ) = 
0 0 1 0 1

1 0
0 0 0 1 1 1 1
Propoziţie 1.1. Orice cod binar Hamming are distanţa 3.
Demonstraţie: Din modul de construcţie, orice două coloane din matricea de con-
trol sunt liniar independente (adică orice trei coloane sunt liniar dependente), deci
dmin C = 3 şi codul corectează o singură eroare dmin2 −1 = 1. 
Observaţie. Codul Hamming nu poate corecta o eroare şi detecta o altă eroare simul-
tan deoarece d > 2t + s ⇔ 3 > 2 · 1 + 1, fals. Deci codul Hamming binar corectează
o singură eroare şi nu detectează altă eroare.
Algoritm: Fie ẑ cuvântul recepţionat.
• Se calculează sindromul s(ẑ) = ẑ · H T = e · H T şi se identifică cu coloana i
din H
• Eroarea este pe poziţia i, unde i este numărul ce are reprezentarea binară
s(ẑ). Atunci z = ẑ + ei , unde ei are 1 pe poziţia i şi 0 ı̂n rest.
Exemplu 1.2. Considerăm (7, 4) codul Hamming binar cu matricea de control
 
0 0 0 1 1 1 1
H3 = 0 1
 1 0 0 1 1
1 0 1 0 1 0 1

2
şi presupunem că s-a recepţionat ẑ = 0011101. Ştim că s-a produs o singură eroare,
dar nu ştim pe ce poziţie. Calculăm sindromul:
 T
1
s(ẑ) = ẑ · H T ⇔ s(ẑ) = 0 0 1 1 1 0 1 · H T = 0

1
Deci sindromul este coloana 5 din matricea de control, adică este scrierea binară
a lui 5. Corectăm cuvântul:
z = ẑ + (0, 0, 0, 0, 1, 0, 0)
şi obţinem z = 0011001.
Prin urmare, corectăm pe ẑ = 0011101 cu z = 0011001 (cuvânt de cod).

2. Modificări ale codurilor liniare


Definiţie 2.1. Fie C un (n, m)−cod liniar. Se numeşte extensie a codului C codul
C ∗ (n + 1, m)− liniar obţinut din codul C prin adăugarea la fiecare cuvânt z =
n+1
P
z1 . . . zn ∈ C a unui nou simbol zn+1 cu proprietatea că zi = 0(mod 2). Simbolul
i=1
adăugat se numeşte bit de paritate.
Observaţie. • Dacă H este o matrice de control a codului C, atunci o matrice
de control a codului extins C ∗ este:
 
0
.. 
. 


 .. 
H∗ =  H . 



 0 

−− −− −− −− −− −−
1 ... ... 1 1
n
P
Ultima linie reprezintă ecuaţia zn+1 = zi
i=1

• Dacă un cod (n, m) liniar are distanţă minimă impară dmin , atunci codul
extins are distanţa minimă dmin + 1.
Într-adevăr, dacă z = z1 z2 . . . zn are wt(z) = d = dmin şi d este număr
Pn
impar, atunci zi = 1(mod 2), deci zn+1 = 1 şi wt(z1 z2 . . . zn zn+1 ) = d + 1.
i=1
Mai mult, nu se poate construi un alt cuvânt cod de pondere mai mică.
Definiţie 2.2. Fie C un cod (n, m) liniar. Atunci:
• Relaxarea lui C este codul C (n−1, m) liniar obţinut din codul C prin ştergerea
ultimului simbol.
• Completarea lui C este codul C ∗ liniar având cuvintele de cod C ∪ {z + 1 :
z ∈ C}, unde 1 = (1, 1, . . . , 1).

3
• Expurgarea codului C este codul
C 0 = {z ∈ C : wt(z) = 0(mod 2)}.
Observaţie. • Relaxarea este operaţia inversă extensiei.
• Prin completare şi expurgare se obţin coduri liniare doar ı̂n cazul binar.
Pentru cazul nebinar mulţimile rezultate nu sunt spaţii liniare.
Propoziţie 2.1. Prin completarea unui cod binar (n, m) liniar se obţine un cod
binar (n, m + 1) liniar cu un număr dublu de cuvinte cod.
Demonstraţie: Completarea codului binar C este codul C ∗ liniar având cuvintele de
cod C ∪ {z + 1 : z ∈ C}, unde 1 = (1, 1, . . . , 1). Prin această operaţie la toate
cuvintele de cod se modifică 1 ı̂n 0 şi invers, deci cele două mulţimi au acelaşi număr
de elemente. Atunci matrice generatoare a noului cod este:
 
 G 
Gcomp = 

,

1 ... ... 1 1 1
unde G ∈ Mm,n (Z2 ) este matricea generatoare a codului iniţial. Cuvintele noului
cod au lungimea cuvintelor din codul C şi numărul simbolurilor de informaţie este
m + 1. 
Propoziţie 2.2. Orice cod binar (n, m) liniar are fie toate cuvintele de cod de
pondere pară fie numărul cuvintelor de pondere pară este egal cu numărul cuvintelor
de pondere impară.
Corolar 2.1. Expurgarea unui cod binar (n, m) liniar este codul iniţial sau un cod
cu jumătate din numărul cuvintelor de cod ale codului iniţial.
Exemplu 2.1. Considerăm codul liniar cu mulţimea cuvintelor de cod
C = {0000, 0111, 1010, 1101}.
O matrice generatoare a codului este
 
1 0 1 0
G=
0 1 1 1
Extensia codului este codul
C = {00000, 01111, 10100, 11011}.
Relaxarea codului C = {0000, 0111, 1010, 1101} este codul
Crelax = {000, 011, 101, 110}
şi are o matrice generatoare
 
1 0 1
Grelax =
0 1 1

4
Codul completat se obţine din C∪{z+1 : z ∈ C}, unde C = {0000, 0111, 1010, 1101},
deci este codul
Ccomp = {0000, 0111, 1010, 1101, 1111, 1000, 0101, 0010}
şi are o matrice generatoare
 
1 0 1 0
Gcomp = 0 1 1 1
1 1 1 1
Codul expurgat se obţine astfel:
C 0 = {z ∈ C : wt(z) = 0(mod 2)},
unde C = {0000, 0111, 1010, 1101}. Obţinem Cexp = {0000, 1010} şi are o matrice
generatoare 
Gexp = 1 0 1 0

3. Clase de coduri liniare


Codul Hamming poate fi ı̂mbunătăţit prin extensie şi se obţine un cod binar
(2r , 2r − r − 1) liniar cu toate cuvintele de pondere pară.
Exemplu 3.1. Pentru (7, 4) codul Hamming binar cu matricea de control
 
0 0 0 1 1 1 1
H3 = 0 1 1 0 0 1 1
1 0 1 0 1 0 1
codul extins are matricea de control:
 
0 0 0 1 1 1 1 0
0 1 1 0 0 1 1 0
H3∗ = 


1 0 1 0 1 0 1 0
1 1 1 1 1 1 1 1
Remarcăm faptul că rangH3∗ = 4:
   
0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0
 0 1 1 0 0 1 1 0  0 1 1 0 0 1 1 0
H3∗ =   1 0 1 0 1 0 1 0 ∼  0 1 0 1 0 1 0 1 ∼
  
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 
0 0 0 1 1 1 1 0
 0 0 1 1 0 0 1 1
∼ 0 1 0 1 0 1 0 1

1 1 1 1 1 1 1 1
şi toate liniile sunt cuvinte de cod ı̂n codul Hamming extins. Prin urmare această
matrice poate fi considerată matrice generatoare a codului binar extins.

5
Propoziţie 3.1. Un cod Hamming binar extins are dmin = 4.
Demonstraţie: Ştim că un cod binar Hamming are dmin (C) = 3 (impar). Prin ur-
mare, codul binar Hamming extins are dmin (C 0 ) = dmin (C) + 1 = 4. 
Observaţie. Codurile binare Hamming extinse corectează o eroare şi detectează 2
erori simultan.
n+1
P
Ecuaţia corespunzătoare liniei 1 1 . . . 1 din matricea de control, zi = 0 se
i=1
numeşte ecuaţie de control a parităţii.
Algoritm:
• Dacă nu sunt verificate ecuaţia de control a parităţii şi cel puţin una din
primele n − m ecuaţii, atunci a apărut o eroare simplă care se corectează cu
algoritmul prezentat la codurile Hamming binare;
• Dacă ecuaţia de control a parităţii este verificată şi cel puţin una din primele
n − m ecuaţii nu se verifică, atunci s-a detectat o eroare dublă.
• În celelalte situaţii nu au apărut erori sau erorile sunt nedetectabile.
Exemplu 3.2. Considerăm codul binar Hamming extins cu matricea de control
 
0 0 0 1 1 1 1 0
0 1 1 0 0 1 1 0
H3∗ = 


1 0 1 0 1 0 1 0
1 1 1 1 1 1 1 1
şi s-au recepţionat cuvintele ẑ1 = 00101011, ẑ2 = 00111011. Sistemul x · (H3∗ )T = 0
este echivalent cu:


 x1 = x3 + x5 + x7
x2 = x3 + x6 + x7


 x4 = x5 + x6 + x7
x + x + x + x + x + x + x + x = 0
1 2 3 4 5 6 7 8

Pentru primul cuvânt ẑ1 = 00101011 avem:


 

 x 1 = x 3 + x 5 + x 7 
 0=1+1+1
x2 = x3 + x6 + x7 0=1+0+1
 


 x4 = x5 + x6 + x7 
 0=1+0+1
x + x + x + x + x + x + x + x = 0 1 + 1 + 1 + 1 = 0
1 2 3 4 5 6 7 8

Este verificată ecuaţia de verificare a parităţii, dar nu se verifică prima ecuaţie din
sistem, deci s-a detectat o eroare dublă.
 T
0 0 0 1 1 1 1 0
0 1 1 0 0 1 1 0
s(ẑ1 ) = ẑ1 ·(H3∗ )T = 0 0 1 0 1 0 1 1 ·
  
 = 0 0 1 0 .
1 0 1 0 1 0 1 0
1 1 1 1 1 1 1 1
Sindromul acestui cuvânt este diferit de toate coloanele matricei H3∗ , dar este suma
dintre coloanele 2 şi 3 sau 1, 8 sau 6, 7. Prin urmare, nu se poate corecta ẑ1 .

6
În schimb, pentru cuvântul ẑ2 = 00111011 avem:
 

 x 1 = x 3 + x 5 + x 7 
 0=1+1+1
x2 = x3 + x6 + x7 0=1+0+1
 


 x4 = x5 + x6 + x7 
 1=1+0+1
x + x + x + x + x + x + x + x = 0 1 + 1 + 1 + 1 + 1 = 0
1 2 3 4 5 6 7 8

Nu se verifică ecuaţia de control a parităţii şi nici cel puţin o altă ecuaţie din sistem,
deci cuvântul poate fi corectat cu primul algoritm, eroarea fiind simplă. Sindromul
este:

 T
0 0 0 1 1 1 1 0
0 1 1 0 0 1 1 0
s(ẑ2 ) = ẑ2 ·(H3∗ )T = 0 0 1 1 1 0 1 1 ·
  
 = 1 0 1 1 ,
1 0 1 0 1 0 1 0
1 1 1 1 1 1 1 1

deci este coloana 5 din matrice. Prin urmare, ẑ2 = 00111011 se corectează prin
00110011 (am modificat poziţia 5.)

Coduri Hamming nebinare


−1 r
Definiţie 3.1. Fie q un număr prim, r ≥ 2 un număr ı̂ntreg şi n = qq−1 . Se numeşte
cod nebinar Hamming un (n, n − r) cod liniar peste Zq ı̂n care matricea de control
are orice pereche de două coloane liniar independente (o coloană nu este multiplu
de o altă coloană.)

Mulţimea coloanelor formează o mulţime maximală de vectori liniar independenţi


doi câte doi.

Exemplu 3.3. Considerăm q = 3, r = 2 şi codul (4, 2) dat de matricea de control


 
1 0 1 2
H= .
0 1 1 1

Observăm că H = (I2 |B), deci matrice generatoare este


   
t −1 −1 1 0 2 2 1 0
G = (−B |I2 ) = =
−2 −1 0 1 1 2 0 1

Pentru a scrie cuvintele codului folosim matricea de control:


 
x1 = −x3 − 2x4 x1 = 2x3 + x4

x2 = −x3 − x4 x2 = 2x3 + 2x4

7
Simbolurile de informaţie sunt x3 , x4 . Obţinem cuvintele de cod:
x3 x4 v
00 0000
01 1201
02 2002
10 2210
11 0111
12 1012
20 1120
21 2021
22 0222
Observaţie. • Matricea de control se alege astfel ı̂ncât pe coloane se trec toate
elementele din Zrq , iar primul element de sus ı̂n jos este 1.
• Codurile Hamming nebinare au dmin = 3, deci ele pot corecta o singură
eroare.

Codul Golay
Este un cod corector de cel mult 3 erori.
Codul Golay binar extins: a fost folosit de programul spaţial Voyager la
ı̂nceputul anilor 1980 pentru transmiterea fotografiilor planetelor Jupiter şi Saturn.
Considerăm matricea pătratică de ordin 12:
 
1 1 0 1 1 1 0 0 0 1 0 1
 1 0 1 1 1 0 0 0 1 0 1 1 
 0 1 1 1 0 0 0 1 0 1 1 1 
 
 1 1 1 0 0 0 1 0 1 1 0 1 
 
 1 1 0 0 0 1 0 1 1 0 1 1 
 
 1 0 0 0 1 0 1 1 0 1 1 1 
 
B=
 0 0 0 1 0 1 1 0 1 1 1 1 

 0 0 1 0 1 1 0 1 1 1 0 1 
 
 0 1 0 1 1 0 1 1 1 0 0 1 
 
 1 0 1 1 0 1 1 1 0 0 0 1 
 
 0 1 1 0 1 1 1 0 0 0 1 1 
1 1 1 1 1 1 1 1 1 1 1 0
Definiţie 3.2. Fie matricea G = (I12 |B) ∈ M12,24 (Z2 ). Codul binar definit de
matricea generatoare G se numeşte cod Golay extins şi se notează cu C24 .
Observaţie. • Matricea B se poate obţine astfel: dacă eliminăm ultima linie şi
ultima coloană, atunci matricea rămasă B1 este o matrice circulară, generată
de cuvântul 11011100010, de la stânga la dreapta. Deci
 
B1 1t
B= ,
1 0
unde 1 = (1 . . . 1). Mai mult, B este matrice simetrică (B = B t ).

8
• Codul binar Golay extins C24 are n = 24, m = 12 şi 212 = 4096 cuvinte de
cod.
• Matrice de control pentru codul Golay binar extins este H = (B|I12 ).
Teoremă 3.1. Matrice de control pentru C24 este H = (I12 |B).
Corolar 3.1. Codul binar Golay extins admite ca matrice generatoare şi pe G =
(B|I12 ).
Teoremă 3.2. C24 are distanţă minimă d = 8.
Deoarece codul C24 are distanţă minimă d = 8, poate să corecteze orice 3 erori.
Notăm cu ẑ ∈ Z24 2 cuvântul recepţionat, cu z cuvântul cod cel mai apropiat şi cu e
eroarea (z = ẑ − e). Presupunem că wt(e) ≤ 3 deoarece codul corectează cel mult 3
erori.
Pentru orice cuvânt ẑ ∈ Z24 12
2 notăm ẑ = (z1 , z2 ), unde z1 , z2 ∈ Z2 . Prin urmare
e = (e1 , e2 ) cu wt(e1 ) ≤ 1 sau wt(e2 ) ≤ 1.
Definim două sindromuri pentru ẑ:
s1 (ẑ) = ẑ · (I12 |B)T = (e1 e2 ) · (I12 |B)T = e1 + e2 B
s2 (ẑ) = ẑ · (B|I12 )T = (e1 e2 ) · (B|I12 )T = e1 B + e2
Observaţie. Dacă wt(e2 ) ≤ 1, atunci s1 (ẑ) este un cuvânt de pondere cel mult 3 (dacă
wt(e2 ) = 0) sau o linie a lui B cu cel mult doi biţi schimbaţi (dacă wt(e2 ) = 1).
Analog, dacă wt(e1 ) ≤ 1, atunci s2 (ẑ) este un cuvânt de pondere cel mult 3 (dacă
wt(e1 ) = 0) sau o linie a lui B cu cel mult doi biţi schimbaţi (dacă wt(e1 ) = 1).
De remarcat faptul că
s2 (ẑ) = e1 B + e2 = (e1 + e2 B)B = s1 (ẑ)B
Algoritm 1:
• Se calculează sindromul s(ẑ) = ẑ · H T , unde H = (I12 |B);
• Dacă wt(s(ẑ)) ≤ 3, atunci e = (s(ẑ), 0) şi ne oprim;
• Dacă există o linie bi a lui B cu wt(s(ẑ) + bi ) ≤ 2, atunci e = (s(ẑ) + bi , fi )
şi ne oprim;
• Dacă wt(s(ẑ)B) ≤ 3, atunci e = (0, s(ẑ)B) şi ne oprim;
• Dacă există o linie bi a lui B cu wt(s(ẑ)B +bi ) ≤ 2, atunci e = (fi , s(ẑ)B +bi )
şi ne oprim;
• Dacă e nu a fost determinat ı̂ncă, se cere retransmiterea.
unde fi este un cuvânt de lungime 12 cu 1 pe poziţia i şi 0 ı̂n rest.
După determinarea erorii e, se corectează mesajul prin z = ẑ + e.
Exemplu 3.4. Se cere corectarea cuvântului ẑ = (101111101111, 010010010010).
Determinăm sindromul:
s(ẑ) = ẑ · H T = ẑ · (I12 |B)T = 101111101111 + (010010010010) · B =
= 101111101111 + 001111101110 = 100000000001
Cum wt(s(ẑ)) = 2 ≤ 3, atunci
e = (s(ẑ), 0) = (100000000001, 000000000000)

9
deci corectăm prin
z = ẑ + e = (101111101111, 010010010010) + (100000000001, 000000000000) =
= (0011111011110, 010010010010).
Exemplu 3.5. Se cere corectarea cuvântului ẑ = (001001001101, 101000101000).
Determinăm sindromul:
s(ẑ) = ẑ · H t = ẑ · (I12 |B)T = 001001001101 + (101000101000) · B =
= 001001001101 + 111000000100 = 110001001001
Cum wt(s(ẑ)) = 5, trecem la pasul 3 din algoritm, deci calculăm:
s(ẑ) + b1 = 000110001100 s(ẑ) + b2 = 011111000010
s(ẑ) + b3 = 101101011110 s(ẑ) + b4 = 001001100100
s(ẑ) + b5 = 000000010010, wt(s(ẑ) + b5 ) ≤ 2,
deci e = (s(ẑ) + b5 , f5 ) = (000000010010, 000010000000). Corectăm prin z = ẑ + e =
(000111000111, 011011010000)
Exemplu 3.6. Se cere corectarea cuvântului ẑ = (000111000111, 011011010000).
Determinăm sindromul:
s(ẑ) = ẑ · H T = ẑ · (I12 |B)T = 000111000111 + (011011010000) · B =
= 000111000111 + 101010101101 = 101101101010
Cum wt(s(ẑ)) = 7, trecem la pasul 3 din algoritm, şi obţinem pentru toate liniile
matricei B wt(s(ẑ) + bi ) ≥ 3. Prin urmare trecem la pasul 4. Al doilea sindrom este
s(ẑ)B = 111001111101 cu ponderea 8.
Avem:
s(ẑ)B + b1 = 001110111000
s(ẑ)B + b2 = 010111110110
s(ẑ)B + b3 = 100101101010
s(ẑ)B + b4 = 000001010000
Am obţinut wt(s(ẑ)B + b5 ) ≤ 2, deci eroarea este
e = (f4 , s(ẑ)B + b4 ) = (000100000000, 000001010000)
şi corectăm prin z = ẑ + e = (000011000111, 011010000000).

Codul Golay binar: relaxăm codul binar extins (eliminăm ultimul simbol din
fiecare cuvânt) şi obţinem codul Golay binar. Considerăm matricea B̂ ∈ M12,11 (Z2 )
obţinută prin eliminare ultimei coloane din B.
Definiţie 3.3. Codul binar ce are matricea generatoare G = (I12 |B̂) se numeşte cod
Golay binar şi se notează cu C23 .
Codul Golay binar are n = 23, m = 12 şi 212 = 4096 cuvinte de cod. Extensia lui
C23 este C24 .

10
Teoremă 3.3. Distanţa minimă a lui C23 este 7.
Obţinem că orice cod Golay binar va corecta cel mult 3 erori.
Observaţie. Orice cuvânt ẑ ∈ Z23 2 se află la distanţă cel mult 3 de un cuvânt cod.
Deci dacă se adaugă la sfârşit 0 sau 1, formând ẑ0 sau ẑ1 se obţin cuvinte de pondere
impară, care se află la distanţa de cel mult 3 faţă de un cuvânt cod din C24 .
Algoritm 2:
• Se formează cuvântul extins de pondere impară ẑ0 sau ẑ1.
• Se decodifică folosind Algoritmul 1 şi se obţine cuvântul de cod z ∈ C24 .
• Se elimină ultimul caracter din z.
Codul Golay ternar: definim matricea cu elemente ı̂n Z3 :
 
0 1 2 2 1
1 0 1 2 2 
 
S5 = 
 2 1 0 1 2 .

2 2 1 0 1 
1 2 2 1 0
Definiţie 3.4. Codul Golay ternar este codul ce are matricea generatoare:
 
11111
G = I6 .
S5
Acest cod are n = 11, m = 6, deci 36 cuvinte de cod.
Codul Golay ternar extins este un (12, 6) cod liniar cu matricea generatoare Ḡ:
1 0 0 0 0 0 1 1 1 1 1 0
 
 0 1 0 0 0 0 0 1 2 2 1 2 
 0 0 1 0 0 0 1 0 1 2 2 2 
 
Ḡ = 
 0 0 0 1 0 0 2 1 0 1 2 2 

 0 0 0 0 1 0 2 2 1 0 1 2 
0 0 0 0 0 1 1 2 2 1 0 2
Teoremă 3.4. Codul Golay ternar extins are distanţa minimă d = 6, deci corectează
cel mult 2 erori.
Observaţie. Se poate arăta că orice cod liniar cu n = 11, d = 5 şi 36 cuvinte de cod
este cod Golay ternar.

Coduri Reed–Muller (R-M): Sunt coduri definite de Reed, iar modalităţile


de corectare şi de detectare ale erorilor au fost definite de Muller. Codul RM(1, 5)
a fost folosit ı̂n 1969 de sonda Mariner pentru a transmite imagini de pe Lună.
Fiecare pixel din imagine avea atribuit una din 26 grade de umbră, iar cei şase biţi
de informaţie erau codificaţi ı̂ntr-un cuvânt de lungime 32. Acest cod poate corecta
până la 7 erori independente.

11
Definiţie 3.5. Fie m ≥ 0 un număr natural. Codul Reed-Muller RM(r, m) de
lungime n = 2m şi ordin r, 0 ≤ r ≤ m se defineşte recursiv astfel:
2m 2m
z }| { z }| {
• RM(0, m) = {00 . . . 00, 11 . . . 11, RM(m, m) = Zn2 ;
• RM(p, m) = {[a, a + b] : a ∈ RM(p, m − 1), b ∈ RM(p − 1, m − 1)}, 0 <
p ≤ r.
Prin [a, b] notăm alăturarea a două cuvinte de lungimi egale 2m−1 , separate prin
virgulă pentru a obţine un cuvânt de lungime 2m .
Exemplu 3.7. Avem: RM(0, 0) = {0, 1}
RM(0, 1) = {00, 11}, RM(1, 1) = {00, 01, 10, 11} = Z22
RM(0, 2) = {0000, 1111}, RM(2, 2) = Z42
RM(1, 2) = {[a, a + b] : a ∈ RM(1, 1), b ∈ RM(0, 1)} =
= {0000, 0011, 0100, 0111, 1000, 1011, 1100, 1111}.
Definiţie 3.6. Definim matricea generatoare G(r, m) a codului Reed-Muller RM(r, m)
recursiv astfel:
• G(0, m) = (1 1 1 . . . 1 1) ∈ M1,2m ;
• pentru 0 < p ≤ r < m avem:
 
G(p, m − 1) G(p, m − 1)
G(p, m) =
0 G(p − 1, m − 1)
 
G(m − 1, m)
• G(m, m) =
000 . . . 01
Exemplu 3.8. Considerăm m = 2, deci lungimea cuvintelor este n = 2m = 4.
Pentru r = 1, 2 avem:
   
G(1, 1) G(1, 1) G(1, 2)
G(1, 2) = , G(2, 2) =
0 G(0, 1) 0 0 0 1
Avem    
G(0, 1) 1 1
G(0, 1) = (1 1), G(1, 1) = =
0 1 0 1
Prin urmare:
 
  1 1 1 1
G(1, 1) G(1, 1)
G(1, 2) = = 0 1 0 1
0 G(0, 1)
0 0 1 1
 
  1 1 1 1
G(1, 2)  0 1 0 1
G(2, 2) = = 
0 0 0 1 0 0 1 1
0 0 0 1
Teoremă 3.5. Codul RM(r, m) are distanţă d = 2m−r .
0 1 r
Teoremă 3.6. Codul RM(r, m) are k = Cm +Cm +. . .+Cm simboluri de informaţie.

12
Observaţie. Codul RM(m − 2, m) este codul Hamming binar extins de lungime 2m .
Decodificarea codurilor RM(1, m):
Definiţie 3.7. Se numeşte produsul Kronecker al matricelor Am,n , Bp,q şi se notează
cu A × B ∈ Mmp,nq , A × B = (aij B).
   
1 1 1 0
Exemplu 3.9. Fie H = , I2 = . Atunci produsul Kronecker este:
1 −1 0 1
 
  1 0 1 0
1 · I2 1 · I2 0 1 0 1
H × I2 = = 
1 · I2 −1 · I2  1 0 −1 0 
0 1 0 −1
 
  1 1 0 0
1·H 0·H 1 −1 0 0 
I2 × H = = 
0·H 1·H 0 0 1 1 
0 0 1 −1
De remarcat faptul că produsul Kronecker  nu  este comutativ, dar este asociativ.
1 1
Plecând de la matricea Hadamard H = , construim şirul de matrici:
1 −1
i
Hm = I2m−i × H × I2i−1 , i ≥ 1
Exemplu 3.10. Pentru m = 2 avem:
H21 = I22−1 × H × I21−1 = I2 × H × I1 = I2 × H
H22 = I22−2 × H × I22−1 = I1 × H × I2 = H × I2 .
Pentru m = 3 avem:
H31 = I23−1 × H × I21−1 = I4 × H × I1 = I4 × H =
 
1·H 0·H 0·H 0·H
0 · H 1 · H 0 · H 0 · H 
= 
0 · H 0 · H 1 · H 0 · H 
0·H 0·H 0·H 1·H
1 1 0 0 0 0 0 0
 
1 −1 0 0 0 0 0 0 
0 0 1 1 0 0 0 0 
 

0 0 1 −1 0 0 0 0 
 
=
0 0 0 0 1 1 0 0 

0 0
 0 0 1 −1 0 0  
0 0 0 0 0 0 1 1 
0 0 0 0 0 0 1 −1
 
1 0 1 0
0 1 0 1
H32 = I23−2 × H × I22−1 = I2 × H × I2 = I2 × 
1 0 −1 0  =

0 1 0 −1

13
1 0 1 0 0 0 0 0
 
0 1 0 1 0 0 0 0 
1 0 −1 0 0 0 0 0
 

0 1 0 −1 0 0 0 0
 
=

 0 0 0 0 1 0 1 0


 0 0 0 0 0 1 0 1 
 
 0 0 0 0 1 0 −1 0 
0 0 0 0 0 1 0 −1
 
1 · I4 1 · I4
H33 = I23−3 × H × I23−1 = I1 × H × I4 = H × I4 = =
1 · I4 −1 · I4

1 0 0 0 0 1 0 0
 
0 1 0 0 1 0 0 0 
0 0 1 0 0 0 1 0
 

0 0 0 1 0 0 0 1
 
=

1 0 0 0 −1 0 0 0


0
 1 0 0 0 −1 0 0 

0 0 1 0 0 0 −1 0 
0 0 0 1 0 0 0 −1
m
Algoritm de decodificare a codurilor RM(1, m): Notăm cu ẑ ∈ Zn=2 2
cuvântul recepţionat şi cu G(1, m) matricea generatoare a codului.
• Înlocuim pe 0 cu −1 ı̂n ẑ. Notăm cu ẑ 0 noul cuvânt;
• Calculăm ẑ1 = ẑ 0 · Hm
1 i
, ẑi = ẑi−1 · Hm , 2 ≤ i ≤ m;
• Se determină poziţia j a celei mai mari componente (ı̂n valoare absolută) a
lui ẑm :
Fie v(j − 1) ∈ Zn2 reprezentarea binară a lui j − 1 pe m biţi Corectăm mesajul astfel:
• (1, v(j − 1)) dacă componenta j a lui ẑm este pozitivă;
• (0, v(j − 1)) dacă componenta j a lui ẑm este negativă;
Exemplu 3.11. Fie m = 3 şi G(1, 3) matricea generatoare a codului RM(1, 3).
Reamintim că
 
    1 1 1 1
G(1, 2) G(1, 2) G(1, 1) G(1, 1)
G(1, 3) = şi G(1, 2) = = 0 1 0 1
0 G(0, 2) 0 G(0, 1)
0 0 1 1
şi G(0, 2) = (1 1 1 1).
Presupunem că s-a recepţionat cuvântul ẑ = 10101011.
Înlocuim 0 cu −1 ı̂n ẑ. Notăm cu ẑ 0 = 1, −1, 1, −1, 1, −1, 1, 1. Avem:
ẑ1 = ẑ 0 · H31 = (0, 2, 0, 2, 0, 2, 2, 0)

ẑ2 = ẑ1 · H32 = (0, 4, 0, 0, 2, 2, −2, 2)


ẑ3 = ẑ2 · H33 = (2, 6, −2, 2, −2, 2, 2, −2)

14
Cea mai mare componentă ı̂n valoare absolută este 6 şi se află pe poziţia 2. Cum
v(1) = 100 este reprezentarea binară a lui 1 şi 6 > 0, deci mesajul transmis este
(1, v(1)) = 1100 şi corespunde cuvântului de cod z = (1 1 0 0) · G = 11101010.
Exemplu 3.12. Fie m = 3 şi G(1, 3) matricea generatoare a codului RM(1, 3).
Presupunem că s-a recepţionat cuvântul ẑ = 10001111.
Înlocuim 0 cu −1 ı̂n ẑ. Notăm cu ẑ 0 = 1, −1, −1, −1, 1, 1, 1, 1. Avem:
ẑ1 = ẑ 0 · H31 = (0, 2, −2, 0, 2, 0, 2, 0)
ẑ2 = ẑ1 · H32 = (−2, 2, 2, 2, 4, 0, 0, 0)
ẑ3 = ẑ 0 · H33 = (2, 2, 2, 2, −6, 2, 2, 2)
Cea mai mare componentă ı̂n valoare absolută este −6 şi se află pe poziţia 5.
Cum v(4) = 001 este reprezentarea binară a lui 4 şi −6 < 0, mesajul transmis este
(0, v(4)) = 0001 şi cuvântul de cod este z = (0 0 0 1) · G.

Coduri MacDonald:
Fie C un (n, k)−cod liniar peste Z2 şi G matricea generatoare. Notăm cu Mk,2k −1
o matrice care conţine toate coloanele nenule posibile de k elemente care se pot
construi cu elemente din Z2 . Ordinea coloanelor este arbitrară, dar fixată. Coloana
i din matrice se numeşte coloana de tip i (admitem ca tipul de coloană i să fie
reprezentarea binară a numărului i). Atunci:
N = (n1 , n2 , . . . , n2k −1 )
este reprezentarea modulară a (n, k)−codului liniar, unde ni reprezintă numărul
coloanelor de tipul i care apar ı̂n matricea generatoare.
Exemplu 3.13. Considerăm n = 3, k = 2 şi matricea generatoare a codului
 
0 1 0
G= .
1 1 1
Considerăm matricea M ı̂n care trecem pe coloane reprezentarea binară a nu-
merelor 1, 2, 3:  
0 1 1
M= .
1 0 1
În matricea G avem două coloane de tipul 1, 0 de tipul 2 şi o coloană de tipul 3,
deci reprezentarea modulară a codului generat de G este N = (2, 0, 1).
Fie matricea
K2k −1 = M t · G.
Această matrice are pe linii toate cuvintele nenule ale codului.
Fie matricea pătratică simetrică
C2k −1,2k −1 = M t · M.

15
Exemplu 3.14. Pentru exemplul anterior avem:
 
1 0 1
K = M t · G = 0 1 0
1 1 1
şi 
1 1 1
C = M t · M = 0 1 0
1 0 1
Teoremă 3.7. O listă a ponderilor cuvintelor (n, k) codului liniar C se obţine prin
ı̂nmulţirea matricei de reprezentare modulară cu matricea C:
W2k −1 = N C
Demonstraţie: Considerăm matricea M = [v1 v2 . . . v2k −1 ], unde vi este matricea
coloană de tip i din matricea M . Matricea generatoare corespunzătoare reprezentării
modulare N = (n1 , . . . , n2k −1 ), n = n1 + . . . + n2k −1 , este:
n n n2k −1
z }|1 {z }|2 { z }| {
G = (v1 v1 . . . v1 v2 v2 . . . v2 . . . v2k −1 v2k −1 . . . v2k −1 )

Obţinem:
C = M t · M = [v1 v2 . . . v2k −1 ]t · [v1 v2 . . . v2k −1 ] =
v1 · v1 v1 · v2 . . . v1 · v2k −1
 
 v2 · v1 v2 · v2 . . . v2 · v2k −1 
= .
.. .
.. .. ,
 . 
v2k −1 · v1 v2k −1 · v2 . . . v2k −1 · v2k −1
unde produsele scalare sunt ı̂n Z2 .
Avem W = (wt1 , wt2 , . . . , wt2k −1 ) = (n1 , n2 , . . . , n2k −1 )C.
Prin identificare obţinem:
wti = n1 v1 vi + n2 v2 vi + . . . + n2k −1 v2k −1 vi .
Fiecare produs scalar vj vi este 0 sau 1 (deoarece toate calculele se fac ı̂n Z2 ), deci
wti este un număr natural. Afirmăm că wti este ponderea cuvântului de cod care
este pe linia i ı̂n matricea K2k −1 = M t · G. Într-adevăr,
K2k −1 = M t · G =
n n n2k −1
t }|1 }|2
= [v1 v2 . . . v2k −1 ] · (v1 v1 . . . v1 v2 v2 . . . v2 . . . v2k −1 v2k −1 . . . v2k −1 ) =
z {z { z }| {

v1 · v1 v1 · v1 . . . v1 · v2k −1
 
 v2 · v1 v2 · v1 . . . v2 · v2k −1 
= .
.. .
.. .. ,
 . 
v2k −1 · v1 v2k −1 · v1 . . . v2k −1 · v2k −1

16
prin urmare ponderea cuvântului de cod aflat pe linia i ı̂n matricea K este:
n1 v1 vi + n2 v2 vi + . . . + n2k −1 v2k −1 vi ,
ceea ce ı̂ncheie demonstraţia.
Observaţie. În cazul ı̂n care dorim să construim un cod ştiind ponderile cuvintelor
sale, deci cunoscând distanţa Hamming, obţinem: N = W · C −1 , dacă C este in-
versabilă.
Teoremă 3.8. Matricea C este nesingulară iar inversa ei se obţine ı̂nlocuind ı̂n
matricea C pe 0 cu −1 şi ı̂mpărţind toate elementele sale la 2k−1 .
Exemplu 3.15. Pentru k = 3, n = 5 avem:
1 0 1 0 1 0 1
 

  0 1 1 0 0 1 1
0 0 0 1 1 1 1 1 1 0 0 1 1 0
 
t
M = 0 1 1 0 0 1 1 , C = M M = 0 0 0 1 1 1 1 ,
   
1 0 1 0 1 0 1 1
 0 1 1 0 1 0

0 1 1 1 1 0 0
1 1 0 1 0 0 1
deci
1 −1 1 −1 1 −1 1
 
−1 1 1 −1 −1 1 1
1 1 −1 −1 1 1 −1
 
1
C −1 = −1 −1 −1 1 1 1 1 .

4  1 −1 1 1 −1 1 −1
 
−1 1 1 1 1 −1 −1
1 1 −1 1 −1 −1 1
Pentru codul ce are matricea generatoare
 
1 0 0 1 1
G = 0 1 0 1 0  ,
0 0 1 0 1
reprezentarea modulară este N = (1, 1, 0, 1, 1, 1, 0). Vectorul ponderilor este W =
N C = (2, 2, 4, 3, 3, 3, 3).
Cuvintele de cod sunt trecute pe linii ı̂n matricea K:
0 0 1 0 1
 
0 1 0 1 0 
0 1 1 1 1 
 
K = 1 0 0 1 1 
 
1 0 1 1 0 
 
1 1 0 0 1 
1 1 1 0 0

17
Observaţie. În matricea C elementul 1 apare pe fiecare linie ı̂n 2k−1 poziţii, deci ı̂n
matricea C −1 o să apară 1 pe fiecare linie ı̂n 2k−1 poziţii. Atunci, dacă presupunem
că avem un cod ı̂n care toate cuvintele au ponderi egale, notate w, obţinem:
2k −1
−1
= (w . . . w)C −1 =
z }| {
N = WC
2k −1
z }| {
−(k−1) −(k−1) −(k−1)
= (w · 2 ,w · 2 ,...,w · 2 )
Această problemă are soluţie dacă 2k−1 | w şi obţinem reprezentarea modulară
2k −1
z }| {
N = (r, r, . . . , r), adică fiecare tip de coloană apare ı̂n matricea generatoare de r ori,
unde r = w · 2−(k−1) .
MacDonald a introdus o clasă de coduri pentru care reprezentarea modulară este
de forma 0i 1j astfel:
n d N
k k−1
2 −1 2 (1, 1, . . . , 1)
2k − 2 2k−1 − 1 (0, 1, . . . , 1)
2k − 3 2k−1 − 2 (0, 0, 1 . . . , 1)
..
.
2u −1 2k −2u
z }| { z }| {
2k − 1 − 2u 2k−1 − 2u (0, 0, . . . , 0, 1, 1, . . . , 1)

18
TEORIA INFORMAŢIEI ŞI CODURI

CURS 10

Coduri ciclice

1. Coduri ciclice şi polinoame


Definiţie 1.1. Un cod ciclic este un cod liniar cu proprietatea că dacă zi = zi,1 . . . zi,n
este un cuvn̂t de cod, atunci zi,2 . . . zi,n zi,1 este cuvânt de cod.
Observaţie. Din definiţie, obţinem că orice permutare ciclică a simbolurilor unui
cuvânt de cod este un cuvânt de cod.
Exemplu 1.1. Considerăm codul liniar binar
C = {z1 = 000, z2 = 101, z3 = 011, z4 = 110}.
Codul este ciclic deoarece orice permutare circulară a simbolurilor cuvintelor z1 , . . . , z4
sunt cuvinte de cod. Într-adevăr, permutările ciclice ale simbolurilor fiecărui cuvânt
sunt:
z1 : 000
z2 : 101, 011, 110
z3 : 011, 110, 101
z4 : 110, 101, 011
În schimb, pentru codul liniar binar
C = {z1 = 000, z2 = 100, z3 = 011, z4 = 111}
avem:
z1 : 000
z2 : 100, 001, 010
z3 : 011, 110, 101
z4 : 111
avem că 001 ∈
/ C (001 s-a obţinut din permutarea ciclică a simbolurilor lui z2 ), prin
urmare codul nu este ciclic.

1
Un cuvânt de cod zi = zi,1 . . . zi,n de lungime n poate fi reprezentat sub forma
unui polinom de grad n − 1, astfel:
zi (X) = zi,1 X n−1 + zi,2 X n−2 + · · · + zi,n−1 X + zi,n
deci simbolul zi,j din zi este coeficientul lui X n−j din polinomul zi (X).
Atunci
X · zi (X) = X · (zi,1 X n−1 + zi,2 X n−2 + · · · + zi,n−1 X + zi,n ) =
= zi,1 X n + zi,2 X n−1 + · · · + zi,n−1 X 2 + zi,n X =
= zi,1 (X n − 1) + zi,2 X n−1 + · · · + zi,n−1 X + zi,n X + zi,1
Deci
X · zi (X) − (zi,2 X n−1 + · · · + zi,n−1 X + zi,n X + zi,1 ) = zi,n (X n − 1),
adică X n − 1 | X · zi (X) − (zi,2 X n−1 + · · · + zi,n−1 X + zi,n X + zi,1 ), deci
X · zi (X) ≡ (zi,2 X n−1 + · · · + zi,n−1 X + zi,n X + zi,1 )(mod X n − 1)
Dar polinomul zi,2 X n−1 + · · · + zi,n−1 X + zi,n X + zi,1 corespunde cuvântului de
cod zi,2 . . . zi,n zi,1 , obţinut din zi = zi,1 . . . zi,n printr-o permutare ciclică la stânga.
Prin urmare, multiplicarea cu X corespunde unei permutări ciclice.
Exemplu 1.2. Pentru codul binar ciclic
C = {z1 = 000, z2 = 101, z3 = 011, z4 = 110}
reprezentările polinomiale sunt:
z1 (X) = 0
z2 (X) = X 2 + 1
z3 (X) = X + 1
z4 (X) = X 2 + X
Avem X · z2 (X) = X 3 + X = X 3 − 1 + (X − 1), deci Xz2 (X) ≡ X + 1(mod X 3 − 1),
deci z3 este o permutare ciclică la stânga a lui z2 .
Propoziţie 1.1. Dacă z(X) este reprezentarea polinomială a cuvântului de cod
z de lungime n dintr-un cod ciclic, atunci pentru orice polinom p(X) avem p(X) ·
z(X)(mod X n −1) este reprezentarea polinomială a unui alt cuvânt de cod din codul
ciclic.
Demonstraţie: Deoarece codul este ciclic, pentru orice k ≥ 1 avem X k z(X) este
reprezentarea polinomială a unui cuvânt de cod (permutări ciclice la stânga ale lui
z). Cum codul ciclic este cod liniar, atunci orice combinaţie liniară a cuvintelor de
cod este un cuvânt de cod. 
Teoremă 1.1. Pentru orice (n, k)−cod liniar C există un polinom gC (X) de grad
n − k astfel ı̂ncât:
C = {gC (X) · p(X) : deg p(X) < k}.
Prin urmare, codul ciclic este generat de gC (X).
Fie C un (n, k) cod ciclic. Pentru a obţine cuvintele de cod procedăm astfel:

2
• multiplicăm mesajul u(X), deg u(X) < k cu X n−k , unde n − k este gradul
polinomului generator al codului;
• aflăm restul r(X) ı̂mpărţirii polinomului X n−k u(X) la polinomul generator
g(X);
• codăm u(X) prin z(X) = X n−k u(X) − r(X). De remarcat faptul că g(X) |
z(X), deci z ∈ C
Exemplu 1.3. Considerăm (7, 4) codul binar ciclic
z1 = 0000000, z2 = 0001011, z3 = 0010110, z4 = 0101100
z5 = 1011000, z6 = 0110001, z7 = 1100010, z8 = 1000101
z9 = 1010011, z10 = 0100111, z11 = 1001110, z12 = 0011101
z13 = 0111010, z14 = 1110100, z15 = 1101001, z16 = 1111111
Codul admite polinomul generator z2 (X) = g(X) = X 3 + X + 1. Se verifică
imediat faptul că g(X) | zi (X), pentru orice 1 ≤ i ≤ 16. Într-adevăr, avem:
z1 (X) = 0 · g(X)
z3 (X) = X 4 + X 2 + X = X · g(x),
z4 (X) = X 5 + X 3 + X 2 = X 2 · g(X)
z5 (X) = X 6 + X 4 + X 3 = X 3 · g(x),
z6 (X) = X 5 + X 4 + 1 = (1 + X + X 2 ) · g(X)
z7 (X) = X 6 + X 5 + X = (X + X 2 + X 3 ) · g(x),
z8 (X) = X 6 + X 2 + 1 = (1 + X + X 3 ) · g(X)
z9 (X) = X 6 + X 4 + X + 1 = (1 + X 3 ) · g(x),
z10 (X) = X 5 + X 2 + X + 1 = (1 + X 2 ) · g(X)
z11 (X) = X 6 + X 3 + X 2 + X = (X + X 3 ) · g(x),
z12 (X) = X 4 + X 3 + X 2 + 1 = (1 + X) · g(X)
z13 (X) = X 5 + X 4 + X 3 + X = (X + X 2 ) · g(x),
z14 (X) = X 6 + X 5 + X 4 + X 2 = (X 2 + X 3 ) · g(X)
z15 (X) = X 6 + X 5 + X 3 + 1 = (1 + X + X 2 + X 3 ) · g(x),
z16 (X) = X 6 + X 5 + X 4 + X 3 + X 2 + X + 1 = (1 + X 2 + X 3 ) · g(X)
Presupunem că se transmite mesajul u = 1101, deci u(X) = X 3 + X 2 + 1. Multi-
plicăm u(X) cu X n−k = X 7−4 = X 3 şi obţinem X 3 u(X) = X 6 + X 5 + X 3 . Împărţim
polinomul X 3 u(x) la g(X) = X 3 + X + 1 şi obţinem:
X 3 u(X) = g(X)(X 3 + X 2 + X + 1) + 1,
deci r(X) = 1. Cuvântul de cod este z(X) = X 3 u(X) − r(X) = X 6 + X 5 + X 3 + 1 =
z15 (X), adică 1101001.
Teoremă 1.2. Generatorul unui cod ciclic de lungime n este un factor al lui X n −1.

3
Demonstraţie: Fie un cod ciclic de lungime n şi g(X) polinomul generator al codului,
deg g(X) = r. Atunci X n−r · g(X) este un polinom de grad n, deci are loc:
X n−r g(X) = (X n − 1) + r(X),
unde deg r(X) < n.
Mai mult, deoarece g(X) este reprezentarea polinomială a unui cuvânt de cod de
lungime n (dintr-un cod ciclic), avem r(X) ≡ X n−r g(X)(mod X n − 1), deci r(X)
este un cuvânt de cod. Prin urmare, există polinomul p(X) astfel ı̂ncât r(X) =
g(X) · p(X). Obţinem:
X n−r g(X) = (X n − 1) + r(X) = (X n − 1) + p(X)g(X),
deci
X n − 1 = (X n−r + p(X)) · g(X),
adică g(X) este un factor al lui X n − 1. 
Teoremă 1.3. Orice factor al lui X n − 1 de grad r este polinom generator al unui
cod (n, n − r) ciclic.
Demonstraţie: Fie g(X) un factor al lui X n − 1 de grad r. Atunci polinoamele
g(X), Xg(X), . . . , X n−r−1 g(X) sunt n − r polinoame de grad mai mic decât n. Mai
mult, orice combinaţie liniară de cele n − r polinoame este polinom de grad cel
mult n − 1. Obţinem astfel că {g(X), Xg(X), . . . , X n−r−1 g(X)} este o muli̧me liniar
independentă cu n − r polinoame:
a0 g(X) + a1 Xg(X) + · · · + an−r−1 X n−r−1 g(X) = 0 ⇔

(a0 + a1 X + · · · + an−r−1 X n−r−1 )g(X) = 0,


iar cum g(X) 6= 0 obţinem că polinomul a0 + a1 X + · · · + an−r−1 X n−r−1 = 0,
deci a0 , . . . , an−r−1 = 0. Prin urmare {g(X), Xg(X), . . . , X n−r−1 g(X)} este o bază
pentru subspaţiul vectorial generat de cele n − r polinoame, deci generează un cod
(n, n − r)−liniar.
Demonstrăm că este un cod ciclic. Fie z(X) = z0 + z1 X + · · · + zn−1 X n−1
reprezentarea polinomială a unui cuvânt de cod z. Atunci
X · z(X) = z0 X + z1 X 2 + · · · + zn−1 X n =

= zn−1 (X n − 1) + zn−1 + z0 X + z1 X 2 + · · · + zn−2 X n−1


Atunci
zn−1 + z0 X + z1 X 2 + · · · + zn−2 X n−1 = X · z(X) − zn−1 (X n − 1)
În plus, z este cuvânt de cod, deci g(X) | z(X) (este o combinaţie liniară de el-
ementele bazei) şi g(X) | X n − 1 din alegerea făcută. Obţinem deci că g(X) |
zn−1 + z0 X + z1 X 2 + · · · + zn−2 X n−1 , prin urmare este reprezentarea unui cuvânt
de cod. Deci orice permutare ciclică la stânga este cuvânt de cod, adică codul este
ciclic. 

4
2. Coduri ciclice sistematice
Am văzut că pentru a defini un cod ciclic trebuie să precizăm polinomul generator,
adică orice factor al lui X n − 1. Fie g(X) = g0 + g1 X + . . . + gn−k X n−k , deg g(X) =
n − k. O matrice generatoare corespunzătoare codului ciclic este
g0 g1 . . . gn−k 0 0 ... 0
 
 0 g0 g1 . . . gn−k−1 gn−k 0 . . . 0 
G= .
 .. ..  ∈ Mk,n .
. 
0 0 ... 0 g0 g1 . . . gn−k
Exemplu 2.1. Pentru codul ciclic binar de lungime 7 cu polinomul generator
g(X) = 1 + X 2 + X 3 , o matrice generatoare este:
 
1 0 1 1 0 0 0
0 1 0 1 1 0 0
G= 0 0 1 0 1 1 0

0 0 0 1 0 1 1
Exemplu 2.2. Considerăm ı̂n Z3 [X] polinomul X 6 − 1 = (X + 1)3 (X + 2)3 . Sunt
14 posibilităţi de alegere pentru polinomul generator al unui cod ciclic. Alegem
polinomul generator g(X) = (1 + X)(2 + X) = X 2 + 2 pentru codul ciclic ((n =
6, k = 6 − 2 = 4) codul liniar ternar), prin urmare o matrice generatoare este:
 
2 0 1 0 0 0
0 2 0 1 0 0
G= 0 0 2 0 1 0

0 0 0 2 0 1
Fie X n − 1 = g(X) · h(X), g(X) = g0 + g1 X + . . . + gn−k X n−k , deg g(X) = n − k
polinomul generator al unui cod ciclic şi h(X) = h0 +h1 X +. . .+hk X k , deg h(X) = k.
Fie z(X) reprezentarea polinomială a unui cuvânt de cod, deci z(X) = p(X)g(X),
cu deg p(X) < k. Atunci:
z(X)h(X) = p(X)g(X)h(X) = p(X)(X n − 1) = p(X)X n − p(X).
Deoarece deg p(X) < k, avem că X k , X k+1 , . . . , X n−1 nu apar ı̂n scrierea polinomului
p(X)X n − p(X). Atunci
k
X
hi zn−i−j = 0, ∀1 ≤ j ≤ n − k
i=0

Considerăm X k h(X −1 ) = h0 X k +h1 X k−1 +. . .+hk−1 X +hk şi se observă faptul că
X h(X −1 ) | X n −1, deci poate fi considerat polinom generator al unui (n, n−k)−cod
k

ciclic cu matricea generatoare


hk hk−1 . . . h0 0 0 ... 0
 
0 hk hk−1 . . . h1 h0 0 ... 0 
H= .
 .. ..  ∈ Mn−k,n
.
0 0 ... 0 hk hk−1 . . . h0

5
Matricea H este matrice de control a codului ciclic generat de g(X).
Exemplu 2.3. Avem X 7 − 1 = (1 + X)(1 + X + X 3 )(1 + X 2 + X 3 ), alegem g(X) =
1 + X 2 + X 3 polinom generator pentru codul (7, 4) ciclic binar, deci h(X) = (1 +
X)(1 + X + X 3 ) = X 4 + X 3 + X 2 + 1. Atunci o matrice generatoare este
 
1 0 1 1 0 0 0
0 1 0 1 1 0 0
G= 0 0 1 0 1 1 0

0 0 0 1 0 1 1
iar o matrice de control este
 
1 1 1 0 1 0 0
H = 0 1 1 1 0 1 0
0 0 1 1 1 0 1
De remarcat că matricea generatoare nu este sub formă sistematică. Pentru a
obţine forma sistematică trebuie să alegem o altă bază pentru subspaţiul vectorial.
Fie X n − 1 = g(X) · h(X), g(X) = g0 + g1 X + . . . + gn−k X n−k , deg g(X) = n − k
polinomul generator al unui cod ciclic. Observăm că pentru orice n − k ≤ i ≤ n − 1
putem scrie
X i = g(X)p(X) + ri (X),
unde deg ri (X) < n − k = deg g(X), deci g(X) | X i − ri (X). Prin urmare putem
alege bază pentru subspaţiul vectorial mulţimea {X i − ri (X) : n − k ≤ i ≤ n − 1}.
Exemplu 2.4. Avem X 7 − 1 = (1 + X)(1 + X + X 3 )(1 + X 2 + X 3 ), alegem g(X) =
1+X 2 +X 3 polinom generator pentru codul (7, 4) ciclic binar. Pentru 7−3 ≤ i ≤ 7−1
aplicăm teorema ı̂mpărţirii cu rest:

X 3 = g(X) + (X 2 + 1), r3 (X) = X 2 + 1


X 4 = g(X)(X + 1) + (X 2 + X + 1), r4 (X) = X 2 + X + 1
X 5 = g(X)(1 + X + X 2 ) + (1 + X), r5 (X) = 1 + X
X 6 = g(X)(X + X 2 + X 3 ) + (X 2 + X), r6 (X) = X 2 + X
Deci considerăm baza formată din polinoamele
X 3 − r3 (X) = X 3 + X 2 + 1
X 4 − r4 (X) = X 4 + X 2 + X + 1
X 5 − r5 (X) = X 5 + X + 1
X 6 − r6 (X) = X 6 + X 2 + X
Matricea generatoare este
 3   
X − r3 (X) 1 0 1 1 0 0 0
X 4 − r4 (X) 1 1 1 0 1 0 0
G=  = (P | I4 )
X 5 − r5 (X) = 1
 
1 0 0 0 1 0
X 6 − r6 (X) 1 0 1 0 0 0 1

6
O matrice de control este H = (I3 | − P T ), deci
 
1 0 0 1 1 1 1
H= 0 1 0 0 1 1 0
0 0 1 1 1 0 1
Definiţie 2.1. Sindromul mesajului recepţionat ẑ relativ la o matrice de control H
este s = ẑ · H T .
În cazul ı̂n care sindromul este nenul, atunci ẑ nu este cuvânt de cod şi a apărut
o eroare. Sindromul cuvântului recepţionat ẑ(X) este restul ı̂mpărţirii lui ẑ(X) la
polinomul generator g(X). Într-adevăr, orice cuvânt de cod z(X) este un multiplu de
g(X), z(X) = g(X) · α(X). Notăm eroarea e(X) = g(X) · β(X) + s(X), deg s(X) <
deg g(X). Atunci:
z(X) + e(X) = (α(X) + β(X)) · g(X) + s(X)
Avem sindromul s(X) = 0 dacă şi numai dacă ẑ(X) este un cuvânt de cod (deci
g(X) | ẑ(X)).
Pentru a obţine corectorii corespunzători sindromurilor nenule facem ı̂mpărţirea
la g(X):
• pentru o singură eroare X i de grad i < n − k = deg g(X) sindromul este X i ;
• pentru eroarea X n−k sindromul este X n−k − g(X)
Algoritm de decodare:
• calculăm sindromul cuvântului recepţionat, sindrom ce depinde doar de eroare;
• deducem corectorul adică opusul erorii;
• aplicăm corectorul cuvântului recepţionat.
Exemplu 2.5. Considerăm (7, 4)− codul ciclic binar cu polinomul generator g(X) =
X 3 +X +1. Presupunem că s-a transmis mesajul u = 1101 ce corespunde cuvântului
de cod z = 1101001 şi cuvântul recepţionat este ẑ = 1001001, ce corespunde polino-
mului ẑ(X) = X 6 + X 3 + 1. Împărţim ẑ(X) la g(X) = X 3 + X + 1 şi obţinem:
ẑ(X) = g(X)(X 3 + X) + (X 2 + X + 1),
deci sindromul este s(X) = X 2 + X + 1.
Dar, pentru g(X) = X 3 + X + 1, avem tabelul:
corector (eroare) sindrom
1 1
X X
X2 X2
X3 X + 1 = X 3 − g(X)
X4 X + X 2 ( restul ı̂mpărţirii lui X 4 la g(X))
X5 1 + X + X 2 ( restul ı̂mpărţirii lui X 5 la g(X))
X6 1 + X 2 ( restul ı̂mpărţirii lui X 6 la g(X))
Prin urmare, pentru sindromul s(X) = X 2 + X + 1 corectorul este X 5 , deci z(X) =
ẑ(X) + X 5 = X 6 + X 5 + X 3 + 1, adică 1101001.

7
Observaţie. Dacă un cuvânt ẑ are sindromul s(x), atunci permutarea sa ciclică are
sindromul s0 (x), adică restul ı̂mpărţirii lui xs(x) la g(x)
Algoritm Meggitt pentru (n, k) codurile ciclice: Acest algoritm acţionează
asupra cuvântului recepţionat astfel: permută ciclic cuvântul, deci şi sindromul,
până când se obţine un sindrom ce corespunde erorii pe primul bit (en−1 (X) 6= 0).
Corectează eroarea şi repetă procesul până când toate erorile sunt corectate.
• se calculeză sindromurile corespunzătoare erorilor (simple) reprezentate prin
polinoame de grad n − 1;
• se determină restul ı̂mpărţirii lui ẑ(x) (cuvânt recepţionat) la g(x) (polinom
generator);
• dacă se obţine un polinom din lista de sindromuri, atunci se modifică poziţia
cea mai din stânga din cuvântul recepţionat;
• se permută ciclic cuvântul şi se reia algoritmul.
Exemplu 2.6. Considerăm (7, 4)− codul ciclic binar cu polinomul generator g(X) =
X 3 + X + 1 şi presupunem că s-a recepţionat ẑ = 1001101. Calculăm sindromul:
ẑ(X) = X 6 + X 3 + X 2 + 1 = g(X) · (X 3 + X) + (1 + X),
deci sindromul este 1+X echivalent cu 011. Conform algoritmului, eroarea pe primul
bit este X 6 , reprezentată printr-un polinom de grad n−1 = 6, şi are sindromul 1+X 2 .
Cum sindromul 1 + X e diferit de sindromul 1 + X 2 , deducem că prima poziţie a fost
recepţionată corect. Permutăm şi obţinem 0011011, adică ẑ1 (X) = X 4 +X 3 +X +1.
Calculăm restul ı̂mpărţirii noului polinom ẑ1 (X) la g(X) şi obţinem sindromul 110.
ẑ1 (X) = X 4 + X 3 + X + 1 = g(X)(X + 1) + X 2 + X
Nici acest sindrom nu se află ı̂n listă (X 2 + X 6= 1 + X 2 ), deci poziţia 2 a fost
recepţionată corect. Permutăm şi obţinem ẑ2 = 0110110. Avem
ẑ2 (X) = X 5 + X 4 + X 2 + X = g(X)(X 2 + X + 1) + X 2 + X + 1
Noul sindrom este X 2 + X + 1, adică 111. Poziţia 3 este corectă. Obţinem prin
permutare ẑ3 = 1101100 cu sindromul X 2 + 1, deci 101. Acest sindrom este ı̂n listă,
deci modificăm poziţia 4: ẑ3 = 1100100.
Permutăm şi obţinem ẑ4 = 1001001 iar sindromul este 1 (deci poziţia 5 este
corectă). Permutăm ẑ5 = 0010011 cu sindromul 010 (poziţia 6 este corectă)
Pentru ẑ6 = 0100110 sindromul este 100 (poziţia 7 este corectă).
Prin urmare, corectăm cuvântul iniţial prin modificarea poziţiei 4:
z = 1000101.
Presupunem că se trimite cuvântul z şi se recepţionează ẑ şi presupunem că erorile
au afectat j poziţii consecutive.
Propoziţie 2.1. Pentru un cod care corectează t erori independente şi corectează
j erori consecutive avem t ≤ j.
Propoziţie 2.2. Un (n, k)−cod ciclic detectează orice pachet de cel mult n − k
erori.

8
Algoritm de decodare: Considerăm C un (n, k) cod binar ciclic cu polino-
mul generator g(X), cod corector de cel mult j erori consecutive şi fie ẑ cuvântul
recepţionat.
• Se calculează sindromul s(X);
• pentru i ≥ 0 se calculează
si (X) = X i s(X)(mod g(X))
până obţinem deg(sp (X)) ≤ j, pentru un p ≥ 0. Atunci eroarea este e(X) =
X n−p sp (X)(mod X n − 1) şi se corectează ẑ(X) + e(X).
Exemplu 2.7. Considerăm n = 15, polinomul generator g(x) = 1+x4 +x6 +x7 +x8 .
Avem un cod (15, 7)− ciclic binar ce are dmin = 5 şi corectează cel mult t = 2 erori.
Recepţionăm cuvântul ẑ = 111100100011111, deci ẑ(X) = X 14 + X 13 + X 12 + X 11 +
X 8 + X 4 + X 3 + X 2 + X + 1.
• Calculăm sindromul: ẑ(X) = (X 6 +X 3 +X)g(X)+(X 6 +X 5 +X 4 +X 2 +1),
unde s(X) = X 6 + X 5 + X 4 + X 2 + 1.
• Avem s1 (X) = Xs(X)(mod g(X)) = X 7 + X 6 + X 5 + X 3 + X, şi s2 (X) =
X 2 s(X)(mod g(X)) = 1 + X 2 . Cum deg(s2 (X)) = 2 = t, obţinem eroarea
tip e = X 15−2 s2 (X) = X 15 + X 13 şi e = X 13 + 1(mod X 15 − 1), deci e =
0010000000001. Corectăm cuvântul prin
ẑ + e = 111100100011111 + 0010000000001 = 110100100011110.

9
TEORIA INFORMAŢIEI ŞI CODURI

CURS 11

Clase de coduri ciclice

1. Teorie Galois
Definiţie 1.1. Un corp finit cu p elemente se notează cu GF (p) şi se numeşte corp
q ori
z }| {
Galois. Un corp are caracteristică q dacă 1 + 1 + . . . + 1= 0 şi q este cel mai mic cu
această proprietate.
Exemplu 1.1. În GF (2) avem 1 + 1 = 0, deci GF (2) este corp de caracteristică 2.
Asemănător obţinem GF (3) are caracteristică 3. Precizăm operaţiile de adunare şi
de ı̂nmulţire:
+ 0 1 · 0 1
0 0 1 0 0 0
1 1 0 1 0 1

iar pentru GF (3) avem:


+ 0 1 2 · 0 1 2
0 0 1 2 0 0 0 0
1 1 2 0 1 0 1 2
2 2 0 1 2 0 2 1
Nu putem să construim GF (4) asemănător, ci va fi construit ca GF (22 ).
Teoremă 1.1. Caracteristica unui corp este un număr prim.
Demonstraţie: Fie q caracteristica corpului şi presupunem că nu este număr prim,
deci q = a · b. Avem:
q ab a b
! b a
!
X X X X X X
1= 1= 1 1 = 1 1 = 0,
i=1 i=1 i=1 j=1 i=1 j=1
a
P b
P
implică fie 1 = 0, fie 1 = 0. Obţinem o contradicţie cu minimalitatea lui q,
i=1 j=1
deci q trebuie să fie număr prim. 
Definiţie 1.2. Fie α un element nenul din GF (p). Ordinul lui α este n dacă αn = 1
şi αk 6= 1, pentru orice 1 ≤ k ≤ n − 1.

1
Exemplu 1.2. În GF (3) avem 11 = 1, deci ord(1) = 1, iar 22 = 1 (21 = 2), deci
ord(2) = 2.
Propoziţie 1.1. În GF (p) au loc:
• orice element nenul este de ordin finit;
• dacă ord(α) = n, atunci α, α2 , . . . , αn−1 sunt elemente distincte din GF (p);
• dacă αk = 1, atunci ord(α) | k.
Teoremă 1.2. Dacă α ∈ GF (p) este element nenul, atunci αp−1 = 1.
Teoremă 1.3. Dacă α ∈ GF (p) element nenul, atunci ord(α) | p − 1.
Demonstraţie: Presupunem că ord(α) - p − 1, deci p − 1 = k · ord(α) + r, cu 0 < r <
ord(α), din teorema ı̂mpărţirii cu rest. Atunci
αp−1 = αk·ord(α)+r = αk·ord(α) · αr .
Cum αp−1 = 1 şi αord(α) = 1, obţinem:
1 = 1k · αr ,
deci αr = 1, contradicţie cu minimalitatea ord(α). Presupunerea făcută este falsă,
deci ord(α) | p − 1. 
Definiţie 1.3. Orice element α din GF (p) cu proprietatea că ord(α) = p − 1 se
numeşte element primitiv ı̂n GF (p).
Exemplu 1.3. În GF (3) avem ord(2) = 2 = 3 − 1, deci 2 este element primitiv.
Observaţie. În GF (p) dacă α este element primitiv (deci ord(α) = p − 1, adică
αp−1 = 1 şi p − 1 este cel mai mic cu această proprietate), atunci GF (p) =
{0, α, α2 , . . . , αp−1 }.
Definiţie 1.4. Fie f un polinom cu coeficienţi ı̂n corpul finit GF (p) ı̂n variabila X.
• Dacă β ∈ GF (p) are proprietatea că f (β) = 0, atunci β este rădăcină a lui
f şi X − β | f
• Spunem că f este ireductibil dacă singurii factori ai lui f sunt 1 şi f (deci
nu poate fi descompus ı̂n produs de polinoame de grade mai mici).
Propoziţie 1.2. Dacă α1 , . . . , αn ∈ GF (p) sunt rădăcinile distincte ale lui f ∈
GF (p)[X], atunci:
f (X) = (X − α1 ) · · · (X − αn ).
Exemplu 1.4. În GF (2)[X] polinomul f (X) = X 3 +1 are proprietatea că f (1) = 0,
deci X 3 − 1 = (X − 1)(X 2 + X + 1) şi X 2 + X + 1 este ireductibil.
Propoziţie 1.3. Dacă α ∈ GF (p) are ord(α) = n, atunci
X n − 1 = (X − α)(X − α2 ) · · · (X − αn )
Propoziţie 1.4. Orice polinom ireductibil de grad m cu coeficienţi ı̂n GF (p) divide
m
polinomul X p −1 − 1.

2
Exemplu 1.5. În GF (2) polinomul f (X) = X 2 + X + 1 este ireductibil de grad
m
m = 2, deci divide polinomul X p −1 − 1 = X 3 − 1.
Definiţie 1.5. Un polinom ireductibil f de grad m cu coeficienţi ı̂n GF (p) se
numeşte primitiv dacă cea mai mică valoare a lui n pentru care f | X n − 1 este
n = pm − 1.
Cu alte cuvinte, deşi toate polinoamele ireductibile divid pe X n − 1, unde n =
p − 1, sunt polinoame care divid pe X n − 1, cu n < pm − 1 şi acestea nu sunt
m

primitive.
4
Exemplu 1.6. Polinomul f (X) = 1 + X + X 4 este ireductibil, deci f (X) | X 2 −1 −
1 = X 15 − 1. Se poate demonstra că pentru orice n < 15, f - X n − 1, deci f este
primitiv.
Polinomul g(X) = 1 + X + X 2 + X 3 + X 4 este ireductibil, deci g | X 15 − 1. Dar
g | X 5 − 1, deci g nu este primitiv.
Teoremă 1.4. Orice polinom ireductibil de grad m ı̂n GF (p) are rădăcini ı̂n GF (pm )
de acelaşi ordin.
Deci dacă f (X) este un polinom de grad m ireductibil ı̂n GF (p) şi f (α1 ) =
f (α2 ) = 0 ı̂n GF (pm ), atunci ord(α1 ) = ord(α2 ).
Teoremă 1.5. Polinoamele primitive de grad m din GF (p) au rădăcini ı̂n GF (pm )
de ordin pm − 1. Prin urmare, dacă f este polinom primitiv ı̂n GF (p) şi f (α) = 0
ı̂n GF (pm ), atunci ord(α) = pm − 1.
m
Demonstraţie: Fie f | X p −1 − 1 şi α o rădăcină a lui f ı̂n GF (pm ). Atunci α este
m m m
o rădăcină pentru X p −1 − 1, deci αp −1 − 1 = 0, adică αp −1 = 1. Am obţinut
deci că ord(α) | pm − 1. Atunci toate rădăcinile lui X ord(α) − 1 sunt rădăcini pentru
m m
X p −1 − 1, deci X ord(α) − 1 | X p −1 − 1.
Mai mult, f este polinom primitiv, deci este ireductibil ı̂n GF (p). Atunci toate
rădăcinile sale au acelaşi ordin, deci
m −1
f | X ord(α) − 1 | X p − 1.
Cum f este primitiv, f | X n − 1, unde n = pm − 1 este cel mai mic posibil cu această
proprietate. Prin urmare, ord(α) = pm − 1. I 
Dacă α este o rădăcină a lui f ı̂n GF (pm ) şi ord(α) = pm − 1, atunci GF (pm ) =
m
{0, α, α2 , . . . , αp −1 }.
Exemplu 1.7. Polinomul f (X) = X 2 + X + 1 este polinom primitiv ı̂n GF (2) de
grad m = 2. Prin urmare, rădăcinile sale ı̂n GF (4) au ordin pm − 1 = 22 − 1 = 3
(p = 2, m = 2). Fie α o rădăcină a lui f (X), deci f (α) = 0 adică 1 + α + α2 = 0.
Obţinem α2 = α + 1. Atunci:
α3 = α2 + α = α + 1 + α = 1.
Deci GF (22 ) = GF (4) = {0, 1, α, α2 = α + 1} = {0, α, α2 = α + 1, α3 }.

3
Exemplu 1.8. Polinomul f (X) = X 3 + X + 1 este polinom primitiv ı̂n GF (2) de
grad m = 3. Fie α o rădăcină a lui f (X), deci f (α) = 0 adică 1 + α + α3 = 0.
Obţinem α3 = α + 1. Atunci:
α4 = α2 + α
α5 = α3 + α2 = α + 1 + α2
α6 = α3 + α2 + α = α + 1 + α2 + α = α2 + 1
α7 = α3 + α = α + 1 + α = 1
Deci GF (23 ) = GF (8) = {0, 1, α, α2 , α3 = α + 1, α4 = α2 + α, α5 = α2 + α, α6 =
α2 + 1}. De remarcat că αx = αx(mod 7) , de exemplu α8 = α8(mod 7) = α. Într-adevăr
avem α8 = α6 α2 = α2 (α2 + 1) = α4 + α2 = α.
Definiţie 1.6. Fie α ∈ GF (pm ). Polinomul minimal al lui α relativ la GF (p) este
polinomul nenul de grad minim p(X) ∈ GF (p)[X] cu proprietatea că p(α) = 0 ı̂n
GF (pm ).
Propoziţie 1.5. Pentru orice α element din GF (pm ) există un unic polinom nenul
p(X) de grad minim ı̂n GF (p)[X] cu proprietăţile:
• p(α) = 0;
• gradul polinomului p(X) este cel mult egal cu m;
• dacă f (α) = 0, atunci p(X) | f (X);
• p(X) este ireductibil ı̂n GF (p)[X].
Pentru un element β ∈ GF (pm ), elementele conjugate relativ la GF (p) sunt
2 3
β, β p , β p , β p , . . .. Mulţimea formată dintr-un element β şi elementele conjugate
formează clasa de conjugare a lui β. Clasa de conjugare a lui β ∈ GF (pm ) relativ
d
la GF (p) conţine d elemente, unde β p = β este primul element din secvenţă care
d−1
se repetă şi d | m, deci {β, β p , . . . , β p } este clasa de conjugare a lui β.
Exemplu 1.9. Am văzut că
GF (23 ) = GF (8) = {0, 1, α, α2 , α3 = α + 1, α4 = α2 + α, α5 = α2 + α, α6 = α2 + 1}.
Fie β = α6 . Clasa de conjugare a lui β = α6 conţine β, β 2 , β 4 , β 8 , . . .
β 2 = α12 = α12(mod 7) = α5 ,
β 4 = α24 = α24(mod 7) = α3
β 8 = α48 = α48(mod 7) = α6 = β
3
Deci d = 3 (β 2 = β) şi clasa de conjugare a lui β = α6 este {β, β 2 , β 4 , β 8 } =
{α6 , α5 , α3 }. Se poate arăta că clasele de conjugare ale lui β = α5 şi β = α3 sunt
{α6 , α5 , α3 }, iar clasa de conjugare a lui β = α este {α, α2 , α4 }. În plus, clasa de
conjugare a lui β = 1 este {1}.
Propoziţie 1.6. Fie β ∈ GF (pm ) şi p(X) polinomul minimal relativ la GF (p).
Rădăcinile lui p(X) sunt elementele conjugate ale lui β relativ la GF (p).

4
Prin urmare, dacă p(X) este polinomul minimal de grad m relativ la GF (p) şi
β ∈ GF (pm ) este o rădăcină, atunci:
d−1
p(X) = (X − β)(X − β 2 ) · · · (X − β p )
Exemplu 1.10. Polinomul minimal al lui α, α2 , α4 ı̂n GF (8) relativ la GF (2) este:
p(X) = (X − α)(X − α2 )(X − α4 ) =
= X 3 − (α + α2 + α4 )X 2 + (α3 + α5 + α6 )X − α7 =
= X 3 + X + 1.
Observaţie. Polinomul X n − 1 are n rădăcini, β1 , . . . , βn cu proprietatea că ord(βi ) |
n. Mai exact, dacă n = pm − 1, atunci toate cele pm − 1 rădăcini au proprietatea
că ordinul fiecărei rădăcini divide pm − 1. Toate cele pm − 1 elemente nenule ale
lui GF (pm ) au proprietatea că ordinul fiecărui element divide pm − 1. Prin urmare,
toate rădăcinile lui X n − 1, unde n = pm − 1 sunt toate elementele nenule ale lui
GF (pm ). Cum fiecare element nenul din GF (pm ) are asociat un polinom primitiv,
m
atunci X p −1 − 1 poate fi scris ca produsul polinoamelor minimale ale lui GF (pm ).
Exemplu 1.11. Considerăm ı̂n GF (2) polinomul X 15 − 1, deci n = pm − 1, n = 15,
p = 2, m = 4, cu 15 rădăcini, fiecare având ordin ce divide pe 15. Toate elementele
nenule ale lui GF (16) au ordine ce divid pe 15. Prin urmare, X 15 − 1 poate fi scris
ca un produs de polinoamele minimale ale lui GF (16).
GF (16) este o extensie a lui GF (2). Un polinom primitiv pe care putem sa-l
folosim pentru a defini GF (16) este X 4 + X + 1. Atunci elementul primitiv α este
definit de α4 = α + 1. Avem:
α5 = α2 + α
α6 = α3 + α2
α7 = α4 + α3 = α3 + α + 1
α8 = α4 + α2 + α = α2 + 1
α9 = α3 + α
α10 = α4 + α2 = α2 + α + 1
α11 = α3 + α2 + α
α12 = α4 + α3 + α2 = α3 + α2 + α + 1
α13 = α4 + α3 + α2 + α = α3 + α2 + 1
α14 = α4 + α3 + α = α3 + 1
α15 = α4 + α = 1.
Listăm toate clasele de conjugare din GF (16) şi polinoamele minimale corespunzătoare:
clase de conjugare polinom minimal
{1} X +1
{α, α , α4 , α8 }
2 4
X +X +1
{α3 , α6 , α12 , α9 } X4 + X3 + X2 + X + 1
{α5 , α10 } X2 + X + 1
{α , α14 , α13 , α11 }
7
X4 + X3 + 1

5
Prin urmare:
X 15 − 1 = (X + 1)(X 4 + X + 1)(X 4 + X 3 + X 2 + X + 1)(X 2 + X + 1)(X 4 + X 3 + 1)

2. Coduri BCH(Bose–Chaudhuri–Hocquenheim)

Coduri BCH(Bose–Chaudhuri–Hocquenheim): reprezintă cea mai impor-


tantă clasă de coduri ciclice, fiind introduse concomitent de Bose şi Chaudhuri şi de
Hocquenheim. Numele codului a fost dat de Peterson, care a construit un algorim
de decodificare
Definiţie 2.1. Fie q număr prim, m0 , m, s ∈ N şi α ∈ GF (q s ). Un cod ciclic BCH
este un cod ciclic definit de rădăcinile polinomului generator αm0 , αm0 +1 , . . . αm0 +m−1 .
Observaţie. • În codurile studiate m0 = 0 sau m0 = 1.
• lungimea cuvintelor de cod este egală cu ordinul rădăcinii α
(αm0 )n = αm0 n = 1, (αm0 +i )n = α(m0 +i)n = 1
Un cod BCH este spaţiul nul al matricei H:
(αm0 )n−1 (αm0 )n−2 (αm0 )
 
... 1
 (αm0 +1 )n−1 (αm0 +1 )n−2 ... (αm0 +1 ) 1
 .. 
.
 
H= =
 
 (αm0 +i )n−1 (αm0 +i )n−2 . . . (αm0 +i ) 1
 .. 
 . 
(αm0 +m−1 )n−1 (αm0 +m−1 )n−2 . . . (α m0 +m−1
) 1
 n−1
αn−2

α ... α 1
 (α2 )n−1 (α2 )n−2 . . . (α2 ) 1
 .. 
.
 
=  i n−1 ,
 
 (α ) (αi )n−2 . . . (αi ) 1
 .. 
 . 
m n−1
(α ) (αm )n−2 . . . (αm ) 1
În ultima matrice am considerat cazul m0 = 1 (folosit ı̂n aplicaţii). Folosind această
matrice se demonstrează că:
Teoremă 2.1. Într-un cod BCH definit de rădăcinile polinomului generator αm0 ,
αm0 +1 , . . . αm0 +m−1 , α ∈ GF (q s ), distanţa minimă a codului este dmin ≥ m + 1.
Exemplu 2.1. Codul (23, 12) Golay poate fi construit din β = α89 , unde α ∈
GF (211 ) element primitiv. Pentru un cod BCH considerăm polinomul minimal al
lui β cu rădăcinile β, β 2 , β 4 , β 8 , β 16 , β 9 , β 18 , β 13 , β 3 , β 6 , β 12 obţinute prin ridicări suc-
cesive la pătrat şi considerând β 23 = β 2047 = 1. E clar că avem patru rădăcini

6
consecutive: β, β 2 , β 3 , β 4 , deci dmin ≥ 4 + 1 = 5 dacă alegem g(X) polinomul min-
imal al lui β cu cele 11 rădăcini scrise. Obţinem astfel (23, 12) codul Golay cu
d ≥ 5.

Decodificare codurilor BCH binare


Considerăm un cod BCH cu m rădăcini consecutive şi distanţa minimă d = 2t +
1 = m + 1, ceea ce permite corectarea a t erori.
Presupunem că s-au produs t erori şi calculăm sindromurile St ı̂nmulţind cuvântul
recepţionat cu matricea de control H T . De fapt, sindromurile se obţin ı̂nmulţind
cuvântul recepţionat ẑ cu fiecare coloană din H T , deci cu fiecare linie din H. Pentru
codurile BCH liniile din H conţin
(αi )n−1 (αi )n−2 . . . (αi )2 (αi )1 1,
pentru m0 ≤ i ≤ m0 + m − 1, echivalent cu
(αn−1 )i (αn−2 )i . . . (α2 )i (α1 )i 1i , m0 ≤ i ≤ m0 + m − 1.
Cele t erori produse ı̂n coloanele corespunzătoare lui αj1 , . . . , αjt produc sindromurile
Si = (αj1 )i + (αj2 )i + (αjt )i .
Notăm αjk = Xk şi numim identificatorul poziţiei erorii deoarece dacă ştim valoarea
Xk , atunci ştim coloana din H de care aparţine, deci ştim poziţia erorii. Atunci:
t
X
Si = Xki , ∀m0 ≤ i ≤ m0 + m − 1 (1)
k=1

Sindromul se determină din cuvântul recepţionat, deci sunt m = 2t ecuaţii neliniare


ı̂n (1) din care trebuie să aflăm cele t valori Xk , 1 ≤ k ≤ t. De menţionat că
pentru m0 = 1, atunci S2j = Sj2 , pentru orice 1 ≤ j ≤ m2 . Prin urmare, putem să
transformăm sistemul (1) neliniar ı̂ntr-unul liniar astfel: presupunem că Xi , 1 ≤ i ≤
t sunt cele t rădăcini ale ecuaţiei:
f (x) = 0, f (x) = xt + f1 xt−1 + . . . + ft−1 x + ft . (2)
Atunci Xit + f1 Xit−1 + . . . + ft−1 Xi + ft = 0, iar dacă ı̂nmulţim cu Xij , 1 ≤ j ≤ t şi
adunăm după 1 ≤ i ≤ t, obţinem:
St+j + f1 St+j−1 + . . . + ft−1 Sj+1 + ft Sj = 0, 1 ≤ j ≤ t. (3)
Din aceste ecuaţii se determină f1 , . . . ft , deci rădăcinile Xi ale ecuaţiei (2) f (x) = 0.
Algoritm:
Pas 1 se determină cele m = 2t sindromuri corespunzătoare rădăcinilor consecutive;
Pas 2 se rezolvă
St+j + f1 St+j−1 + . . . + ft−1 Sj+1 + ft Sj = 0, 1 ≤ j ≤ t. (3)
şi se determină f1 , . . . , ft ;

7
Pas 3 se ı̂nlocuiesc f1 , . . . , ft ı̂n
f (x) = 0, f (x) = xt + f1 xt−1 + . . . + ft−1 x + ft . (2)
şi se determină rădăcinile Xi (deci poziţiile erorilor.)
Pas 4 se identifică coloanele matricei H unde au apărut erori (din valorile Xi ) şi se
corectează cuvântul.
Observaţie. La pasul 2, dacă matricea corespunzătaore sistemului
St+j + f1 St+j−1 + . . . + ft−1 Sj+1 + ft Sj = 0, 1 ≤ j ≤ t. (3)
este nesingulară (are determinantul nenul), atunci s-au produs t erori. Dacă matricea
este singulară, atunci s-au produs s < t erori.
Exemplu 2.2. Considerăm (15, 5) codul liniar cu polinomul generator
g(x) = (x4 + x + 1)(x4 + x3 + x2 + x + 1)(x2 + x + 1)
d = 7, dat de rădăcinile consecutive α, α2 , α3 , α4 , α5 , α6 , unde α ∈ GF (24 ) rădăcină
pentru x4 + x + 1 = 0. Reamintim polinoamele minimale:
clase de conjugare polinom minimal
{1} X +1
{α, α , α4 , α8 }
2 4
X +X +1
{α3 , α6 , α12 , α9 } X4 + X3 + X2 + X + 1
{α5 , α10 } X2 + X + 1
{α , α14 , α13 , α11 }
7
X4 + X3 + 1
Codul corectează t = 3 erori, dar presupunem că s-au produs doar două erori, mai
precis 001000010000000. Avem:
 14 
α α13 α12 α11 α10 α9 α8 α7 α6 α5 α4 α3 α2 α1 1
12
H= α α9 α6 α3 1 α12 α9 α6 α3 1 α12 α9 α6 α3 1 
α10 α5 1 α10 α5 1 α10 α5 1 α10 α5 1 α10 α5 1
Am omis liniile din H care reprezintă alte linii ridicate la pătrat, fapt ce nu influenţează
ortogonalitatea lui H. Determinăm sindromurile S1 , S3 , S5 , iar S2 = S12 , S4 = S22 ,
S6 = S32 :
S1 = α12 + α7 = α2

S2 = S12 = α4

S3 = α6 + α6 = 0

S4 = S22 = α8

S5 = 1 + α5 = α10

S6 = S32 = 0

8
Am folosit puterile lui α, α4 = α + 1, listate ı̂n tabelul:
α3 α2 α 1
1 0 0 0 1
α 0 0 1 0
α2 0 1 0 0
α3 1 0 0 0
α4 0 0 1 1
α5 0 1 1 0
α6 1 1 0 0
α7 1 0 1 1
α8 0 1 0 1
α9 1 0 1 0
α10 0 1 1 1
α11 1 1 1 0
α12 1 1 1 1
α13 1 1 0 1
α14 1 0 0 1
Rezolvăm sistemul
S3+j + f1 S2+j + f2 Sj+1 + f3 Sj = 0, 1 ≤ j ≤ 3
echivalent cu 
S3 f1 + S2 f2 + S1 f3 + S4 = 0
S4 f1 + S3 f2 + S2 f3 + S5 = 0
S f + S f + S f + S = 0
5 1 4 2 3 3 6

Matricea sistemului are determinantul:


S3 S2 S1 0 α4 α2
∆ = S4 S3 S2 = α8 0 α4 = 0,
S5 S4 S3 α10 α8 0
deci s-au produs mai puţin de 3 erori.
Prin urmare, ı̂ncercăm să rezolvăm sistemul
S2+j + f1 S1+j + f2 Sj = 0, 1 ≤ j ≤ 4
echivalent cu 
S f + S1 f2 + S3 =0
 2 1


S3 f1 + S2 f2 + S4 =0
S4 f1 + S3 f2 + S5
 =0
S f + S f + S =0
5 1 4 2 6

Observăm că din primele două ecuaţii avem:


S2 S1 α4 α2
∆= = = α8 ,
S3 S2 0 α4

9
deci s-au produs 2 erori. Prin urmare:
S3 S1 0 α2
S4 S2 α8 α4 α10
f1 = = = 8 = α2
∆ ∆ α
S2 S3 α4 0
S3 S4 0 α8 α12
f2 = = = 8 = α4
∆ ∆ α
Se verifică şi ecuaţiile
S4 f1 + S3 f2 + S5 = 0, S5 f1 + S4 f2 + S6 = 0.
Determinăm rădăcinile X1 , X2 ale ecuaţiei x2 +f1 x+f2 = 0, adică x2 +α2 x+α4 =
0. Se observă că rădăcinile sunt X1 = α7 şi X2 = α12 , deci am obţinut poziţiile
erorilor. Prin urmare avem 001000010000000.
Observaţie. În cazul ı̂n care am fi presupus că s-a produs o singură eroare, atunci
trebuia să rezolvăm sistemul
S1+j + f1 Sj = 0, 1 ≤ j ≤ 5,
sistem ce conducea la f1 = α2 , dar care nu verifica toate ecuaţiile.
Decodificarea codurilor BCH nebinare
În acest caz se procedează asemn̆ător, de data aceasta sindromul devine
t
X
Si = Yk Xki , m0 ≤ i ≤ m0 + m − 1. (1),
k=1

unde Yk este valoarea celei de-a k erori, identificatorul erorii fiind Xk . Ca ı̂nainte,
valorile Xk se determină dintr-un sistem de ecuaţii liniare, unde Xk sunt rădăcinile
ecuaţiei f (x) = 0, unde
f (x) = Xkt + f1 Xkt−1 + . . . + ft−1 Xk + ft .
De data aceasta, ı̂nmulţim cu Yk Xkj şi ı̂nsumăm după 1 ≤ k ≤ t pentru a obţine
Sj+t + f1 Sj+t−1 + f2 Sj+t−2 + . . . + ft−1 Sj+1 + ft Sj = 0.
Se rezolvă sistemul, se determină f1 , . . . , ft , se ı̂nlocuiesc ı̂n f (x) = 0 şi se află
X1 , . . . , Xt . Cu aceste valori determinate şi cu Si cunoscute, ı̂nlocuim ı̂n
t
X
Si = Yk Xki , m0 ≤ i ≤ m0 + m − 1. (1)
k=1

şi determinăm Yk , deci valorile erorilor.


Algoritm:
t
Yk Xki ;
P
• Se calculează sindromurile Si , 1 ≤ i ≤ 2t care vor verifica Si =
k=1

10
• Se determină coeficienţii f1 , . . . , ft ai lui f (x), unde f (x) este polinomul
care are ca rădăcini Xk , ce identifică eroarea pe poziţia k, prin rezolvarea
sistemului
Sj+t + f1 Sj+t−1 + f2 Sj+t−2 + . . . + ft−1 Sj+1 + ft Sj = 0;
• Se determină rădăcinile X1 , . . . , Xt ale lui f (x). Dacă Xk = αki , atunci
eroarea este ı̂n poziţia (n − ki ) din cuvântul de cod, citind de la stânga.
t
Yk Xki scriind matricea sistemului şi calculând
P
• Se determină Yk din Si =
k=1
inversa.

Coduri Reed-Solomon
Definiţie 2.2. Un cod RS este un cod BCH de polinom generator
g(x) = (x − αm0 )(x − αm0 +1 ) · · · (x − αm0 +m−1 ) ∈ GF (q s )[x]
unde α ∈ GF (q s ) element primitiv.
Observaţie. La codurile BCH cuvintele de cod sunt vectori din Znq , iar la codurile
RS sunt vectori din GF (q s )n
Teoremă 2.2. Distanţa minimă a unui cod RS este d = n − k + 1, unde n = 2s − 1,
k = n − deg g(x).
Exemplu 2.3. Fie GF (23 ) generat de rădăcina α a polinomului 1 + x + x3 . Con-
siderăm codul RS definit de polinomul
g(x) = (x − 1)(x − α)(x − α2 )(x − α3 ) = x4 + α2 x3 + α5 x2 + α5 x + α6 .
Codul are lungimea n = 7 = 23 − 1, k = 3 = 7 − deg(g(x)) şi distanţa minimă
d = n − k + 1 = 5. Construim o matrice generatoare de forma:
 
1 0 0 α α3 α6 α6
G = 0 1 0 1 α 4 α 2 α 
0 0 1 α2 α5 α5 α6
Pentru a obţine cuvintele de cod ı̂nmulţim toate cuvintele din GF (23 )3 cu G.
O matrice de control este
 
α 1 α2 1 0 0 0
α 3 α4 α5 0 1 0 0
H= α 6

α2 α5 0 0 1 0
α6 α α6 0 0 0 1
Observaţie. Putem să reprezentăm elementele din GF (23 ) sub forma unor triplete
(α2 α 1) astfel:
α3 = α + 1 (011)
4 2
α =α +α (110)
5 2
α =α +α+1 (111)

11
α6 = α2 + 1 (101)
deci putem să scriem cuvintele de cod astfel:
(1 α 0 0 α2 α4 1) = (001 010 000 000 100 110 001)
Presupunem că s-a recepţionat
(1 α α5 0 α6 α4 1) = (001 010 111 000 101 110 001),
deci s-au produs două erori. Calculăm sindromurile unde folosim matricea de control
sub forma (am presupus m0 = 0)
 
1 1 1 1 1 1 1
α6 α5 α4 α3 α2 α 1
H= α5 α3 α α6 α4 α2 1

α4 α α5 α2 α6 α3 1
Obţinem astfel:
S1 = 1 + α + α5 + α6 + α4 + 1 = α2 + α = α4
S2 = α 6 + α 6 + α 2 + 0 + α + α 5 + 1 = 0
S3 = α5 + α4 + α6 + 0 + α3 + α6 + 1 = α + 1 = α3
S4 = α 4 + α 2 + α 3 + 0 + α 5 + 1 + 1 = α 2 + α = α 4 .
Cum am presupus că s-au produs două erori, rezolvăm direct sistemul dat de

S3 = f1 S2 + f2 S1
S4 = f1 S3 + f2 S2
Avem ∆ = S22 − S1 S3 = 0 + α7 = 1, deci putem să determinăm f1 şi f2

S3 S1 0 α4
S4 S2 α4 04 α8
f1 = = = = α8 = α
∆ ∆ 1
S2 S3 0 α3
S3 S4 α3 α4 α6
f2 = = = = α6 = 1 + α2 .
∆ ∆ 1
Pentru a determina poziţiile erorilor rezolvăm f (x) = x2 + f1 x + f2 = 0, adică
x2 + αx + (α2 + 1) = 0. Soluţiile sunt X1 = α2 , X2 = α4 , deci erorile sunt localizate
pe poziţiile 7 − 4 = 3 şi 7 − 2 = 5 de la stânga. Aflăm valorile erorilor din:
S1 = Y1 + Y2
S2 = α4 Y1 + α2 Y2
Ştim că S2 = 0, deci Y2 = α2 Y1 . Înlocuim ı̂n prima ecuaţie, S1 = α4 , deci Y1 =
α4 4
1+α2
= αα6 = α5 . Am obţinut Y1 = α5 adică (111) şi Y2 = α7 = 1, adică (001). Deci
eroarea este (000 000 111 000 001 000 000). Corectăm (001 010 111 000 101 110 001)
cu eroarea şi obţinem
(001 010 000 000 100 110 001)

12

S-ar putea să vă placă și