Come comprimere i file e perché i formati Zip risparmiano larghezza di banda

8

Se passi del tempo a scaricare software o a condividere documenti di grandi dimensioni, probabilmente ti sei imbattuto in un file .zip. È una di quelle comodità digitali che funziona così bene che raramente ci fermiamo a metterla in discussione. La premessa di base è semplice: prendi un file voluminoso, riduci la sua impronta e spostalo sul Web più velocemente. Oppure semplicemente fai in modo che occupi meno spazio sul tuo disco rigido.

Ma qui c’è un leggero paradosso. Come si rimuovono i dati e poi si ritraggono magicamente tutti in un secondo momento senza che manchi un solo bit?

Non è magia. È la gestione della ridondanza. Dopo aver trattato le nozioni di base su come comprimere un file, approfondiremo i meccanismi di ciò che sta realmente accadendo all’interno di quell’archivio.

Compressione di un file: la guida rapida

Fondamentalmente, la compressione utilizza algoritmi per ridurre le dimensioni del file. Ciò consente di risparmiare spazio su disco. Inoltre accelera la trasmissione su connessioni più lente. La creazione di un file zip è integrata nella maggior parte dei sistemi operativi moderni. Non sono necessari strumenti speciali per le attività di base.

Ecco il processo semplice.

1. Selezionare i file di destinazione

Inizia identificando ciò che vuoi rimpicciolire. La compressione produce i migliori risultati con file più grandi. I file video e le immagini non elaborate sono i primi candidati perché consumano larghezza di banda e spazio di archiviazione significativi. I file di testo di piccole dimensioni spesso si comprimono in modo inadeguato perché mancano degli schemi ripetitivi necessari per una riduzione efficiente.

2. Utilizza gli strumenti integrati

Probabilmente hai già il software di cui hai bisogno.

Su Windows, il processo è semplicissimo. Fare clic con il pulsante destro del mouse sui file selezionati. Passare al menu “Invia a”. Scegli “Cartella compressa (zippata)”. Windows si occupa del resto.

Gli utenti Mac hanno una scorciatoia simile. Fai clic tenendo premuto il tasto Control sui file. Seleziona “Comprimi”. Il sistema genera automaticamente un archivio zip.

Se il tuo sistema operativo non dispone di questa funzionalità o hai bisogno di opzioni avanzate, avrai bisogno di software di terze parti. Strumenti come 7-Zip o WinRAR offrono un controllo più granulare sui livelli di compressione. Ma per l’uso quotidiano gli strumenti integrati sono sufficienti.

3. Generare l’archivio

Una volta attivato il comando, il software inizia a funzionare. Esegue la scansione dei file. Applica l’algoritmo scelto. Crea un nuovo file zip nella stessa directory degli originali.

La velocità di questo processo dipende da due fattori: dimensione del file e capacità della CPU. Alcuni video di grandi dimensioni potrebbero richiedere alcuni secondi. Una cartella piena di piccoli file di testo potrebbe richiedere più tempo a causa del sovraccarico, anche se il guadagno in termini di dimensioni finali potrebbe essere trascurabile.

4. Gestire il risultato

Ora hai un unico contenitore. Puoi rinominarlo. Puoi spostarlo su un’unità USB. Puoi inviarlo tramite e-mail. Il destinatario deve estrarre i contenuti per utilizzarli. Questo inverte il processo.

Tieni presente i compromessi. Per documenti, codice e testo, la compressione è quasi senza perdite. Ti verrà restituito esattamente ciò che hai inserito. Per immagini e video la storia è diversa. Alcuni metodi di compressione riducono la qualità per ottenere dimensioni più piccole. Questo è noto come compressione con perdita. La compressione del testo è in genere senza perdite.

Come funziona effettivamente la compressione dei file

I file informatici sono notoriamente ripetitivi. Contengono le stesse informazioni messe insieme ancora e ancora. Il software di compressione prospera grazie a questa ridondanza.

Invece di scrivere “il” trecento volte, un algoritmo di compressione scrive “il” una volta. Quindi crea un puntatore di riferimento. Ogni volta che vede “il”, torna alla prima istanza. Ciò riduce drasticamente il numero totale di bit e byte.

Per capirlo, consideriamo il linguaggio.

Consideriamo il discorso inaugurale di John F. Kennedy del 1961. La famosa frase:

“Non chiederti cosa può fare il tuo Paese per te, chiediti cosa puoi fare tu per il tuo Paese.”

Contiamo le unità. La citazione ha 17 parole. Contiene 61 lettere. Ci sono 16 posti. Un trattino. Un periodo. Se assegniamo un’unità di memoria a ciascun carattere, spazio o simbolo, la dimensione totale del file sarà di 79 unità.

Ora troviamo le ridondanze. Ignoriamo le maiuscole per semplicità.

  • “chiedi” appare due volte.
  • “cosa” appare due volte.
  • “tuo” appare due volte.
  • “Paese” appare due volte.
  • “può” appare due volte.
  • “do” appare due volte.
  • “per” appare due volte.
  • “tu” appare due volte.

Circa la metà della frase è ridondante. Nove parole uniche – chiedi, non, cosa, il tuo, paese, può, fare, per, te – contengono quasi tutte le informazioni necessarie. Per ricostruire la seconda metà, l’algoritmo punta semplicemente alle parole della prima metà. Riempie gli spazi e la punteggiatura utilizzando semplici regole.

Questa è l’essenza della compressione senza perdite. Non cancella le informazioni. Elimina la ripetizione.

Successivamente esamineremo più da vicino gli algoritmi che cercano questi modelli.

Il costo nascosto della compressione del dizionario

La maggior parte degli strumenti di compressione si basa su variazioni dell’algoritmo del dizionario adattivo LZ. Prende il nome dai creatori Lempel e Ziv e la parte “dizionario” è il meccanismo per catalogare dati ripetuti. Il sistema per organizzare queste voci non è complesso. Potrebbe essere un semplice elenco numerato.

Prendi la famosa battuta di JFK. Il programma di compressione cerca le parole ripetute e le assegna a un indice. Quindi sostituisce le parole con i numeri assegnati.

Se il dizionario appare così:

  • chiedi
  • cosa
  • tuo
  • paese
  • può
  • per
  • tu

La frase “Non chiedere cosa può fare il tuo Paese per te; chiedi cosa puoi fare tu per il tuo Paese” si trasforma in un codice. Diventa:

1 non 2 3 4 5 6 7 8 — 1 2 8 5 6 7 3 4

Un computer ricevente utilizza lo stesso dizionario e lo stesso schema numerico per ricostruire il testo originale. Ecco come funziona l’espansione. Alcuni file compressi contengono un programma di espansione incorporato. Ricostruisce automaticamente il file originale al momento del download.

Ma quanto spazio si risparmia effettivamente?

La stringa numerica è più corta della virgoletta completa. C’è un problema. È necessario archiviare il dizionario stesso insieme ai dati compressi.

In uno scenario reale, il calcolo dei requisiti dei file è complicato. Per questa ripartizione, presupponiamo che ogni carattere e spazio equivalga a un’unità di memoria. La frase completa occupa 79 unità. La frase compressa utilizza 37 unità. Il dizionario occupa anche 37 unità.

La dimensione totale del file è di 74 unità. La riduzione è minima.

Questa è solo una frase. Se l’algoritmo elaborasse il resto del discorso, troverebbe quelle parole ripetute molto più spesso. L’efficienza migliora all’aumentare della ripetizione. Come vedremo, il sistema riscrive anche il proprio dizionario per ottimizzare ulteriormente l’organizzazione.

Oltre la semplice corrispondenza delle parole

I passaggi precedenti si basavano sull’identificazione di parole complete e ripetute. Abbiamo trattato il testo come una sequenza di unità discrete. Un algoritmo di compressione non si preoccupa delle parole. Si preoccupa dei modelli.

L’obiettivo è semplice: ridurre il file.

Per fare ciò, il software esegue la scansione della ridondanza. Non chiede “è una parola?” Chiede “ho già visto questa sequenza?” Ed è spietato. Se un pattern appare solo una volta, viene eliminato. Se un modello più corto appare più spesso di uno più lungo, quello più lungo potrebbe essere sminuzzato.

Questo è il nucleo “adattivo” degli algoritmi basati su LZ. Il dizionario si evolve. Cambia. Ottimizza in tempo reale.

Come funziona la selezione del modello

Prendi la famosa battuta di JFK.

“Non chiederti cosa può fare il tuo Paese per te, non chiederti cosa puoi fare tu per il tuo Paese.”

Un essere umano vede le parole. Un compressore vede i caratteri.

La prima sequenza ripetuta potrebbe essere minuscola. “t” seguita da uno spazio. Appare in “non” e “cosa”. Il programma lo nota. Lo scrive. Poi si va avanti.

Perché? Perché in questo breve frammento “t” non si ripete abbastanza da giustificare il costo di memorizzazione del proprio ID nel dizionario. Viene sovrascritto o ignorato.

Successivamente, “ou” appare in “tuo” e “paese”. Utile? Forse. In un libro intero, “ou” è una miniera d’oro. Qui? L’algoritmo trova qualcosa di meglio.

“il tuo” e “paese” appaiono insieme come “il tuo paese”. Ripetuto due volte. Questo è un segnale più forte di “ou”. La voce del dizionario per “ou” viene scartata. “Il tuo paese” prende il suo posto.

Ma aspetta.

Guarda “può fare per”. È seguito da “tuo” e “tu”. La sequenza “posso fare per te” si ripete.

Quale è più efficiente?
“il tuo paese” = 13 caratteri (spazio compreso).
“può fare per te” = 15 caratteri.

L’algoritmo preferisce la corrispondenza più lunga se salva più bit per istanza. Ma “può fare per te” include “tu”, mentre “il tuo Paese” include “tuo”.

Se il programma dà la priorità alla sostituzione massima dei caratteri, potrebbe abbattere il “tuo paese”. Mantiene “r country” come suffisso e crea una voce principale per “può fare per te”. Ciò consente al compressore di fare riferimento alla maggior parte della frase con un codice, gestendo la leggera variazione (“tuo” vs “tu”) con riferimenti secondari.

Questa riscrittura dinamica è ciò che rende LZ adattivo. Il dizionario non è statico. È una registrazione vivente di ciò che è appena accaduto nel flusso di dati.

Il rapporto di compressione

Utilizzando i nostri modelli derivati:

  • chiedi__
  • cosa__
  • tu
  • r__paese
  • cando__for__you

La frase originale diventa una serie di puntatori:

1 non__ 2 3 4 5 __ — __ 1 2 3 5 4

L’utilizzo della memoria cambia drasticamente.

Testo originale: 79 unità.
Dati compressi: 18 unità.
Spese generali del dizionario: 41 unità.
Totale: 59 unità.

Abbiamo risparmiato 20 unità. Si tratta di una riduzione di circa il 25%. Non male per poche righe di discorso. E non necessariamente il risultato più efficiente possibile. Probabilmente potresti trovare un accordo più stretto. Ma il punto resta: trovare gli schemi giusti è più importante che trovare semplicemente qualsiasi schema.

Perché il testo si comprime meglio della grafica

Allora perché alcuni file si riducono del 50% o più, mentre altri si muovono a malapena?

Ridondanza.

I linguaggi naturali sono altamente ridondanti. Le lettere si raggruppano in modi specifici. “Th”, “ing”, “tion”. Le parole si ripetono costantemente. I file di testo sono densi di queste strutture prevedibili. I compressori prosperano qui.

Il codice di programmazione è simile. Un insieme limitato di parole chiave e comandi si ripete all’infinito. “se”, “mentre”, “ritorno”. Gli schemi sono rigidi. La compressione funziona bene.

Grafica? Audio?

Non così tanto.

Un’immagine o un file MP3 contiene dati univoci. Ogni pixel ha un valore specifico. Ogni campione audio è distinto. Ci sono poche sequenze che si ripetono. L’entropia è alta. L’algoritmo non riesce a trovare abbastanza modelli sovrapposti per costruire un dizionario utile.

Questo è il motivo per cui la compressione senza perdita di dati fallisce sui file multimediali. Hai bisogno di tecniche diverse. Ne parleremo più avanti.

Dimensione del file e scelta dell’algoritmo

La compressione migliora con file più grandi?

In generale sì.

Se comprimessimo l’intero discorso di JFK, il risparmio sarebbe maggiore. Perché? Perché gli stessi schemi si ripetono più spesso. Le voci del dizionario vengono riutilizzate migliaia di volte. Il sovraccarico del dizionario diventa trascurabile rispetto al risparmio.

Piccoli file? Il dizionario in testa divora i guadagni.

Anche la scelta dell’algoritmo gioca un ruolo enorme.

Non tutte le varianti LZ sono uguali. Alcuni sono sintonizzati per il testo. Alcuni per i dati. Alcuni utilizzano dizionari gerarchici, dizionari all’interno di dizionari, per individuare modelli complessi e nidificati in file di grandi dimensioni. Potrebbero soffocare con piccoli input.

I programmatori modificano costantemente questi sistemi. L’obiettivo è sempre lo stesso: rapporti migliori, velocità più elevate. Ma non esiste una soluzione universale.

Il miglior compressore per il tuo testo potrebbe essere il peggiore per il tuo database.

La compressione di cui abbiamo parlato è la compressione senza perdita. È l’unico modo per garantirti di recuperare il file originale. Ogni singolo bit rimane intatto. Suddividi il file in una parte più piccola per l’archiviazione o il trasferimento, quindi rimontalo esattamente com’era. Nessun dato viene perso.

La compressione con perdita prende una strada diversa. Non cerca di preservare tutto. Invece, elimina informazioni “non necessarie”. L’obiettivo è semplice: ridurre le dimensioni del file. Lo vedrai ovunque. È lo standard per le immagini bitmap.

Le bitmap sono gonfie. Mangiano spazio. Una fotografia scannerizzata è un esempio perfetto.

Gli algoritmi senza perdita di dati faticano qui. Certo, le sezioni grandi sembrano identiche. Il cielo è blu. Ma guarda più da vicino. Ogni pixel è leggermente diverso. I valori del colore cambiano. Per ridurre il file senza perdere la risoluzione, devi modificare questi valori.

Il programma sceglie una tonalità di blu. Assegna quel singolo valore a ogni pixel nel cielo. Riscrive il file per puntare a quel riferimento. Il risultato? La dimensione del file diminuisce in modo significativo. Non noterai la differenza.

Ma c’è un problema. Non potrai mai recuperare il file originale.

Una volta compresso, rimani bloccato con l’interpretazione della realtà del programma. I dati originali sono scomparsi. Non è possibile utilizzare la compressione con perdita per cose che richiedono una riproduzione esatta. Applicazioni software? No. Database? No. Discorsi di inaugurazione presidenziale? Sicuramente no.

“Con la compressione con perdita, non è possibile recuperare il file originale dopo che è stato compresso. Sei bloccato con la reinterpretazione dell’originale da parte del programma di compressione.”

Abbiamo aggiornato questo articolo insieme alla tecnologia AI, quindi ci siamo assicurati che fosse verificato e modificato da un editor di HowStuffWorks.

Domande frequenti sulla compressione dei file

Che cosa fa la compressione di un file?
Riduce la dimensione del file. File più piccoli significano una trasmissione più veloce. Invii e ricevi dati più velocemente.

Quali sono i tipi base di schemi di compressione dei file?
Ce ne sono due. Senza perdite e con perdite. Lossless scompone il file e lo ricostruisce in seguito. La perdita elimina i bit. Riduce il file in modo permanente. Non è possibile invertire la compressione con perdita.

Quale compressione utilizzano i file zip?
I file zip si basano sulla compressione dei dati senza perdita di dati. Gestiscono più directory. Usano algoritmi come DEFLATE. I dati escono esattamente come sono entrati.

La compressione dei file riduce la qualità?
Sì. Dopo che un’immagine è stata compressa su un computer o in una fotocamera, la qualità spesso ne risente. La nitidezza diminuisce. Il contrasto svanisce. I dettagli cromatici fini scompaiono. L’immagine sembra peggiore. Questo è il compromesso.