COMPRESSIONE DATI Cosa significa comprimere ? compressione File Originale File compresso decompressione IDENTICI !!! File Originale 1 COMPRESSIONE DATI Per quale motivo vogliamo comprimere un file ? • Per risparmiare spazio quando memorizziamo il file • Per risparmiare tempo quando lo spediamo (attraverso la rete per esempio) SVANTAGGI: • Tempo impiegato per comprimere e decomprimere • Il file compresso non è usabile direttamente. Per usarlo occorre decomprimerlo • Il file compresso è più “fragile”. Alcuni errori di trasmissione possono completamente alterarne il contenuto 2 COMPRESSIONE DATI Per quale motivo si può comprimere ? Partiamo con un semplice indovinello. Completare la parte mancante PERS#STENEREL#SAMEDIIN#ORMAT#CAGEN ER#LECONSUCC#SSOALPRIMOA#PELL#OCCO R#ESTUDIAR#ALM#NOD#ECIOREA#GIORNOP ERUN#ERIODODIAL#ENOSE#MESI PERSOSTENERELESAMEDIINFORMATICAGEN ERALECONSUCCESSOALPRIMOAPPELLOOCC ORRESTUDIAREALMENODIECIOREALGIORN OPERUNPERIODODIALMENOSEIMESI PER SOSTENERE L’ESAME DI INFORMATICA GENERALE CON SUCCESSO AL PRIMO APPELLO OCCORRE STUDIARE ALMENO DIECI ORE AL GIORNO PER UN PERIODO DI ALMENO SEI MESI 3 COMPRESSIONE DATI L’indovinello del lucido precedente mostra una rudimentale forma di compressione dati che sfrutta il fatto che la lingua italiana, come tutti i linguaggi naturali, è ridondante. Un linguaggio è ridondante quando usa frasi più lunghe del necessario per descrivere un concetto. La ridondanza aiuta a correggere errori di trasmissione ma rallenta la trasmissione stessa. Comprimere un file significa eliminare la parte ridondante senza precludersi la possibilità di ricostruire deterministicamente il messaggio originale. C’è un limite alla compressione che è dato dalla quantità di informazione contenuta nel messaggio, chiamata in gergo tecnico entropia. 4 COMPRESSIONE DATI Codici Alfabeto = {A,B,C,D} Pr(A) = 1/2 Pr(B) = 1/4 Pr(C) = 1/8 Pr(D) = 1/8 Codice1: A 00 B 01 C 10 D 11 lunghezza della parola di codice 2 lunghezza della parola di codice 2 lunghezza della parola di codice 2 lunghezza della parola di codice 2 Lunghezza media del Codice1: 1 1 1 1 Lunghezza = 2 × + 2 × + 2 × + 2 × = 2 2 4 8 8 5 COMPRESSIONE DATI Codici Alfabeto = {A,B,C,D} Pr(A) = 1/2 Pr(B) = 1/4 Pr(C) = 1/8 Pr(D) = 1/8 Codice2: A 0 B 10 C 110 D 111 lunghezza della parola di codice 1 lunghezza della parola di codice 2 lunghezza della parola di codice 3 lunghezza della parola di codice 3 Lunghezza media del Codice2: 1 7 1 1 1 Lunghezza = 1 × + 2 × + 3 × + 3 × = < 2 2 4 8 8 4 6 COMPRESSIONE DATI Codifica di: ABAABCDBABDDAA Codice1: A B A A B C D B A B D D A A 00 01 00 00 01 10 11 01 00 01 11 11 00 00 1 4 4 4 4 4 4 4 4 4 4 4 4 2 4 4 4 4 4 4 4 4 4 4 4 43 28 Codice2: A B A A B C D B A B D D A A 0 10 0 0 10 110 111 10 0 10 111 111 0 0 1 4 4 4 4 4 4 4 4 4 4 44 2 4 4 4 4 4 4 4 4 4 4 4 43 26 7 COMPRESSIONE DATI Idea: Non tutte le parole di un linguaggio hanno la stessa frequenza all’interno di un testo scritto in quel linguaggio. Quindi: A parole più frequenti associamo una codifica più corta a parole meno frequenti una codifica più lunga. 8 COMPRESSIONE DATI Algoritmo di compressione dovuto a Ziv e Lempel Esempio Stringa di caratteri da codificare 0110110110101000111…… Token (pezzetti) distinti: 123 4 5 6 7 8 9 0110110110101000111…… Ogni token è codificato con una coppia (posizione,ultima cifra) IDEA: I token si allungano progressivamente …nell’esempio: (1,0)(2,1)(2,0)(2,1)(1,1)(3,1) (5,0)(1,0)(4,1) 9