1.07k likes | 1.17k Views
UNIVERSITY POLITEHNICA of BUCHAREST DEPARTMENT OF COMPUTER SCIENCE. Transmisia datelor multimedia in retele de calculatoare Compresia fara pierdere de calitate I. Conf. Dr. Ing. Costin-Anton Boiangiu <Costin.Boiangiu@CS.PUB.RO>. Codarea Shannon-Fano. Are avantajul simplitatii Suboptimal
E N D
UNIVERSITY POLITEHNICA of BUCHAREST DEPARTMENT OF COMPUTER SCIENCE Transmisia datelor multimedia in retele de calculatoareCompresia farapierdere de calitateI Conf. Dr. Ing. Costin-Anton Boiangiu <Costin.Boiangiu@CS.PUB.RO>
Codarea Shannon-Fano • Are avantajul simplitatii • Suboptimal • Se bazeaza pe teoria luiShannon • Codul este construit astfel: mesajele sursei s(i) si probabilitatile asociate p(i) sunt listate in ordine descrescatoare a probabilitatilor • Lista este divizata pentru a forma doua grupuri de probabilitati egale • 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 • Fiecare din sub-listele obtinute sunt divizate dupa acelasi criteriu si se aloca (asigneaza) simboluri suplimentare • Procesul se continua pana cand se obtin sub-liste cu un singur mesaj
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 :
1 1 1 1 0 0 0 1 a b c d e f 9 8 6 5 4 2 Codarea Shannon-Fano a b c d e f 9 8 6 5 4 2
0 1 c d e f 0 1 6 5 4 2 a b 9 8 Codarea Shannon-Fano 1 1 1 1 0 0 a b c d e f 9 8 6 5 4 2
c d e f 6 5 4 2 Codarea Shannon-Fano 1 1 1 1 00 01 a b c d e f 9 8 6 5 4 2 0 1 0 1 a b 9 8
1 0 1 c d e f 6 5 4 2 Codarea Shannon-Fano 1 1 1 1 00 01 a b c d e f 9 8 6 5 4 2 0 0 1 a b 9 8
Codarea Shannon-Fano 10 10 11 11 00 01 a b c d e f 9 8 6 5 4 2 0 1 0 1 0 1 a b c d e f 9 8 6 5 4 2
0 0 1 c d 6 5 Codarea Shannon-Fano 10 10 11 11 00 01 a b c d e f 9 8 6 5 4 2 0 1 0 1 1 a b e f 9 8 4 2
Codarea Shannon-Fano 100 101 11 11 00 01 a b c d e f 9 8 6 5 4 2 0 1 0 1 0 1 a b e f 0 1 9 8 4 2 c d 6 5
1 0 1 e f 4 2 Codarea Shannon-Fano 100 101 11 11 00 01 a b c d e f 9 8 6 5 4 2 0 1 0 1 0 a b 0 1 9 8 c d 6 5
Codarea Shannon-Fano 100 101 110 111 00 01 a b c d e f 9 8 6 5 4 2 0 1 0 1 0 1 a b 0 1 0 1 9 8 c d e f 6 5 4 2
Codari Prefix Optimale • Codari optimale • Simbolurile care apar mai frecvent vor avea coduri mai scurte • Ultimele 2 cele mai putin frecvente simboluri vor avea coduri de lungimi egale • Demonstratie: • Vrem sa demonstram faptul ca codul este clar suboptimal • 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
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
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:
Codificare Huffman Initializare: Creeaza o multime din fiecarelitera
Codificare Huffman Sorteazamultimiledupaprobabilitate
Codificare Huffman Insereazaprefixul ‘1’ in codurileliterelor din prima multime
Codificare Huffman Insereazaprefixul ‘0’ in codurileliterelor din a douamultime
Codificare Huffman Unesteprimele 2 multimi
Codificare Huffman Sorteazacrescatormultimiledupaprobabilitate
Codificare Huffman Insereazaprefixul ‘1’ in codurileliterelor din prima multime
Codificare Huffman Insereazaprefixul ‘0’ in codurileliterelor din a douamultime
Codificare Huffman Unesteprimele 2 multimi
Codificare Huffman Sorteazacrescatormultimiledupaprobabilitate
Codificare Huffman Insereazaprefixul ‘1’ in codurileliterelor din prima multime
Codificare Huffman Insereazaprefixul ‘0 in codurileliterelor din a douamultime
Codificare Huffman Unesteprimele 2 multimi
Codificare Huffman Sorteazacrescatormultimiledupaprobabilitate
Codificare Huffman Insereazaprefixul ‘1’ in codurileliterelor din prima multime
Codificare Huffman Insereazaprefixul ‘0’ in codurileliterelor din a douamultime
Codificare Huffman Unesteprimele 2 multimi Sfarsit
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
Arbore Huffman 0 1 b 0 1 0.4 c 0 1 0.2 a 0 1 0.2 e d 0.1 0.1
0 1 0.2 Arbore Huffman b 0.4 c 0.2 a 0.2 e d 0.1 0.1
0 1 0.4 Arbore Huffman b 0.4 c 0.2 a 0 1 0.2 0.2 e d 0.1 0.1
0 1 0.6 Arbore Huffman b 0.4 c 0 1 0.4 0.2 a 0 1 0.2 0.2 e d 0.1 0.1
0 1 1.0 Arbore Huffman b 0 1 0.6 0.4 c 0 1 0.4 0.2 a 0 1 0.2 0.2 e d 0.1 0.1
0 1 0.2 Arbore Huffman alternativ (1) b 0.4 a c e d 0.2 0.2 0.1 0.1
0 1 0.4 Arbore Huffman alternativ (1) b 0.4 0 1 0.2 a c e d 0.2 0.2 0.1 0.1
0 1 0.6 Arbore Huffman alternativ (1) b 0.4 0 1 0 1 0.4 0.2 a c e d 0.2 0.2 0.1 0.1
0 1 Arbore Huffman alternativ (1) b 0 1 0.6 0.4 0 1 0 1 0.4 0.2 a c e d 0.2 0.2 0.1 0.1 • Lungimemedie cod • l= 0.4x1 + (0.2 + 0.2 + 0.1 + 0.1)x3= 2.2 bits/symbol
Arbore Huffman alternativ (2) 1 0 0 1 0.4 0 1 0.6 a c b 0.2 0.2 0.4 0 1 0.2 e d • Lungimemedie cod • l= 0.4x2+ (0.2 + 0.2)x2 + (0.1 + 0.1)x3= 2.2 bits/symbol 0.1 0.1
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
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 0 b 11 c 10 • l = 1.2 bits/symbol • Redundanta = 0.384 bits/symbol (47%!) • Se poate si mai bine?
Coduri Huffman Extinse • Incercam codificarea secventelor de 2 litere in loc de codificarea individuala a literelor l = 1.7228/2 = 0.8614 Red. = 0.0045bits/symbol
Coduri Huffman Extinse • Ideea se poate extinde mai departe • Se consider 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
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” („siblingproperty”)
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)
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: • 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.