Transcript Capitolul 2

UNIVERSITY POLITEHNICA of BUCHAREST
DEPARTMENT OF COMPUTER SCIENCE
Conf. Dr. Ing. Costin-Anton Boiangiu
<[email protected]>
Codarea Shannon-Fano
 Are avantajul simplitatii
 Suboptimal
 Se bazeaza pe teoria Shannon
1. Codul este construit astfel: mesajele sursei s(i) si probabilitatile
asociate p(i) sunt listate in ordine descrescatoare a probabilitatilor
2. Lista este divizata pentru a forma doua grupuri de probabilitati egale
3. Fiecare mesaj din primul grup receptioneaza (primeste) 0 ca prim
simbol al cuvantului de cod, iar mesajele din lista a doua vor avea
cuvintele de cod incepand cu 1
4. Fiecare din sub-listele obtinute sunt divizate dupa acelasi criteriu si se
aloca (asigneaza) simboluri suplimentare
5. Procesul se continua pana cand se obtin sub-liste cu un singur mesaj
2
Codarea Shannon-Fano
 Lungimea cuvantului de cod este
–log(p(x))
daca este posibil sa se divizeze in subgrupuri de probabilitate
egala
 Cand acest lucru nu este posibil, unele din cuvintele de cod vor
avea lungimi de
(-log(p(x)) +1)
 Codul Shannon-fano furnizeaza o lungime medie a cuvintelor
de cod ce satisface relatia :
H(S)  l  H(S)  1
3
Codarea Shannon-Fano
0
0
1
1
1
1
a
b
c
d
e
f
9
8
6
5
4
2
0
4
1
a
b
c
d
e
f
9
8
6
5
4
2
Codarea Shannon-Fano
0
0
1
1
1
1
a
b
c
d
e
f
9
8
6
5
4
2
0
0
5
1
a
b
9
8
1
c
d
e
f
6
5
4
2
Codarea Shannon-Fano
00
01
1
1
1
1
a
b
c
d
e
f
9
8
6
5
4
2
0
0
6
1
a
b
9
8
1
c
d
e
f
6
5
4
2
Codarea Shannon-Fano
00
01
1
1
1
1
a
b
c
d
e
f
9
8
6
5
4
2
0
0
7
1
1
0
1
a
b
c
d
e
f
9
8
6
5
4
2
Codarea Shannon-Fano
00
01
10
10
11
11
a
b
c
d
e
f
9
8
6
5
4
2
0
0
8
1
1
0
1
a
b
c
d
e
f
9
8
6
5
4
2
Codarea Shannon-Fano
00
01
10
10
11
11
a
b
c
d
e
f
9
8
6
5
4
2
0
0
9
1
1
a
b
9
8
0
0
1
1
c
d
6
5
e
f
4
2
Codarea Shannon-Fano
00
01
100
101
11
11
a
b
c
d
e
f
9
8
6
5
4
2
0
0
10
1
1
a
b
9
8
0
0
1
1
c
d
6
5
e
f
4
2
Codarea Shannon-Fano
00
01
100
101
11
11
a
b
c
d
e
f
9
8
6
5
4
2
0
0
11
1
1
a
b
9
8
0
0
1
1
0
1
c
d
e
f
6
5
4
2
Codarea Shannon-Fano
00
01
100
101
110
111
a
b
c
d
e
f
9
8
6
5
4
2
0
0
12
1
1
a
b
9
8
0
0
1
1
0
1
c
d
e
f
6
5
4
2
Codari Prefix Optimale
 Codari optimale
1.
Simbolurile care apar mai frecvent vor avea coduri mai scurte
2.
Ultimele 2 cele mai putin frecvente simboluri vor avea coduri de lungimi egale
 Demonstratie:
1.
Vrem sa demonstram faptul ca in acest caz codul este clar suboptimal
2.
Presupunem opusul

Fie X, Y cele mai putin frecvente simboluri si

|cod(X)| = k, |cod(Y)| = k+1
Atunci


Datorita decodificarii unice (UD), cod(X) nu poate fi prefix pt cod(Y)

Deasemenea toate celelalte coduri sunt mai scurte
Eliminand ultim bit al lui|cod(Y)| ar genera un nou cod scurt unic decodificabil, ceea ce
contrazice presupunerea initiala de optimalitate
13
Codificare Huffman
 Algoritmul Huffman ia ca intrare o lista de ponderi ne-negative {w(1), ...
,w(n) } si construieste un arbore binar complet ale carui frunze sunt
numerotate cu ponderi
 un arbore binar este complet daca fiecare nod are zero sau 2 ramificatii
 Ponderile reprezinta probabilitatile asociate simbolurilor sursei
 Initial arborele are numai doua noduri, cele corespunzatoare
ponderilor celor mai mici
 La fiecare pas in algoritm, cele mai mici ponderi definesc un nou nod
cu ponderea w(i)+w(j) si a carui radacina (root) are doi sub-arbori,
reprezentati de w(i) si w(j)
 Ponderile w(i) si w(j) sunt indepartate din lista si locul lor este
preluat de w(i)+w(j)
 Procesul continua pana cand se obtine o lista cu o singura valoare.
14
Codificare Huffman
 Algoritmul Huffman (1952) constituie un algoritm optimal, în sensul că nici un
alt algoritm nu asigură o mai mică lungime medie a cuvintelor
 Sunt situaţii în care şi alţi algoritmi pot da o lungime medie egală cu cea dată de
algoritmul Huffman, dar niciodată mai mică
 Exemplu:
Litera
Cod
Probabilitate
a
0.2
b
0.4
c
0.2
d
0.1
e
0.1
Set
Prob Set
15
Codificare Huffman

Initializare: Creeaza o multime din fiecare litera
Litera
Letter
Cod
Code
Probabilitate
Probability
Set
ProbProb
Set
Set
a
0.2
a
0.2
b
0.4
b
0.4
c
0.2
c
0.2
d
0.1
0.1
d
0.1
e
0.1
0.1
e
0.1
16
Codificare Huffman
1.
Litera
Letter
Sorteaza multimile dupa probabilitate
Cod
Code
Probabilitate
Probability
Set
ProbProb
Set
Set
a
0.2
d
a
0.1
0.2
b
0.4
e
b
0.1
0.4
c
0.2
ca
0.2
d
0.1
0.1
c
d
0.2
0.1
e
0.1
0.1
b
e
0.4
0.1
17
Codificare Huffman
2.
Insereaza prefixul ‘1’ in codurile literelor din prima
multime
Litera
Letter
Probabilitate
Probability
Set
ProbProb
Set
Set
a
0.2
d
0.1
0.1
b
0.4
e
0.1
0.1
c
0.2
a
0.2
0.1
0.1
c
0.2
0.1
0.1
b
0.4
d
e
Cod
Code
1
18
Codificare Huffman
3.
Insereaza prefixul ‘0’ in codurile literelor din a doua
multime
Litera
Letter
Cod
Code
Probabilitate
Probability
Set
ProbProb
Set
Set
a
0.2
d
0.1
0.1
b
0.4
e
0.1
0.1
c
0.2
a
0.2
d
d
11
0.1
0.1
cc
0.2
0.2
e
e
0
0.1
0.1
b
b
0.4
0.4
19
Codificare Huffman
4.
Litera
Letter
Uneste primele 2 multimi
Cod
Code
Probabilitate
Probability
Set
ProbProb
Set
Set
a
0.2
de
d
0.2
0.1
b
0.4
a
e
0.2
0.1
c
0.2
ac
0.2
d
11
0.1
0.1
d
c
0.4
0.2
e
0
0.1
0.1
b
0.4
20
Codificare Huffman
1.
Sorteaza crescator multimile dupa probabilitate
Litera
Cod
Probabilitate
Set
Prob Set
a
0.2
de
0.2
b
0.4
a
0.2
c
0.2
c
0.2
b
0.4
d
1
0.1
e
0
0.1
21
Codificare Huffman
2.
Insereaza prefixul ‘1’ in codurile literelor din prima
multime
Litera
Letter
Cod
Code
Probabilitate
Probability
Set
ProbProb
Set
Set
a
0.2
de
0.2
b
0.4
a
0.2
c
0.2
c
0.2
b
0.4
d
11
1
0.1
0.1
e
10
0
0.1
0.1
22
Codificare Huffman
3.
Insereaza prefixul ‘0’ in codurile literelor din a doua
multime
Litera
Letter
Probabilitate
Probability
Set
ProbProb
Set
Set
0.2
de
0.2
b
0.4
a
0.2
c
0.2
c
0.2
b
0.4
a
Cod
Code
0
d
11
11
0.1
0.1
e
10
10
0.1
0.1
23
Codificare Huffman
4.
Litera
Letter
Uneste primele 2 multimi
Probabilitate
Probability
Set
ProbProb
Set
Set
0.2
dea
de
0.4
0.2
b
0.4
ac
0.2
c
0.2
b
c
0.4
0.2
b
0.4
a
Cod
Code
0
d
11
11
0.1
0.1
e
10
10
0.1
0.1
24
Codificare Huffman
1.
Sorteaza crescator multimile dupa probabilitate
Litera
Letter
Probabilitate
Probability
Set
ProbProb
Set
Set
0.2
c
dea
0.2
0.4
b
0.4
dea
c
0.4
0.2
c
0.2
b
0.4
a
Cod
Code
0
d
11
11
0.1
0.1
e
10
10
0.1
0.1
25
Codificare Huffman
2.
Insereaza prefixul ‘1’ in codurile literelor din prima
multime
Litera
Letter
a
Cod
Code
0
b
Probabilitate
Probability
Set
ProbProb
Set
Set
0.2
c
0.2
0.4
dea
0.4
b
0.4
c
1
0.2
d
11
11
0.1
0.1
e
10
10
0.1
0.1
26
Codificare Huffman
3.
Insereaza prefixul ‘0 in codurile literelor din a doua
multime
Litera
Letter
a
Cod
Code
00
0
b
Probabilitate
Probability
Set
ProbProb
Set
Set
0.2
c
0.2
0.4
dea
0.4
b
0.4
c
11
0.2
d
011
11
0.1
0.1
e
001
10
0.1
0.1
27
Codificare Huffman
4.
Litera
Letter
a
Uneste primele 2 multimi
Cod
Code
00
b
Probabilitate
Probability
Set
ProbProb
Set
Set
0.2
cdea
c
0.6
0.2
0.4
b
dea
0.4
b
0.4
c
11
0.2
d
011
011
0.1
0.1
e
010
010
0.1
0.1
28
Codificare Huffman
1.
Sorteaza crescator multimile dupa probabilitate
Litera
Letter
a
Cod
Code
00
b
Probabilitate
Probability
Set
ProbProb
Set
Set
0.2
b
cdea
0.4
0.6
0.4
cdea
b
0.6
0.4
c
11
0.2
d
011
011
0.1
0.1
e
010
010
0.1
0.1
29
Codificare Huffman
2.
Insereaza prefixul ‘1’ in codurile literelor din prima
multime
Litera
Letter
Cod
Code
Probabilitate
Probability
Set
ProbProb
Set
Set
a
00
0.2
b
0.4
b
1
0.4
cdea
0.6
c
11
0.2
d
011
011
0.1
0.1
e
010
010
0.1
0.1
30
Codificare Huffman
3.
Insereaza prefixul ‘0’ in codurile literelor din a doua
multime
Litera
Letter
Cod
Code
Probabilitate
Probability
Set
ProbProb
Set
Set
a
000
00
0.2
b
0.4
b
11
0.4
cdea
0.6
c
01
1
0.2
d
0011
011
0.1
0.1
e
0010
010
0.1
0.1
31
Codificare Huffman
4.
Litera
Letter
Uneste primele 2 multimi
Cod
Code
Probabilitate
Probability
Set
ProbProb
Set
Set
a
000
0.2
abcde
b
1.0
0.4
b
11
0.4
cdea
0.6
c
01
01
0.2
d
0011
0011
0.1
0.1
e
0010
0010
0.1
0.1

Sfarsit
32
Codificare Huffman
 Statistici exemplu:
 Lungime medie cod
l = 0.4x1 + 0.2x2 + 0.2x3 + 0.1x4 + 0.1x4
= 2.2 bits/symbol
 Entropie
 H = s=a..eP(s) log2P(s) = 2.122 bits/symbol
 Redundanta
 l - H = 0.078 bits/symbol

 Peformantele sunt identice cu cele obtinute folosind codarea Shannon-
Fano
 Diferenta consta in faptul ca prin codarea Huffman se garanteaza
obtinerea unui cod optimal
33
Arbore Huffman
0
Litera
1
Cod
a
000
b
1
c
01
d
0011
e
0010
0
0
a
0.2
1
1
0
b
0.4
c
0.2
1
e
d
0.1
0.1
34
Arbore Huffman
Litera
Letter
Cod
Code
b
a
0.4
b
c
c
d
1
e
0
0.2
a
0.2
0
0.2
1
e
d
0.1
0.1
35
Arbore Huffman
Litera
Letter
a
Cod
Code
b
0
0.4
b
c
d
11
1
e
10
0
0
a
0.2
0.4
0
c
1
0.2
0.2
1
e
d
0.1
0.1
36
Arbore Huffman
Litera
Letter
a
Cod
Code
00
0
0
b
c
1
d
011
11
e
010
10
0
a
0.2
0.4
0
0.6
b
1
0.4
c
1
0.2
0.2
1
e
d
0.1
0.1
37
Arbore Huffman
0
Litera
Letter
1.0
1
Cod
Code
a
000
00
b
1
c
01
1
d
0011
011
e
0010
010
0
0
a
0.2
0.4
0
0.6
b
1
0.4
c
1
0.2
0.2
1
e
d
0.1
0.1
38
Arbore Huffman alternativ (1)
Litera
Letter
Cod
Code
b
a
0.4
b
c
0
d
1
e
0
0.2
1
a
c
e
d
0.2
0.2
0.1
0.1
39
Arbore Huffman alternativ (1)
Litera
Letter
a
Cod
Code
b
0
0.4
b
c
1
d
11
e
0
0
0.4
1
0
0.2
1
a
c
e
d
0.2
0.2
0.1
0.1
40
Arbore Huffman alternativ (1)
Litera
Letter
a
Cod
Code
0
00
0
0.6
b
1
0.4
b
c
01
1
d
11
1
e
10
0
0
0.4
1
0
0.2
1
a
c
e
d
0.2
0.2
0.1
0.1
41
Arbore Huffman alternativ (1)
0
Litera
Letter

1
Cod
Code
a
000
00
b
1
c
001
01
d
011
11
e
010
10
0
0
0.4
0.6
1
b
1
0.4
0
0.2
1
a
c
e
d
0.2
0.2
0.1
0.1
Lungime medie cod

l = 0.4x1 + (0.2 + 0.2 + 0.1 + 0.1)x3= 2.2 bits/symbol
42
Arbore Huffman alternativ (2)
Litera
Cod
1
0
a
00
b
11
c
01
d
101
a
c
e
100
0.2
0.2
0
0.4
1
0
0

Lungime medie cod

0.6
1
b
0.2
0.4
1
e
d
0.1
0.1
l = 0.4x2+ (0.2 + 0.2)x2 + (0.1 + 0.1)x3= 2.2 bits/symbol
43
Arbori Huffman Minimali
 Codurile Huffman nu sunt unice
 Toate versiunile produc acceasi lungime medie
 Pe care sa il folosim?
 Pe acela cu varianta minima in lungimile codurilor

Adica cel cu arborele cu cea mai mica inaltime
 De ce?
 Va asigura cel mai mic grad de variabilitate in fluxul codificat
 Cum se poate realiza?
 In timpul sortarii, solutioneaza egalitatile prin plasarea seturilor mici
mai sus in arbore

Alternativ, plaseaza seturile noi cat de jos posibil
44
Coduri Huffman Extinse
 Se considera sursa:
 A = {a, b, c}, P(a) = 0.8, P(b) = 0.02, P(c) = 0.18
 H = 0.816 bits/symbol
 Codul Huffman:
a
b
c
0
11
10
 l = 1.2 bits/symbol
 Redundanta = 0.384 bits/symbol (47%!)
 Se poate si mai bine?
45
Coduri Huffman Extinse
 Incercam codificarea secventelor de 2 litere in loc de codificarea
individuala a literelor
Litera
Probabilitate
Cod
aa
0.6400
0
ab
0.0160
10101
ac
0.1440
11
ba
0.0160
101000
bb
0.0004
10100101
bc
0.0036
1010011
ca
0.1440
100
cb
0.0036
10100100
cc
0.0324
1011
l = 1.7228/2 = 0.8614
Red. = 0.0045
bits/symbol
46
Coduri Huffman Extinse
 Ideea se poate extinde mai departe
 Se considera toate secventele nm posibile (am facut 32)
 In teorie, considerand mai multe secvente putem imbunatati
compresia
 In realitate, cresterea exponentiala a alfabetului face acest
lucru imposibil
 Ex., pentru lungime 3 avem 2563 = 224 = 16M secvente
posibile
 Majoritatea secventelor vor avea frecventa zero
47
Codificare Huffman Dinamica
 Compresia dinamica (sau adaptiva) Huffman foloseste un
arbore de codare ce este actualizat de fiecare data cand un
simbol este citit din fisierul de intrare
 Arborele creste (se dezvolta, evolueaza) la fiecare simbol citit
din fisierul de intrare
 Modul de evolutie al arborelui
este identic la compresie si la
decompresie
 Eficienta metodei se bazeaza pe o proprietate a arborilor
Huffman, cunoscuta sub numele de proprietatea „fiilor”
(„sibling property”)
48
Codificare Huffman Dinamica
 Proprietate (sibling):
 Fie T un arbore Huffman cu n frunze. Atunci nodurile lui T pot fi
aranjate intr-o secventa (x0, x1, ..., x2n-2) astfel incat:


Secventa ponderilor (weight(x0), weight(x1), ..., weight(x2n-2)) sa fie in
ordine descrescatoare
Pentru orice i (0 ≤ i ≤ n-1), nodurile consecutive x2i+1 si x2i+2 sunt siblings
(fii ai aceluiasi parinte)
 Compresia si decompresia utilizeaza arborele dinamic Huffman
pornind de la un caracter virtual, notat – de exemplu – prin
VIRT, sau NTI
 Acesta este intotdeauna nod terminal (frunza)
49
Codificare Huffman Dinamica
 De fiecare data cind un simbol este citit din fisierul de intrare
se efectueaza urmatoarele operatii:
Se scrie in fisierul destinatie codul simbolului:
1.



Daca simbolul citit este nou, atunci se scrie codul caracterului virtual
(NTI) (determinat din arborele de codare) urmat de codificarea in binar
(ASCII) pe 9 biti a simbolului respectiv
In caz contrar, se scrie cuvantul de cod al simbolului, determinat din
arborele de codare
Numai la primul simbol se scrie direct codul ASCII al acestuia pe 9
biti.
50
Codificare Huffman Dinamica
Se introduce simbolul citit in arborele de codare:
2.
Daca simbolul curent citit este nou, atunci din nodul virtual vor pleca
doi fii: unul pentru simbolul citit si unul pentru simbolul virtual



Nodul care a fost folosit ca nod virtual devine nod intermediar
In caz contrar, se incrementeaza frecventa de aparitie a acestuia, prin
marirea ponderii nodului corespunzator simbolului citit
51
Codificare Huffman Dinamica
3.
Se ajusteaza arborele pentru indeplinirea proprieatatii sibling

Trebuie considerate urmatoarele doua aspecte:
 la cresterea ponderii unui nod, frunza sau intermediar, trebuie
modificate si ponderile ancestorilor sai
 pentru a pastra ordinea descrescatoare a ponderilor se judeca astfel: fie
nodul frunza n ce are ponderea cu unu mai mare decat valoarea
anteriora, deci el este cel care s-a modificat la pasul curent
Pentru indeplinirea primei conditii a proprietatii sibling, nodul n este
schimbat cu cel mai apropiat nod m (m < n) din lista, astfel incat
weight(m) < weight(n)
Apoi, aceeasi operatie este efectuata asupra parintelui lui n, pana cand se
obtine nodul radacina sau este indeplinita primaconditia.


 Vezi COMENTARII pentru mai multe detalii!
52
Decodificarea Huffman Dinamica

La decompresie, textul comprimat este verificat cu arborele de
codare.
Tehnica se numeste „parsing”


La inceputul decompresiei, nodul curent este initializat cu radacina, ca
la algoritmul de compresie, si – apoi – arborele evolueaza simetric

La fiecare citire a unui simbol 0 se parcurge arborele in jos spre
stanga; se parcurge arborele spre dreapta daca simbolul citit este 1

Cand se ajunge la un nod terminal (frunza) simbolul asociat este scris
in fisierul de iesire si se ajusteaza arborele, la fel ca in faza de
compresie

Vezi COMENTARII pentru mai multe detalii!
53
Exemplu
Input: aardvark
Output:
Simbol
Cod
NTI
NTI
0
51
a
r
d
v
Coduri implicite putin mai eficiente sunt posibile
(combinatie 4-/5-bit)
k
a
b
c
d
e
00000
00001
00010
00011
00100
f
g
h
i
j
00101
00110
00111
01000
01001
k
l
m
n
o
01010
01011
01100
01101
01110
p
q
r
s
t
01111
10000
10001
10010
10011
u
v
w
x
y
10100
10101
10110
10111
11000
54
Exemplu
Input: aardvark
1
Output: 00000
Simbol
51
Cod
NTI
0
a
1
NTI
0
1
49
50
a
r
d
v
k
a
b
c
d
e
00000
00001
00010
00011
00100
f
g
h
i
j
00101
00110
00111
01000
01001
k
l
m
n
o
01010
01011
01100
01101
01110
p
q
r
s
t
01111
10000
10001
10010
10011
u
v
w
x
y
10100
10101
10110
10111
11000
55
Exemplu
Input: aardvark
2
Output: 000001
Simbol
51
Cod
NTI
0
a
1
NTI
0
2 a
49
50
r
d
v
k
a
b
c
d
e
00000
00001
00010
00011
00100
f
g
h
i
j
00101
00110
00111
01000
01001
k
l
m
n
o
01010
01011
01100
01101
01110
p
q
r
s
t
01111
10000
10001
10010
10011
u
v
w
x
y
10100
10101
10110
10111
11000
56
Exemplu
Input: aardvark
3
Output: 000001010001
Simbol
51
Cod
NTI
00
a
1
r
01
2
49
50
0
1
47
48
NTI
d
1
v
a
r
k
a
b
c
d
e
00000
00001
00010
00011
00100
f
g
h
i
j
00101
00110
00111
01000
01001
k
l
m
n
o
01010
01011
01100
01101
01110
p
q
r
s
t
01111
10000
10001
10010
10011
u
v
w
x
y
10100
10101
10110
10111
11000
57
Exemplu
Input: aardvark
4
Output: 0000010100010000011
Simbol
NTI
51
Cod
000
a
1
r
01
1
d
001
47
2
2
49
50
1
a
r
48
v
k
NTI
1 d
0
45
a
b
c
d
e
00000
00001
00010
00011
00100
f
g
h
i
j
00101
00110
00111
01000
01001
k
l
m
n
o
01010
01011
01100
01101
01110
46
p
q
r
s
t
01111
10000
10001
10010
10011
u
v
w
x
y
10100
10101
10110
10111
11000
58
Exemplu
4
51
Input: aardvark
Output: 0000010100010000011000
Simbol
NTI
Cod
000
a
1
r
01
d
001
2
49
50
2
1
47
48
1
a
r
1 d
45
v
2
46
k
1 v
0
NTI
43
a
b
c
d
e
00000
00001
00010
00011
00100
f
g
h
i
j
00101
00110
00111
01000
01001
44
k
l
m
n
o
01010
01011
01100
01101
01110
p
q
r
s
t
01111
10000
10001
10010
10011
u
v
w
x
y
10100
10101
10110
10111
11000
59
Exemplu
4
51
Input: aardvark
Output: 0000010100010000011000
Simbol
NTI
Cod
000
a
1
r
01
d
001
2
49
50
2
1
47
48
1
a
r
1 d
45
v
2
46
k
1 v
0
NTI
43
a
b
c
d
e
00000
00001
00010
00011
00100
f
g
h
i
j
00101
00110
00111
01000
01001
44
k
l
m
n
o
01010
01011
01100
01101
01110
p
q
r
s
t
01111
10000
10001
10010
10011
u
v
w
x
y
10100
10101
10110
10111
11000
60
Exemplu
4
51
Input: aardvark
Output: 0000010100010000011000
Simbol
NTI
3
2
49
50
Cod
1
000
a
1
r
01
d
001
a
2
r
47
48
1
1 d
45
v
46
k
NTI
1 v
0
43
a
b
c
d
e
00000
00001
00010
00011
00100
f
g
h
i
j
00101
00110
00111
01000
01001
k
l
m
n
o
01010
01011
01100
01101
01110
44
p
q
r
s
t
01111
10000
10001
10010
10011
u
v
w
x
y
10100
10101
10110
10111
11000
61
Exemplu
4
51
Input: aardvark
Output: 0000010100010000011000
Simbol
NTI
3
2
49
50
Cod
1
000
a
1
r
01
d
001
a
2
r
47
48
1
1 d
45
v
46
k
NTI
1 v
0
43
a
b
c
d
e
00000
00001
00010
00011
00100
f
g
h
i
j
00101
00110
00111
01000
01001
k
l
m
n
o
01010
01011
01100
01101
01110
44
p
q
r
s
t
01111
10000
10001
10010
10011
u
v
w
x
y
10100
10101
10110
10111
11000
62
Exemplu
5
51
Input: aardvark
Output: 000001010001000001100010101
Simbol
NTI
2 a
3
50
49
Cod
1
1100
2
r
47
48
a
0
r
10
d
111
1
v
1101
45
1 d
46
k
NTI
1 v
0
43
a
b
c
d
e
00000
00001
00010
00011
00100
f
g
h
i
j
00101
00110
00111
01000
01001
k
l
m
n
o
01010
01011
01100
01101
01110
p
q
r
s
t
01111
10000
10001
10010
10011
44
u
v
w
x
y
10100
10101
10110
10111
11000
63
Exemplu
6
51
Input: aardvark
3
Output: 0000010100010000011000101010
3
a
49
50
Simbol
NTI
Cod
1
1100
2
r
47
48
a
0
r
10
d
111
1
v
1101
45
1 d
46
k
NTI
1 v
0
43
a
b
c
d
e
00000
00001
00010
00011
00100
f
g
h
i
j
00101
00110
00111
01000
01001
k
l
m
n
o
01010
01011
01100
01101
01110
p
q
r
s
t
01111
10000
10001
10010
10011
44
u
v
w
x
y
10100
10101
10110
10111
11000
64
Codificare Huffman Adaptiva
7
51
Input: aardvark
Output: 000001010001000001100010101010
Simbol
NTI
a
3
4
50
49
Cod
1100
2
2 r
47
a
0
r
10
d
111
1
v
1101
45
48
1 d
46
k
NTI
1 v
0
43
a
b
c
d
e
00000
00001
00010
00011
00100
f
g
h
i
j
00101
00110
00111
01000
01001
k
l
m
n
o
01010
01011
01100
01101
01110
p
q
r
s
t
01111
10000
10001
10010
10011
44
u
v
w
x
y
10100
10101
10110
10111
11000
65
Exemplu
7
51
3
a
4
50
Input: aardvark
49
Output: 000001010001000001100010101010
1100
Simbol
NTI
2 r
2
48
47
Cod
2
1100
1 d
45
a
0
r
10
d
111
1
v
1101
43
46
1 v
44
k
NTI
0
1
41
42
k
66
Exemplu
7
51
3
a
4
50
Input: aardvark
49
Output: 000001010001000001100010101010
1100
Simbol
NTI
2 r
2
48
47
Cod
2
1100
1 d
45
a
0
r
10
d
111
1
v
1101
43
46
1 v
44
k
NTI
0
1
41
42
k
67
Exemplu
8
51
3
Input: aardvark
Output: 000001010001000001100010101010
110001010
Simbol
NTI
a
5
50
49
2 r
3
48
47
Cod
a
0
r
10
d
110
v
1111
k
11101
k 01010
2
1 d
11100
45
46
1 v
1
43
NTI
44
0
1
41
42
k
68
Exemplu Decodificare
Output:
Input: 000001010001000001100010101010
110001010
Simbol
Cod
NTI
NTI
0
51
a
r
d
v
k
a
b
c
d
e
00000
00001
00010
00011
00100
f
g
h
i
j
00101
00110
00111
01000
01001
k
l
m
n
o
01010
01011
01100
01101
01110
p
q
r
s
t
01111
10000
10001
10010
10011
u
v
w
x
y
10100
10101
10110
10111
11000
69
Exemplu Decodificare
Output: a
1
Input: 000001010001000001100010101010
110001010
Simbol
Cod
NTI
0
a
1
51
NTI
0
1
49
50
a
r
d
v
k
a
b
c
d
e
00000
00001
00010
00011
00100
f
g
h
i
j
00101
00110
00111
01000
01001
k
l
m
n
o
01010
01011
01100
01101
01110
p
q
r
s
t
01111
10000
10001
10010
10011
u
v
w
x
y
10100
10101
10110
10111
11000
70
Exemplu Decodificare
Output: aa
2
Input: -----1010001000001100010101010
110001010
Simbol
Cod
NTI
0
a
1
51
NTI
0
2 a
49
50
r
d
v
k
a
b
c
d
e
00000
00001
00010
00011
00100
f
g
h
i
j
00101
00110
00111
01000
01001
k
l
m
n
o
01010
01011
01100
01101
01110
p
q
r
s
t
01111
10000
10001
10010
10011
u
v
w
x
y
10100
10101
10110
10111
11000
71
Exemplu Decodificare
Output: aa
2
Input: ------010001000001100010101010
110001010
Simbol
Cod
NTI
0
a
1
51
NTI
0
2 a
49
50
r
d
v
k
a
b
c
d
e
00000
00001
00010
00011
00100
f
g
h
i
j
00101
00110
00111
01000
01001
k
l
m
n
o
01010
01011
01100
01101
01110
p
q
r
s
t
01111
10000
10001
10010
10011
u
v
w
x
y
10100
10101
10110
10111
11000
72
Exemplu Decodificare
Output: aar
3
Input: -------10001000001100010101010
110001010
Simbol
51
Cod
NTI
00
a
1
r
01
2
49
50
0
1
47
48
NTI
d
1
v
a
r
k
a
b
c
d
e
00000
00001
00010
00011
00100
f
g
h
i
j
00101
00110
00111
01000
01001
k
l
m
n
o
01010
01011
01100
01101
01110
p
q
r
s
t
01111
10000
10001
10010
10011
u
v
w
x
y
10100
10101
10110
10111
11000
73
Exemplu Decodificare
Output: aar
3
Input: ------------000001100010101010
110001010
Simbol
51
Cod
NTI
00
a
1
r
01
2
49
50
0
1
47
48
NTI
d
1
a
r
v
k
a
b
c
d
e
00000
00001
00010
00011
00100
f
g
h
i
j
00101
00110
00111
01000
01001
k
l
m
n
o
01010
01011
01100
01101
01110
p
q
r
s
t
01111
10000
10001
10010
10011
u
v
w
x
y
10100
10101
10110
10111
11000
74
Exemplu Decodificare
Output: aard
4
Input: --------------0001100010101010
110001010
Simbol
NTI
51
Cod
000
a
1
r
01
1
d
001
47
2
2
49
50
1
a
r
48
v
k
NTI
1 d
0
45
a
b
c
d
e
00000
00001
00010
00011
00100
f
g
h
i
j
00101
00110
00111
01000
01001
k
l
m
n
o
01010
01011
01100
01101
01110
46
p
q
r
s
t
01111
10000
10001
10010
10011
u
v
w
x
y
10100
10101
10110
10111
11000
75
Exemplu Decodificare
Output: aard
4
Input: -------------------00010101010
110001010
Simbol
NTI
51
Cod
000
a
1
r
01
1
d
001
47
2
2
49
50
1
a
r
48
v
k
NTI
1 d
0
45
a
b
c
d
e
00000
00001
00010
00011
00100
f
g
h
i
j
00101
00110
00111
01000
01001
k
l
m
n
o
01010
01011
01100
01101
01110
46
p
q
r
s
t
01111
10000
10001
10010
10011
u
v
w
x
y
10100
10101
10110
10111
11000
76
Exemplu Decodificare
4
51
Output: aardv
Input: ----------------------10101010
110001010
Simbol
NTI
Cod
000
a
1
r
01
d
001
2
49
50
2
1
47
48
1
a
r
1 d
45
v
2
46
k
1 v
0
NTI
43
a
b
c
d
e
00000
00001
00010
00011
00100
f
g
h
i
j
00101
00110
00111
01000
01001
44
k
l
m
n
o
01010
01011
01100
01101
01110
p
q
r
s
t
01111
10000
10001
10010
10011
u
v
w
x
y
10100
10101
10110
10111
11000
77
Exemplu Decodificare
5
51
Output: aardv
Input: ---------------------------010
110001010
Simbol
NTI
2 a
3
50
49
Cod
1
1100
2
r
47
48
a
0
r
10
d
111
1
v
1101
45
1 d
46
k
NTI
1 v
0
43
a
b
c
d
e
00000
00001
00010
00011
00100
f
g
h
i
j
00101
00110
00111
01000
01001
k
l
m
n
o
01010
01011
01100
01101
01110
p
q
r
s
t
01111
10000
10001
10010
10011
44
u
v
w
x
y
10100
10101
10110
10111
11000
78
Exemplu Decodificare
6
51
Output: aardva
Simbol
NTI
a
3
Input: ---------------------------010
110001010
3
50
49
Cod
1
1100
2
r
47
48
a
0
r
10
d
111
1
v
1101
45
1 d
46
k
NTI
1 v
0
43
a
b
c
d
e
00000
00001
00010
00011
00100
f
g
h
i
j
00101
00110
00111
01000
01001
k
l
m
n
o
01010
01011
01100
01101
01110
p
q
r
s
t
01111
10000
10001
10010
10011
44
u
v
w
x
y
10100
10101
10110
10111
11000
79
Decodificare Huffman Adaptiva
7
51
Output: aardvar
Simbol
a
3
Input: ---------------------------10
110001010
4
50
49
Cod
1100
2 r
2
a
0
48
47
r
10
d
111
1
v
1101
45
NTI
1 d
46
k
NTI
1 v
0
43
a
b
c
d
e
00000
00001
00010
00011
00100
f
g
h
i
j
00101
00110
00111
01000
01001
k
l
m
n
o
01010
01011
01100
01101
01110
p
q
r
s
t
01111
10000
10001
10010
10011
44
u
v
w
x
y
10100
10101
10110
10111
11000
80
Exemplu Decodificare
7
51
Output: aardvar
Simbol
a
3
Input: ----------------------------110001010
4
50
49
Cod
1100
2 r
2
a
0
48
47
r
10
d
111
1
v
1101
45
NTI
1 d
46
k
NTI
1 v
0
43
a
b
c
d
e
00000
00001
00010
00011
00100
f
g
h
i
j
00101
00110
00111
01000
01001
k
l
m
n
o
01010
01011
01100
01101
01110
p
q
r
s
t
01111
10000
10001
10010
10011
44
u
v
w
x
y
10100
10101
10110
10111
11000
81
Exemplu Decodificare
7
51
Output: aardvark
3
Input: ---------------------------01010
Simbol
a
4
50
49
Cod
1100
2 r
2
a
0
48
47
r
10
d
111
2
v
1101
45
NTI
1 d
46
k
1 v
1
43
k 01010
44
0
NTI
41
1
k
42
82
Exemplu Decodificare
8
51
3
a
5
50
Simbol
49
Cod
11100
2 r
3
a
0
48
47
r
10
d
110
v
1111
k
11101
NYT
2
1 d
45
46
1 v
1
43
NTI
44
0
1
41
42
k
83
Senzitivitatea la erori ale canalului de comunicatie
 Modelul de canal ales, fara erori, nu este un model foarte
realist pentru un sistem de comunicatie
 De aceea, un criteriu de comparatie al diferitelor coduri
este cel al sensibilitatii la erori
 Se pot considera doua tipuri de erori:
 erori de faza, in care un simbol este pierdut sau introdus in
plus
 erori de amplitudine, in care un simbol al codului este
schimbat
 Gradul in care aceste tipuri de erori degradeaza transmisia
este un criteriu important in alegerea metodei de
compresie
84
Senzitivitatea la erori ale canalului de comunicatie
 In cazul codurilor statice bloc-bloc o eroare de amplitudine
duce la o decodare incorecta iar o eroare de faza duce la
desincronizare si – ca efect - la decodari incorecte
 Totusi, codurile Huffman sunt autocorectoare
 La aparitia unei erori, se va decoda gresit cuvantul de cod unde a
aparut eroarea si un numar de cuvinte dupa cel eronat, insa, la o
distanta mare de eroare, decodarea nu mai introduce erori
 Solutia utilizata de codurile Huffman consta in adaugarea unei
secvente de sincronizare la fiecare cuvant de cod

De exemplu, o succesiune de 1 sau doi de 11, adaugate la sfarsitul
fiecarui cuvant de cod permite stoparea propagarii erorii, deci obtinerea
unor coduri auto-sincronizatoare, asa cum se intampla in cazul codurilor
Fibonacci
85
Senzitivitatea la erori ale canalului de comunicatie
 Codurile adaptive sunt afectate mai mult de erorile de
transmisie decat codurile statice, intrucat – la aparitia unei
erori – se schimba radical tabele locala de codare
 Una din solutiile utilizate este impachetarea codurilor de
compresie cu coduri detectoare si/sau corectoare de erori.
86
Compresia Huffman a Imaginilor
 Exemple Imagini: 256x256 pixels, 8 bits/pixel, 65,536 bytes
 Codificare Huffman a valorilor pixelilor
Imagine
Sena
Earth
Sensin
Omaha
Bits/pixel
ytes)
Rata
Compresie
Marime(b
Sena
7.01
57,504
1.14
Sensin
7.49
61,430
1.07
Earth
4.94
40,534
1.62
Omaha
7.12
58,374
1.12
87
Compresia Huffman a Imaginilor
 Observatii
 Algoritmul Huffman standard produce rezultate modeste, cu exceptie
pentru cazul Earth

Multi pixeli negri produc o distributie convenabila
 Nu luam in considerare corelatii evidente ale valorilor pixelilor
 Codificare Huffman a diferentelor pixelilor
Imagine
Bits/pixel
Marime (bytes)
Rata Compresie
Sena
4.02
32,968
1.99
Sensin
4.70
38,541
1.70
Earth
4.13
33,880
1.93
Omaha
6.42
52,643
1.24
88
Huffman (2 iteratii) vs Huffman Adaptiv
2 iteratii
Adaptiv
Imagine
Bits/pixel
Marime (bytes)
Rata Compresie
Sena
4.02
32,968
1.99
Sensin
4.70
38,541
1.70
Earth
4.13
33,880
1.93
Omaha
6.42
52,643
1.24
Imagine
Bits/pixel
Marime (bytes)
Rata Compresie
Sena
3.93
32,261
2.03
Sensin
4.63
37,896
1.73
Earth
4.82
39,504
1.66
Omaha
6.39
52,321
1.25
89
Compresia Huffman a textelor
PDF(letters): US Constitution vs. Chapter 3
0 .1 2
P(Consitution)
P(Chapter)
0 .1 0
Probability
0 .0 8
0 .0 6
0 .0 4
0 .0 2
0 .0 0
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
Letter
90
Compresia Audio Huffman

Codificare Huffman: 16-bit CD audio (44,100 Hz) x 2 canale
(bits)
Est. Marime Fisier
Compresat (bytes)
Rata
Compresie
939,862
12.8
725,420
1.16
Cohn
402,442
13.8
349,300
1.15
Mir
884,020
13.7
759,540
1.30
Est. Marime Fisier
Compresat (bytes)
Rata
Compresie
Marime Initiala
Entropie
(bytes)
Mozart
Fisier

Codificare Huffman a Diferentei
Fisier
Marime Initiala
(bytes)
Entropia
Dif.
(bits)
Mozart
939,862
9.7
569.792
1.65
Cohn
402,442
10.4
261,590
1.54
Mir
884,020
10.9
602,240
1.47
91
Coduri Golomb
 Folosite pentru codificarea secventelor de numere intregi, unde probabilitatea de
aparitie a numerelor este invers proportionala cu marimea acestora
 Cu cat numarul este mai mare, cu atat probabilitatea sa de aparitie este mai mica
 Ex.:cod unar
 Reprezentarea unara a unui numar urmata de ‘0’
00
1  10
2  110
3  1110
…
 Identic cu codul Huffman pentru {1, 2, 3, …} si P(k) = 1/2k
 Optimal pentru modelul probabilistic
92
Coduri Golomb
 Familie de coduri bazata pe un parametru m
 Pentru a reprezenta un numar n, calculam:
q = n/m (catul)
r = n - qm (restul)
 Reprezentam q in cod unar, urmat de r in log2m bits
 Daca m nu e putere a lui 2 atunci folosim log2m bits
 Si mai bine, putem folosi:


Reprezentarea in log2m-bits pentru 0 ≤ r ≤ 2 log2m-m-1, si
Reprezentarea in log2m-bits a numarului r + 2 log2m-m pentru
restul intervalului
93
Exemplu
 m=6
 log2m = 2
log2m = 3
 Coduri 2-bit pentru 0  r 2 log26-6-1

0  r 1
 Coduri 3-bit de r+2 log26-6 pentru restul

r+2
n
q
r
0
0
0
Cod
000
94
Exemplu
 m=6
 log2m = 2
log2m = 3
 Coduri 2-bit pentru 0  r 2 log26-6-1

0  r 1
 Coduri 3-bit de r+2 log26-6 pentru restul

r+2
n
q
r
Cod
0
0
0
000
1
0
1
001
95
Exemplu
 m=6
 log2m = 2
log2m = 3
 Coduri 2-bit pentru 0  r 2 log26-6-1

0  r 1
 Coduri 3-bit de r+2 log26-6 pentru restul

r+2
n
q
r
Cod
0
0
0
000
1
0
1
001
2
0
2
0100
96
Exemplu
 m=6
 log2m = 2
log2m = 3
 Coduri 2-bit pentru 0  r 2 log26-6-1

0  r 1
 Coduri 3-bit de r+2 log26-6 pentru restul

r+2
n
q
r
Cod
0
0
0
000
1
0
1
001
2
0
2
0100
3
0
3
0101
97
Exemplu
 m=6
 log2m = 2
log2m = 3
 Coduri 2-bit pentru 0  r 2 log26-6-1

0  r 1
 Coduri 3-bit de r+2 log26-6 pentru restul

r+2
n
q
r
Cod
0
0
0
000
1
0
1
001
2
0
2
0100
3
0
3
0101
4
0
4
0110
98
Exemplu
 m=6
 log2m = 2
log2m = 3
 Coduri 2-bit pentru 0  r 2 log26-6-1

0  r 1
 Coduri 3-bit de r+2 log26-6 pentru restul

r+2
n
q
r
Cod
0
0
0
000
1
0
1
001
2
0
2
0100
3
0
3
0101
4
0
4
0110
5
0
5
0111
99
Exemplu
 m=6
 log2m = 2
log2m = 3
 Coduri 2-bit pentru 0  r 2 log26-6-1

0  r 1
 Coduri 3-bit de r+2 log26-6 pentru restul

r+2
n
q
r
Cod
0
0
0
000
1
0
1
001
2
0
2
0100
3
0
3
0101
4
0
4
0110
5
0
5
0111
n
q
r
6
1
0
Cod
1000
100
Exemplu
 m=6
 log2m = 2
log2m = 3
 Coduri 2-bit pentru 0  r 2 log26-6-1

0  r 1
 Coduri 3-bit de r+2 log26-6 pentru restul

r+2
n
q
r
0
0
0
1
0
2
Cod
n
q
r
Cod
000
6
1
0
1000
1
001
7
1
1
1001
0
2
0100
3
0
3
0101
4
0
4
0110
5
0
5
0111
101
Exemplu
 m=6
 log2m = 2
log2m = 3
 Coduri 2-bit pentru 0  r 2 log26-6-1

0  r 1
 Coduri 3-bit de r+2 log26-6 pentru restul

r+2
n
q
r
0
0
0
1
0
2
Cod
n
q
r
Cod
000
6
1
0
1000
1
001
7
1
1
1001
0
2
0100
8
1
2
10100
3
0
3
0101
4
0
4
0110
5
0
5
0111
102
Exemplu
 m=6
 log2m = 2
log2m = 3
 Coduri 2-bit pentru 0  r 2 log26-6-1

0  r 1
 Coduri 3-bit de r+2 log26-6 pentru restul

r+2
n
q
r
0
0
0
1
0
2
Cod
n
q
r
Cod
000
6
1
0
1000
1
001
7
1
1
1001
0
2
0100
8
1
2
10100
3
0
3
0101
9
1
3
10101
4
0
4
0110
5
0
5
0111
103
Exemplu
 m=6
 log2m = 2
log2m = 3
 Coduri 2-bit pentru 0  r 2 log26-6-1

0  r 1
 Coduri 3-bit de r+2 log26-6 pentru restul

r+2
n
q
r
0
0
0
1
0
2
Cod
n
q
r
Cod
000
6
1
0
1000
1
001
7
1
1
1001
0
2
0100
8
1
2
10100
3
0
3
0101
9
1
3
10101
4
0
4
0110
10
1
4
10110
5
0
5
0111
104
Exemplu
 m=6
 log2m = 2
log2m = 3
 Coduri 2-bit pentru 0  r 2 log26-6-1

0  r 1
 Coduri 3-bit de r+2 log26-6 pentru restul

r+2
n
q
r
0
0
0
1
0
2
Cod
n
q
r
Cod
000
6
1
0
1000
1
001
7
1
1
1001
0
2
0100
8
1
2
10100
3
0
3
0101
9
1
3
10101
4
0
4
0110
10
1
4
10110
5
0
5
0111
11
1
5
10111
105
Coduri Golomb: Alegerea lui m
 Se considera o secventa binara
 Se poate codifica numarand subsecventele de cifre identice
 (de 0 sau 1)
 A.k.a. run-length encoding (RLE)
 Ex.
 00001001100010010000000001001110000100001000100
 ---4 -2 0--3 -2 --------9 -2 00---4 ---4 --3 -2

4,2,0,3,2,9,2,0,0,4,4,3,2
 35 zerouri, 12 unu; P(0) = 35/(35+12) = 0.745
 P(0) = 35/(35+12) = 0.745
 log 2 1  p 
m  

log 2 p 

 log 2 1  0.745
m  
2
log 2 0.745 

106
Concluzii
 Tabel
comparativ Huffman static-dinamic,
aplicatiile de compresie a textelor:
Criteriul de comparatie
Huffman static
Huffman dinamic
Codarea arborelui
statica
Dinamica
Simbolul END
Se adauga la sfarsitul mesajului
si se codifica in binar.
Se adauga la sfarsitul
mesajului si se codifica in
binar.
Memorarea arborelui
Da. Se salveaza la inceputul
mesajului.
Se transmite odata cu
mesajul
Codurile simbolurilor din mesaj
Constante
Variabile
Complexitate
+
Raport de compresie
+
in
107