La potenza dei processori aumenta più velocemente che la capacità di immagazzinamento, e ancora più velocemente rispetto alla larghezza di banda delle reti, dato che quest'ultima richiede dei grossi cambiamenti a livello delle infrastrutture di telecomunicazione. Così, per rimediare a questa mancanza, spesso si riduce la dimensione dei dati sfruttando la potenza dei processori invece di aumentare le capacità di stoccaggio e di trasmissione dei dati.
La compressione consiste nel ridurre la dimensione fisica dei blocchi di informazioni. Un compressore utilizza un algoritmo che serve ad ottimizzare i dati utilizzando delle considerazioni proprie al tipo di dato da comprimere; sarà quindi necessario un decompressore per ricostruire i dati originali grazie all'algoritmo contrario a quello usato per la compressione. Il metodo di compressione dipende intrinsecamente dal tipo di dato da comprimere: non si comprimerà nello stesso modo un'immagine o un file audio.
La compressione può definirsi come il quoziente di compressione, cioè il quoziente del numero di bit nell'immagine compressa per il numero di bit nell'immagine originale. Il tasso di compressione, spesso utilizzato, è il contrario del quoziente di compressione, abitualmente espresso in percentuale. Infine, il guadagno di compressione, anch'esso espresso in percentuale, è il complemento a 1 del tasso di compressione.
La compressione fisica agisce direttamente sui dati, si tratta quindi di memorizzare i dati ridondanti da una sequenza di bit a un altro. La compressione logica invece si effettua con un ragionamento logico sostituendo un'informazione con un'informazione equivalente.
In caso di compressione simmetrica, si usa lo stesso metodo per comprimere e decomprimere l'informazione, c'è quindi la stessa quantità di lavoro per ciascuna operazione. È questo tipo di compressione che si usa normalmente nella trasmissione dei dati:
La compressione asimmetrica richiede più lavoro per una delle due operazioni, si cercano spesso degli algoritmi per cui la compressione sarà più lenta rispetto alla decompressione. Possono essere necessari degli algoritmi più rapidi in compressione che in decompressione quando si archiviano dei dati ai quali non si accede spesso (per ragioni di sicurezza ad esempio), dato che così si creano dei file compatti.
La compressione con perdite, detta anche compressione dati lossy, in opposizione alla compressione senza perdite (lossless compression), permette di eliminare qualche informazione per avere il miglior tasso di compressione possibile, mantenendo un risultato il più simile possibile all'originale. È il caso ad esempio di alcune compressioni di immagini o di musica, come il formato Ogg Vorbis o MP3.
Dato che questo tipo di compressione elimina delle informazioni contenute dei dati da comprimere, si parla generalmente di metodo di compressione irreversibile.
I file eseguibili non possono, ad esempio, essere compressi con questo metodo dato che hanno soprattutto bisogno di conservare la loro integrità per funzionare. In effetti, non è pensabile ricostruire approssimativamente un programma omettendo dei bit e aggiungendone altri. D'altra parte, i dati multimediali (audio, video) possono tollerare un certo livello di degradazione senza che gli organi sensoriali (occhio, timpano, ecc.) percepiscano un peggioramento significativo.
Alcuni algoritmi di compressione sono basati su dizionari specifici ad un tipo di dati: sono dei decoder non adattativi. La ripetitività delle lettere in un file di testo dipendono ad esempio dalla lingua in cui questo è scritto. Un decoder adattativo si adatta ai dati che deve comprimere, non parte con un dizionario già pronto per un tipo di dato. Invece un decoder semi-adattativo costruirà il proprio in funzione dei dati da comprimere: costruisce il dizionario percorrendo il file e poi comprimendolo.
Foto: © Pixabay.