# Compressione dei dati

La compressione dei dati, in informatica e nelle telecomunicazioni, è la tecnica di elaborazione dati che, attuata a mezzo di opportuni algoritmi, permette la riduzione della quantità di bit necessari alla rappresentazione in forma digitale di un'informazione.

## Descrizione

La compressione dati viene utilizzata sia per ridurre le dimensioni di un file, e quindi lo spazio necessario per la sua memorizzazione, sia per ridurre l'occupazione di banda necessaria in una generica trasmissione dati digitale come ad esempio una trasmissione televisiva digitale. Nelle trasmissioni digitali tale compressione dell'informazione è operata all'interno della cosiddetta codifica di sorgente in modo da eliminare la ridondanza e ottenere un'alta efficienza del codice di sorgente. L'importanza della compressione dati sta nel fatto che in sua assenza non sarebbe possibile usufruire di tutta una vasta collezione di contenuti informativi attraverso la rete Internet per limitatezza della banda disponibile dei mezzi trasmissivi.
Le varie tecniche di compressione organizzano in modo più efficiente i dati, spesso perdendo una parte dell'informazione originale, al fine di ottenere una rappresentazione dell'informazione più compatta quindi comportante minori risorse per la sua memorizzazione e trasmissione. Come controparte la compressione dati necessita però di potenza di calcolo per le operazioni di compressione e decompressione, spesso anche elevata se tali operazioni devono essere eseguite in tempo reale.
Il parametro di qualità che valuta l'efficienza della compressione è il rapporto o tasso di compressione.
I programmi di compressione in genere hanno una funzione che consente lo split del file compresso. L'utente sceglie la dimensione massima del file, e il programma lo suddivide in $n$ file compressi che vengono poi uniti ricreando il file originale. L'opzione è utile ad esempio per chi deve inviare allegati in una e-mail, facendo più invii successivi se il file compresso è più grande di 7-10 MB, oppure se il file compresso è più grande della capacità del supporto su cui si tenta di salvarlo (CD, DVD, ecc).

### Tipi di compressione dati

Le tecniche di compressione dati si dividono in due grandi categorie:
* compressione dati con perdita: comprime i dati attraverso un processo con perdita d'informazione che sfrutta le ridondanze nell'utilizzo dei dati;
* compressione dati senza perdita: comprime i dati attraverso un processo senza perdita d'informazione che sfrutta le ridondanze nella codifica del dato.
Tipicamente la scelta sul tipo di compressione da operare e le particolarità tecniche su cui esse si basano dipendono dalla particolare applicazione o destinazione d'uso dando vita alle seguenti forme di compressione:
* la compressione audio;
* la compressione video;
* la compressione dell'immagine;
* la compressione multimediale.
Di norma file e programmi non tollerano alcuna perdita di informazione, come invece possono le immagini relative a foto, il segnale video o il segnale audio.
Le tecniche senza perdita (lossless) consentono di preservare l'informazione originale in ogni sua parte. È l'unica via possibile quando si devono comprimere file di testo, programmi, documenti, database, schemi elettrici ecc. Due esempi sono il formato ZIP o il formato 7z, i quali consentono di archiviare o trasmettere uno o più file risparmiando sulle risorse necessarie (spazio su disco o tempo di trasmissione). Al momento in cui vengono recuperati i file dallo ZIP o 7z (decompressione) questi risultano indistinguibili dagli originali.
Un altro esempio di caso in cui viene usata la compressione senza perdita è quello delle immagini non fotografiche, come gli schemi, i disegni o le icone. Per questo scopo esistono formati come il GIF o il PNG. L'immagine compressa con uno di questi formati mantiene esattamente l'aspetto originale fino al dettaglio più insignificante. Le prestazioni di questo tipo di compressione dati sono tipicamente più contenute e limitate.
D'altro canto, le tecniche con perdita di informazione (lossy) permettono anche delle compressioni molto spinte, quindi un grande risparmio di risorse, a discapito però della qualità dell'immagine o dell'audio che si è voluto comprimere. Generalmente queste tecniche si usano per comprimere i file multimediali. Pur mantenendo minima la perdita di qualità, il risparmio rispetto a una compressione lossless sulla stessa informazione è sempre decisamente apprezzabile.
Le informazioni multimediali come audio o video, in origine sono infatti troppo grandi per essere agevolmente trasmesse o memorizzate, quindi si preferisce avere una piccola riduzione della qualità (o distorsione del contenuto), ma nel contempo file molto più leggeri. Alcuni esempi sono: la compressione di immagini in formato JPEG, largamente usata in fotografia digitale e sul Web, la compressione video in formato XviD oppure la compressione audio in formato MP3. Infine, è importante puntualizzare che nel caso di compressione lossy di contenuti multimediali (per esempio MPEG), gli algoritmi di compressione di uso comune sono stati concepiti per minimizzare la distorsione percepita dall'utente in modo da rendere accettabile la degradazione del contenuto multimediale risultante.

### Algoritmi

Senza perdita di informazioni:
* Run-length encoding
** PackBits
** PCX
** W-link
* Codifica a riduzione locale di Entropia (codificazione entropica)
** Codifica di Huffman
** Codifica aritmetica
* Codifica a dizionario
** DEFLATE
** LZ77 e LZ78
** Lempel-Ziv-Welch (ZIP)
** LZMA
* Trasformata di Burrows-Wheeler
* PPM
Con perdita di informazione:
* Trasformata discreta del coseno (DCT)
** MPEG (Primo metodo di compressione ad alta diffusione basato su DCT e Delta)
** JPEG (Compressione d'immagini basato su quantizzazione, DCT e Huffman)
* Compressione frattale
** Trasformazione frattale
* Wavelet
** MP3 (compressione audio basata su compressione simil-wavelet e DCT)
** JPEG2000 (compressione d'immagini che usa wavelet, Huffman e quantizzazione)