Presentazione 9.1 Tecniche di compressione dei dati Informatica Generale (Prof. Luca A. Ludovico) Obiettivi • Riduzione delle informazioni mantenendo il contenuto informativo • Obiettivi di memorizzazione e trasferimento • Due categorie: – Tecniche con perdita (lossy) – Tecniche senza perdita (lossless) Informatica Generale (Prof. Luca A. Ludovico) Presentazione 9.1 Osservazioni • La percentuale di compressione ottenibile dipende: 1. dall’algoritmo utilizzato 2. dalla propensione dei dati a essere compressi • Esempio: adottiamo la compressione con algoritmo LZW (formato ZIP). A parità di algoritmo di compressione, ad esempio: – – 4 immagini JPG: da 282 KB a 276 KB (98% dell’originale) 4 documenti XML: da 1,96 MB a 126 KB (6,28% dell’originale) Tecniche lossless vs lossy • Lossless • Lossy • Senza perdita di informazione • Con perdita di informazione • Si riduce la ridondanza • Si riduce l’irrilevanza (presunta) • Si comprime mediamente fino al 50% delle dimensioni originali • Si comprime mediamente fino al 10% delle dimensioni originali • Ottimale quando non si può tollerare modifiche nei contenuti (ad es. testi, multimedialità professionale,etc.) • Ottimale quando si possono tollerare piccoli errori o modifiche (immagini e audio non professionali) Informatica Generale (Prof. Luca A. Ludovico) Presentazione 9.1 • Il messaggio M deve essere trasmesso tra il mittente A e il destinatario B compressione decompressione M M M M* A Canale trasmissivo B Codifica run-length (lossless) • RLE = run length encoding • Si sostituiscono le sequenze di bit con un codice che indica il valore ripetuto e quante volte si ripete nella sequenza. • Funziona bene quando i dati da comprimere sono scomponibili in lunghe sequenze di valori identici ripetuti. • E’ un codice a lunghezza fissa. Informatica Generale (Prof. Luca A. Ludovico) Presentazione 9.1 Esempio di codifica RLE • Sia M (messaggio da comprimere) una configurazione di bit costituita da: – 253 bit posti a 1, – seguiti da 118 bit posti a 0, – seguiti da 87 bit posti a 1 E’ più compatto rappresentare in binario 253 x 1, 118 x 0, 87 x 1 11111101111101100010101111 ad esempio dedicando 8 bit alla cardinalità e 1 bit al simbolo per ciascun blocco rispetto ad elencare i 458 bit. Informatica Generale (Prof. Luca A. Ludovico) Presentazione 9.1 Controesempi RLE • Cosa succede quando i bit dedicati alla cardinalità non sono sufficienti per coprire il numero di ripetizioni di un dato simbolo • Cosa succede se i blocchi di valori ripetuti sono estremamente brevi. Esempio: M = 0110100 MRLE = 000000010 000000101 000000010 000000011 000000100 Codifica dipendente dalla frequenza (lossless) • La lunghezza della configurazione di bit usata per rappresentare un elemento è inversamente proporzionale alla frequenza di utilizzo dell’elemento stesso. • E’ un codice a lunghezza variabile (gli elementi sono rappresentati da configurazioni di lunghezze diverse) • Un noto algoritmo per generare questi codici è stato scoperto da David Huffman. Molti codici dipendenti dalla frequenza oggi usati sono codici di Huffman. Informatica Generale (Prof. Luca A. Ludovico) Presentazione 9.1 Esempio di codice di Huffman per i testi • In lingua inglese, le lettere e, t, i sono molto più frequenti delle lettere z, q e x. • Per codificare testi in lingua inglese, si risparmia spazio usando configurazioni di bit brevi per le lettere più frequenti e lunghe per le meno frequenti. • Ad esempio, in un testo codificato in ASCII esteso, ogni carattere occupa 8 bit. Quindi ogni volta che occorre un carattere “frequente” la cui codifica compressa occupa meno di 8 bit, ho un risparmio. Informatica Generale (Prof. Luca A. Ludovico) Presentazione 9.1 Codifica relativa o differenziale • In alcuni casi, le informazioni sono costituite da blocchi, ognuno dei quali differisce leggermente dal precedente. • Esempio: i fotogrammi consecutivi di un’immagine in movimento. • Tecnica: codificare solo le differenze rispetto al blocco precedente. • Può essere con o senza perdita Informatica Generale (Prof. Luca A. Ludovico) Presentazione 9.1 Codifica basata sul dizionario (lossless) • Dizionario = insieme di blocchi sui quali è costruito il messaggio da comprimere, noto a priori. • Il messaggio è codificato non più come una sequenza di blocchi bensì come una sequenza di riferimenti al dizionario. • Variante: codifica adattiva (o dinamica) basata su dizionario, in cui il dizionario può cambiare durante il processo di codifica. Informatica Generale (Prof. Luca A. Ludovico) Presentazione 9.1 Esempio • Dizionario = insieme di blocchi sui quali è costruito il messaggio da comprimere, noto a priori. • Il messaggio è codificato non più come una sequenza di blocchi bensì come una sequenza di riferimenti al dizionario. • Variante: codifica adattiva (o dinamica) basata su dizionario, in cui il dizionario può cambiare durante il processo di codifica. Informatica Generale (Prof. Luca A. Ludovico) Presentazione 9.1 Codifica basata sul dizionario • Tecnica molto usata nei Word Processor, che già contengono al proprio interno dizionari di parole (tipicamente 25000 voci) a scopi di controllo ortografico. • Un’intera parola viene codificata come un riferimento al dizionario anziché come una sequenza di caratteri ASCII o Unicode. • Valutazione delle prestazioni: per una parola da 6 lettere, la codifica a caratteri singoli ASCII richiede 6 x 8 = 48 bit (ASCII) mentre solo 15 come riferimento. Con n = 15 possiamo rappresentare 2^15 differenti voci nel dizionario. Informatica Generale (Prof. Luca A. Ludovico) Presentazione 9.1 Codifica LZW (Lempel-Ziv-Welsh) • E’ un esempio di codifica adattiva basata su dizionario. • Si parte da un dizionario che contiene i soli elementi base del messaggio. Poi il dizionario viene via via costruito in modo incrementale durante la fase di compressione. • Al termine del processo di compressione, il dizionario può essere grande; ma non è necessario avere quest’ultimo per decodificare il messaggio. Informatica Generale (Prof. Luca A. Ludovico) Presentazione 9.1 Esempio di codifica LZW • Messaggio iniziale M: xyx xyx xyx xyx • Dizionario iniziale: • x >> 1 • y >> 2 • >> 3 • Messaggio compresso (non adattivo): 121312131213121 • Messaggio compresso (adattivo): 121343434 in quanto al dizionario si aggiunge xyx >> 4 Informatica Generale (Prof. Luca A. Ludovico) Presentazione 9.1