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

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 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 irrilevanti vengono perduti: non si può, dunque, ricostruire l'originale.

Esempi

  • .jpeg
  • .mp3
  • ...