1. In cosa consiste la compressione dei file (in particolare nel formato .zip)? 2. Vorrei sapere che superficie richiede la memorizzazione di un bit e l’estensione dei “confini” tra bit contigui. Da che cosa dipende la crescita della quantità di bit memorizzabile in supporti delle stesse dimensioni(superficie) (rispetto a poco tempo fa) e che cosa succede fisicamente quando un file viene zippato o detto in altro modo, perché non si salvano normalmente i file già zippati risparmiando spazio sui supporti?

La compressione
dei file o per meglio dire dei dati, non è altro che un processo di eliminazione
delle informazioni ridondanti, ossia ripetute più volte nel pacchetto
di dati esaminati. L’esempio classico che viene citato è il metodo di
trasmissione dei FAX, in cui il semplice scanner che legge il foglio inizia
a convertire la pagina in sequenze di bit (111000101001000) che indicano
dove si trovano le aree di scritte (scure) e quelle bianche (il foglio
pulito). In genere la risoluzione di questi scanner e abbastanza elevata,
per cui una semplice A diventa una lunga sequenza di alternata
di simboli uguali:

Poniamo il
caso che il nostro scanner sia a colori, ogni punto sarebbe rappresentato
da triplette di numeri che rappresentano le intensità di colore RGB (Red
Green Blue). Ovviamente registrare in questo modo la prima riga occuperebbe,
ponendo che un punto sia di 3 byte (RGB), 15*3=45 byte. Questa stessa
riga potrebbe essere espressa in modo più compatto elencando semplicemente
le variazioni di colore, per esempio con il formato: N(RGB), dove N rappresenta
il numero di punti consecutivi con il colore (RGB). Nel nostro esempio
la prima riga passerebbe da 45 a 4*3=12 byte, ottenendo un pacchetto di
byte grande solo il 26.6% del originale, con una compressione del 73.3%.

Esistono
diversi algoritmi di compressione, alcuni sono generali e offrono prestazioni
simili su molte varietà di dati, altri sono più mirati e in genere permettono
compressioni superiori, presuppongono che l’utente sappia in anticipo
il tipo di dati da comprimere.

Un altro
famoso algoritmo è quello di Huffman, che si basa sull’analisi delle frequenze
dei simboli. Prendiamo un libro scritto in italiano, sicuramente ci sarà
un altissima frequenza nell’uso della lettera “a” e una bassissima della
“z”, per cui si potrebbe pensare di usare codici binari molto brevi per
la “a” e più lunghi per la “z”, e in effetti l’algoritmo funziona più
o meno in questo modo. Per prima cosa analizza i dati suddividendoli in
pacchetti più piccoli su cui conta le ricorrenze(frequenze) dei byte.
Alla fine di questi conteggi, costruisce un albero(è semplicemente una
struttura dati), con cui determina le sequenze univoche di bit per identificare
un particolare valore, rispettando il criterio precedente, con cui potremmo
ottenere codici di pochi bit per i valori più frequenti(anche 1 bit),
e codici più lunghi anche del valore stesso, per cui potremmo avere un
byte(8 bit) codificato con 15 bit, ma questa situazione è molto più rara
di quella in cui il codice è inferiore agli 8 bit, per cui in media otterremo
sempre delle buone compressioni.

Per quanto
riguarda il formato ZIP non posso dire molto, comunque immagino che utilizzi
algoritmi simili, e forse più complessi, ma senza volerne parlare male
segnalerei il RAR, le cui performance ho personalmente messo a confronto
con ZIP, ottenendo notevoli risultati a favore del RAR, in particolare
con l’opzione Solid Archive.

Rispondendo
alla seconda domanda, credo sia chiaro che qualsiasi algoritmo si usi per
la compressione dei dati, comporti un notevole impiego di risorse, per cui
è improponibile comprimere tutti i dati, cosa che si pagherebbe con tempi
di accesso ai dati stessi, dilatati a dismisura. A questo punto potrebbe
far presente che esistono da parecchio tempo software che promettono di
duplicare lo spazio su disco, che però per evitare gli inconvenienti suddetti
usano versioni semplificate degli algoritmi ottimi di compressione, e con
cui si ottengono modeste compressioni, con tempi di accesso abbastanza lunghi.
E che io sappia non hanno avuto molto successo.

Mentre per
lo spazio necessario alla registrazione di un bit, il discorso è un po’
più articolato, visto che dipende principalmente dal tipo di supporto
(magnetico, ottico, ecc.) e dalla forma del supporto (nastro, disco, ecc.).
Inoltre prendendo come esempio il CD, si deve considerare anche la frequenza
dell’onda del raggio laser usato per leggerlo, perché se la lunghezza
dell’onda è maggiore della distanza tra un bit e l’altro, si perderanno
dei dati, che non si riuscirà a leggere. A questo proposito, vanno citati
nuovi DVD, che sfruttano tra gli altri accorgimenti, anche l’aumento della
frequenza del laser di lettura, che ha permesso di scrivere bit molto
più vicini tra di loro. Ottenendo un notevole incremento della densità
delle informazioni registrate sullo stesso supporto usato per i normali
CD. A questo sembra che abbiamo aggiunto un sistema che permette la registrazione
a più livelli, per cui due bit possono occupare la stessa superficie (o
quasi).