Documente Academic
Documente Profesional
Documente Cultură
1.1 Codificare
Definiţia 1.1 Fiind date mulţimile A (alfabetul sursă) şi B (alfabetul cod), o co-
dificare este o aplicaţie injectivă K : A → B ∗ .
Exemplul 1.1 Printre secvenţele binare de lungime 5, numărul celor care au doi
de 1 este C52 = 10. Ele pot fi folosite pentru a codifica cifrele din scrierea zecimală
(Tabelul 1.1).
Mesajul 00 17300 are codul 110001000101100. De remarcat că ı̂ntre cuvintele cod
nu se lasă nici un spaţiu, deoarece ”spaţiu” poate fi el ı̂nsusi un simbol-cod. Astfel
de exemplu, codul Morse are alfabetul B = {., −, spaţiu}.
Decodificarea se face foarte simplu: se ı̂mparte mesajul codificat ı̂n grupe de câte
cinci caractere şi se vede cifra din tabel corespunzătoare grupei respective. Repar-
tizarea cuvintelor cod a fost făcută pentru a realiza şi o decodificare pe baza unei
1
2 PRELEGEREA 1. CODIFICARE ŞI DECODIFICARE
Codificarea dată ı̂n Exemplul 1.1 este - după cum s-a observat - unic decodabilă.
Acest lucru nu este totdeauna posibil. Dacă luăm de exemplu codificarea
K(a) = 00, K(b) = 10, K(c) = 101, K(d) = 110, K(e) = 1001,
0 000 4 100
1 001 5 101
2 010 6 110
3 011 7 111
1.2. EXEMPLE DE CODURI - BLOC IMPORTANTE 3
Tabelul 1.2: Codul Morse
A . - F . . -. K - . - P . --. U . . -
B -. . . G - - . L . -. . Q - -. - V . . . -
C -. -. H . . . . M - - R . -. W . - -
D -. . I . . N - . S . . . X - . . -
E . J . - -- O - -- T - Y - . - -
Z - - . .
Exemplul 1.4 Să presupunem că vrem să construim un cod binar pentru alfabetul
{0, 1, 2, 3} şi observăm că 0 apare ı̂n mesajele sursă mai des decât orice alt simbol.
Atunci următoarea schemă de codificare pare rezonabilă:
din care rezultă construcţia. De remarcat că ea este o condiţie necesară şi suficientă
pentru construcţia codurilor instantanee.
6 PRELEGEREA 1. CODIFICARE ŞI DECODIFICARE
Teorema 1.1 Fiind dat un alfabet sursă de n simboluri şi un alfabet cod de k sim-
boluri, se poate construi un cod instantaneu cu lungimile cuvintelor cod d1 , d2 , . . . , dn
dacă şi numai dacă este verificată inegalitatea (Kraft):
Teorema 1.2 (McMillan) Orice codificare unic decodabilă satisface inegalitatea lui
Kraft.
Această sumă se poate re-ordona grupând toţi termenii de forma k −j unde j satisface
egalitatea anterioară. Cel mai mare j posibil este j = d + d + . . . + d = rd, unde
d = max{d1 , d2 , . . . , dn }.
Numărul tuturor termenilor de forma k −j din sumă este cel mult k j . Deci,
rd
X rd
X
cr ≤ k j k −j = 1 = rd.
j=1 j=1
cr cr
Deci, ≤ d, de unde va rezulta c ≤ 1 (pentru c > 1 şirul ar = → ∞, deci nu
r r
este mărginit). 2
Corolarul 1.1 Pentru orice cod unic decodabil există un cod instantaneu care are
toate cuvintele - cod de lungimi egale.
Demonstraţie: Rezultă din demonstraţia teoremei precedente.
Exemplul 1.5 Să considerăm alfabetul sursă = {a, b, c} şi alfabetul - cod
B = {0, 1}; deci n = |A| = 3, k = |B| = 2. Vrem să construim o codificare
instantanee K : A → B care are toate cuvintele - cod de lungime d. Inegalitatea
1
Kraft va da 2−d + 2−d + 2−d ≤ 1, deci 2−d ≤ . Cel mai mic d care o verifică este
3
d = 2. Deci orice mulţime de 3 secvenţe binare de lungime 2 va putea fi folosită
drept cod. Sunt 4 astfel de mulţimi:
{00, 01, 10}, {00, 01, 11}, {00, 10, 11}, {01, 10, 11}
– 0 ≤ P (ai ) ≤ 1, (1 ≤ i ≤ n);
n
X
– P (ai ) = 1.
i=1
O codificare este eficientă dacă lungimea medie a secvenţelor cod este cât mai mică.
Definiţia 1.6 Fiind dată o sursă de informaţie S şi un alfabet cod, un cod Huffman
este un cod instantaneu cu lungimea medie minimă.
Lungimea medie minimă a unui cod Huffmann se notează cu Lmin (S).
Exemplul 1.6 Să se determine un cod Huffman binar pentru alfabetul sursă A =
{a, b, c, d, e, f } ştiind că ’a’ apare de două ori mai des decât ’e’ şi ’e’ de două ori
mai des decât orice consoană.
Deci, vom avea sursa de informaţie
Simbol a b c d e f
Probabilitate 0.4 0.1 0.1 0.1 0.2 0.1
Putem asigna deci un cuvânt cod de lungime 1 lui ’a’ şi unul de lungime doi lui ’e’.
Atunci lungimile cuvintelor cod rămase sunt egale cu 4, iar inegalitatea lui Kraft
este saturată: 12 + 212 + 244 = 1. Un astfel de cod se poate construi:
K(a1 ) = 0, K(a2,3 ) = 1.
după care ”spargem” cuvântul cod 1 ı̂n două cuvinte: 10 şi 11; ı̂n acest fel se obţine
un cod Huffman pentru sursa originală:
1.4. CODURI HUFFMAN 9
a1 a2 a3
0 10 11
Tabelul 1.4:
Lema 1.1
L(K) = L(K ∗ ) + P (an−1 ) + P (an )
Demonstraţie: Fie d1 , d2 , . . . , dn−2 , d∗ lungimile cuvintelor cod corespunzătoare lui
K ∗ . Atunci lungimile cuvintelor cod pentru K sunt d1 , d2 , . . . , dn−2 , d∗ + 1, d∗ + 1.
Efectuând calculele, se obţine:
n−2
X
L(K) = di P (ai ) + (d∗ + 1)P (an−1 ) + (d∗ + 1)P (an ) =
i=1
n−2
X 2
= di P (ai ) + d∗ [P (an−1 ) + P (an )] + P (an−1 ) + P (an ) =
i=1
= L(K ∗ ) + P (an−1 ) + P (an ).
obţinută din K prin permutarea cuvintelor cod corespunzătoare lui ai şi ai+1 .
K 0 este evident un cod instantaneu, iar diferenţa dintre lungimile medii L =
Lmin (al lui K) şi L0 (al lui K 0 ) este:
Lmin − L0 = [di P (ai ) + di+1 P (ai+1 )] − [di+1 P (ai ) + di P (ai+1 )] =
= (di − di+1 )[P (ai ) − P (ai+1 )].
Această expresie este produsul dintre un număr pozitiv şi unul nenegativ, deci
Lmin ≥ L0 , iar din proprietatea de minimalitate rezultă Lmin = L0 . Cu alte
cuvinte, K 0 este un alt cod Huffman. Procedeul continuă până se obţine codul
K0 cerut.
• S admite o codificare Huffman K1 ı̂n care ultimele cuvinte cod, K1 (an−1 ) şi
K1 (an ) diferă doar prin ultimul simbol.
Fie K0 codul Huffman anterior şi K̃0 codul rezultat din K0 eliminând ultimul
simbol din K0 (an ). Lungimea medie a lui K̃0 va fi evident mai mică decât cea
a lui K0 (pentru că P (an ) > 0), deci K̃0 nu poate fi instantaneu. Cuvântul cod
K̃0 (ai ) = K0 (ai ), (1 ≤ i ≤ n − 1) nu este prefixul nici unui cuvânt cod; deci
există un i (i ≤ n − 1) astfel ı̂ncât K̃0 (an ) este prefixul lui K0 (ai ). Aceasta
este posibil numai dacă di = dn şi deci K0 (ai ) diferă de K0 (an ) numai prin
ultimul simbol. Dacă i = n − 1, se ia K1 = K0 . Altfel, se observă că di = dn
implică di = di+1 = . . . = dn ; deci se pot permuta cuvintele cod definite ı̂n K0
pentru ai şi an−1 . Codul K1 astfel obţinut are aceeaşi lungime medie ca şi K0 ,
deci este un cod Huffman.
2
1.5. EXERCIŢII 11
1.5 Exerciţii
Exerciţiul 1.1 Care este cea mai mică lungime a unui cod bloc cu alfabetul sursă
A = {A, B, . . . , Z} şi alfabetul cod B = {., −, spaţiu} (ca la codul Morse).
1 → 01 4 → 1000
2 → 011 5 → 1100
3 → 10 6 → 0111
A → 1010 D → 0001
B → 001 E → 1101
C → 101 F → 1011
Este ea unic decodabilă ? Dacă nu, găsiţi două mesaje sursă cu acelaşi cod.
0 → AA 4 → ABBAA 7 → AAAABB
1 → AABAB 5 → BABBA 8 → AAAABA
2 → ABBBBB 6 → BBBAB 9 → AAAAAB
3 → ABABA
Exerciţiul 1.6 Să se construiască un cod binar instantaneu pentru următorul al-
fabet sursă cu lungimile corespunzătoare ale cuvintelor cod:
Simbol A B C D E F G H I J K L
Lungime 2 4 7 7 3 4 7 7 3 4 7 7
Exerciţiul 1.7 Să se construiască un cod ternar (trei simboluri cod) instantaneu
pentru următorul alfabet sursă, cu lungimile corespunzătoare ale cuvintelor cod:
12 PRELEGEREA 1. CODIFICARE ŞI DECODIFICARE
Simbol 1 2 3 4 5 6 7 8 9 0
Lungime 1 3 3 3 3 3 2 2 2 2
Exerciţiul 1.8 Câte simboluri cod sunt necesare pentru ca următorul alfabet sursă
să poată fi codificat ı̂ntr-un cod instantaneu cu lungimile cuvintelor cod date:
A B C D E F G H I J K L M N O P
1 2 2 2 1 2 2 2 1 2 2 2 2 2 1 2
Exerciţiul 1.9 Demonstraţi că pentru orice cod instantaneu ı̂n care inegalitatea
Kraft este strictă, este posibil să se adauge un nou simbol sursă şi să se extindă
codul dat la un nou cod instantaneu (cu acelaşi alfabet cod). Demonstraţi aceasta
pentru codul definit la Exerciţiul 1.6.