1
Fork 0
mirror of https://github.com/Steffo99/appunti-magistrali.git synced 2024-11-24 19:24:19 +00:00
appunti-steffo/2 - Algoritmi e strutture dati/1 - Appunti/30 - Compressione.md

52 lines
1.5 KiB
Markdown
Raw Normal View History

# 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` oppure `aaa`?
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](http://needsmorejpeg.com/) irrilevanti vengono perduti: non si può, dunque, ricostruire l'originale.
#### Esempi
- .jpeg
- .mp3
- ...