1.5 KiB
Compressione
Comprimere un file significa ridurne le dimensioni senza modificarne il significato.
Categorie
Compressione lossless
Nella compressione lossless, i dati possono essere decompressi riottenendo una copia identica dell'originale.
Immaginiamo un file che contiene solo le lettere
a, b, c, d, e, f
.Le lettere compaiono con questa frequenza: |a|b|c|d|e|f| |45%|13%|12%|16%|9%|5%|
Possiamo codificare le lettere nel seguente modo: |a|b|c|d|e|f| |
0b0
|0b100
|0b101
|0b111
|0b1100
|0b1101
|Scrivere
abacadae
richiederebbe 64 bits con la codifica ASCII estesa, ma in questo modo riusciamo a scriverlo con soli 17 bits!
Le codifiche di un file compresso devono rispettare la proprietà del Codice a prefisso, che dice che nessun codice deve essere il prefisso di un altro codice; altrimenti, si avrebbero ambiguità nella decodifica.
a =
1
b =11
111
èab
,ba
oppureaaa
?
Creiamo allora un albero di decodifica: un albero binario che, leggendo uno ad uno i bit codificati, ci permette di arrivare al valore del codice presente sulle foglie dell'albero.
Gli alberi di decodifica sono sempre completi.
Un albero di decodifica incompleto sarebbe non ottimizzato!
Esempi
- .png
- .flac
- .zip
- ...
Compressione lossy
Nella compressione lossy, alcuni dati solitamente irrilevanti vengono perduti: non si può, dunque, ricostruire l'originale.
Esempi
- .jpeg
- .mp3
- ...