Compressione senza perdite Il problema Introduzione alla codifica entropica Abbiamo un alfabeto di simboli A (nota: non è detto che gli elementi di A siano numeri) Sappiamo che il simbolo a A si presenta con probabilità P(a) Vogliamo trasmettere a usando il minor numero possibile di bit 2 DIE Compressione dati: classificazione Compressione senza perdite (lossless) I dati ricostruiti sono esattamente uguali ai dati originali Usata per quei dati che non tollerano errori (programmi, documenti, database, ecc... ) Esempio: zip, gzip, ecc... Compressione: esempio introduttivo Supponiamo di avere una sequenza di matite colorate e di voler trasmettere l informazione di colore 00000 0000... giallo verde... Compressione con perdite (lossy) Raggiunge compressioni più elevate permettendo lievi differenze tra i dati originali e i dati ricostruiti Usata principalmente con dati che hanno la natura di segnali (immagini, audio, video, ecc... ) Esempi: JPEG, MPEG, H264, AC3, ecc... 3 DIE
Compressione: esempio introduttivo (2) Compressione: esempio introduttivo (4) Supponiamo che siano possibili solo quattro colori:, verde, giallo e blu La probabilità di trovare una matita con un certo colore è Colore Prob. /2 giallo /4 verde /8 blu /8 Colori diversi capitano con frequenze diverse Assegnamo parole binarie corte a simboli più frequenti Primo tentativo Colore Prob. parola /2 0 giallo /4 verde /8 0 blu /8 4 6 DIE Compressione: esempio introduttivo (3) Come posso trasmettere l informazione di colore? Una prima soluzione potrebbe essere di codificare ogni colore usando 2 bit, per esempio 00 giallo 0 verde 0 blu Questa soluzione richiede 2 bit per matita Si può fare di meglio? Compressione: esempio introduttivo (5) Q: Quanti bit per matita usiamo in media? Su N matite ci sono circa NP(c) matite di colore c Se al colore c è associata una parola di L (c) bit, il numero di bit totali è Il numero di bit per matita è N NP(c)L (c) = NP(c)L (c) P(c)L (c) = /2 + /4 + /8 2 + /8 2 =.25 5 7 DIE
Compressione: esempio introduttivo (6) Che bello! Compressione: esempio introduttivo (8) Codici a lunghezza variabile Q: Da cosa nasce il problema? Usando il codice visto prima risparmiamo 3/4 di bit per matita ma... Con i codici a lunghezza fissa (es. ASCII) ad ogni simbolo corrisponde una stringa di lunghezza fissa (es. 8 bit) è facile capire quando inizia/finisce la parola associata ad un simbolo Con un codice a lunghezza variabile può capitare che la stessa stringa di bit possa essere partizionata in più modi se questo accade il codice è non decodificabile 8 0 DIE Compressione: esempio introduttivo (7) La stringa di bit corrispondente alla sequenza, verde, giallo è 0 0 Purtroppo la stessa stringa corrisponde anche alla sequenza, blu (0 0 ) Il codice è ambiguo! Compressione: esempio introduttivo (9) Il problema? Come facciamo a costruire un codice 00 0 0 = verde giallo 0 0 = blu. a lunghezza variabile 2. decodificabile 3. ottimo 9 DIE
Codice di Huffman Idea di base... Codice di Huffman (3) Se l alfabeto ha due elementi la costruzione del codice è banale: assegno 0 ad un elemento e all altro Proviamo a ridurre il problema di costruire un codice per un alfabeto con N elementi al problema di costruire un codice per N elementi In questo modo, rosicchiando un elemento alla volta, possiamo trasformare il problema originale nel problema banale visto prima. Per completare il codice mi rimane da scegliere W 0, W e W 2 Considero il nuovo alfabeto A = {,giallo,{v,b}} Il nuovo simbolo {V,B} ha probabilità /8 + /8 = /4 Ora devo trovare il codice per un alfabeto di tre elementi 2 4 DIE Codice di Huffman (2) Codice di Huffman (4) Iterando la procedura appena vista si arriva a Il verde e il blu sono i meno probabili codifichiamoli con due parole che differiscono solo per l ultimo bit W 0 W W 2 {V,B} 0 Rosso Giallo Verde Blu 0 Rosso {G,V,B} 0 Giallo 0 Verde {V,B} Blu Come si decodifica? Camminando sull albero! Colore 0 giallo 0 verde 0 blu parola 3 5 DIE
Codice di Huffman (5) Prestazioni Codice di Huffman (7) Quanti bit per matita uso col codice appena costruito? P(c)L (c) = 2 + 4 2 + 8 3 + 8 3 =.75 Risparmiamo /4 di bit per matita Costruzione di un codice di Huffman:. Si scelgono i due simboli meno probabili 2. Si crea un padre per i due simboli selezionati 3. Si itera fino ad avere un alfabeto con due elementi 6 8 DIE Codice di Huffman (6) Codice a prefisso Il codice ottenuto è tale che nessuna parola di codice è prefisso di un altra parola di codice Abbiamo un codice a prefisso Ogni codice a prefisso può essere descritto da un albero e decodificato camminando sull albero stesso Codice di Huffman (8) Prestazioni Nell esempio al colore c era associata una parola di codice di lunghezza log 2 P(c) e il numero di bit per matita era P(c)log 2 P(c) In generale, si dimostra, il codice di Huffman è ottimo e richiede L bit per simbolo con dove è l entropia di c H(C) L H(C) + H(C) = P(c)log 2 P(c) 7 9 DIE
Entropia Entropia: Proprieta (2) L entropia di una variabile aleatoria misura la quantità di informazione legata alla variabile aleatoria L entropia assume il valore massimo se c è uniformemente distribuita P(c) = / A Non è possibile codificare c usando un numero di bit per simbolo inferiore a H(C) In questo caso H(C) = log 2 ( A ) Nota: se P(c) = 0 si pone P(c)log 2 P(c) = 0. In generale, quanto più sbilanciata è la distribuzione, tanto più piccola è l entropia 20 22 DIE Entropia: Proprieta Se esiste c 0 tale che P(c 0 ) =, allora H(C) = 0 In altre parole: se c assume sempre lo stesso valore non devo spendere bit per trasmetterlo 2