Come funziona la compressione dei file?


19

Quindi, ho capito oggi che dò per scontata la compressione dei file. La capacità di raggruppare alcuni file in uno solo e di renderli più piccoli di uno di essi, è qualcosa che accetto come un dato di fatto, ma come funziona effettivamente?

Ne ho una conoscenza limitata che include qualcosa a che fare con la sostituzione di tutte le voci duplicate con puntatori, per ridurla in quel modo, ma oltre a ciò sono abbastanza all'oscuro!

Dato che sono sempre aperto a nuove conoscenze, come immagino che la maggior parte di noi qui sia, ho pensato di chiedere. Così, SuperUser, come fa la compressione in realtà funziona?


1
L' articolo di Wikipedia è un buon inizio, ma sarebbe bello avere spiegazioni più specifiche. Bella domanda (anche se ero sicuro che avevamo già una domanda del genere, ma sembra che non lo sia).
Gnoupi,

2
@Gnoupi: In effetti, la prima cosa che ho fatto è stata la ricerca, dato che ero sicuro che ce n'era uno qui. Apparentemente no, quindi ho provato a correggere questo: P
Phoshi,

2
abbiamo un tag "what-is" per quando pubblichi immagini e vai "wot izzit ??"; ho notato la necessità di un tag "come funziona", ma è troppo lungo e "come funziona" sembra stupido. "spiegare" potrebbe farlo anche se.
Quack Quixote,

@quack quixote: Ah, grazie. Stavo cercando nell'autocompletamento un tag di tipo "plz-send-the-spiegazione", ma non sono riuscito a trovarne uno.
Phoshi,

2
mi sono avvicinato solo alla creazione di un tag "how" un paio di volte ... ma "spiegare" è probabilmente migliore. "tutorial" e "howto" e "principiante" sono tutti semi-applicabili ma non si adattano perfettamente.
Quack Quixote,

Risposte:


18

Compressione senza perdita

La compressione senza perdita è il punto in cui nessun dato viene perso. Tutto ciò che viene inserito può essere recuperato perfettamente. Funziona bene con file di testo o binari in cui si noterà l'errore più piccolo.

La compressione dei file funziona prendendo il file e scansionando i pattern e traducendoli in qualcos'altro che occupa meno spazio.

Ad esempio "AAAAAAAA" potrebbe essere trasformato in "8A".

È vero che non funziona esattamente perché allora hai il problema se "8A" fosse in chiaro. Si decomprimerebbe il file e sarebbe sbagliato. Un buon punto di partenza è Wikipedia o l' algoritmo di compressione dei dati LZW .

Di seguito è riportato un semplice codice psuedo per questo copiato:

STRING = get input character
WHILE there are still input characters DO
    CHARACTER = get input character
    IF STRING+CHARACTER is in the string table then
        STRING = STRING+character
    ELSE
        output the code for STRING
        add STRING+CHARACTER to the string table
        STRING = CHARACTER
    END of IF
END of WHILE
output the code for STRING

Tutta la compressione utilizza un dizionario di ricerca che viene utilizzato per comprimere e decomprimere il file. Più grande è il dizionario, più è possibile comprimerlo, anche se ti imbatti nella Legge dei rendimenti decrescenti .

Vale anche la pena notare che la compressione non sempre produce un file più piccolo. Ci sono situazioni (con file di piccole dimensioni, o quando la compressione dei dati casuali ) che si non ottenere un file più piccolo dopo la compressione. Ci sono state alcune sfide divertenti relative alla capacità di comprimere i dati casuali.

Compressione "Lossy"

Quanto sopra riguarda principalmente la compressione senza perdita . Altri tipi di compressione utilizzati in applicazioni video / audio come MP3, JPG e h.264 sono esempi di compressione con perdita di dati .

La compressione con perdita funziona eliminando i dati che hanno meno probabilità di essere notati. Nell'audio questo suona circa 30.000 Hrz e inferiore a 100 Hrz, insieme ad altre varie cose. Nell'immagine (statica) rimuove varie cose e unisce i pixel insieme ai dati di scarto.

La compressione con perdita di dati è una forma di codifica di trasformazione . Calcola la media dei dati per ridurre le dimensioni complessive. Ad esempio un blocco di 10 pixel in un'immagine, tutti i colori leggermente diversi possono essere uniti in un unico colore e quindi compressi.

Nella compressione video spesso le istruzioni verranno posizionate solo per ridisegnare i pixel che sono stati modificati dall'ultimo fotogramma o fotogramma chiave .


Si noti che questa è una spiegazione solo per la compressione senza perdita, il tipo per il quale è possibile recuperare i dati iniziali esatti (molto probabilmente utilizzati dai programmi di archiviazione). Esistono altri tipi di compressione in cui si perde qualità per dimensioni inferiori, utilizzati ad esempio in JPG, MP3, ecc.
Gnoupi,

Il primo esempio di Josh è una forma di un vero metodo di compressione chiamato Run-Length Encoding, e "8A" verrebbe compresso a "181A". Ovviamente il suo ultimo paragrafo si applica qui; RLE funziona meglio sui dati con molti duplicati.
Dour High Arch,

3
Ho aggiunto i titoli lossless / lossy e l'ho arrotondato un po 'di più. È bene notare che il modo migliore per capire ulteriormente questo è semplicemente leggere l'articolo di Wikipedia.
Josh K,

5

La compressione funziona trovando schemi nei dati, quindi sostituendoli con uno speciale più piccolo. La decompressione è l'inverso: trova i modelli speciali e sostituiscili con i modelli più grandi che rappresentano. Conoscere quali modelli sono probabili è importante; ad esempio, i motivi trovati nel testo possono essere abbastanza diversi da quelli trovati nelle immagini. Alcune tecniche di compressione sono in perdita; non garantiscono che l'espansione ripristini esattamente l'input. Questo di solito va bene per i dati analogici, come musica e immagini, se la perdita è abbastanza piccola. Ma dati come il testo devono essere compressi con tecniche senza perdita di dati.

È importante rendersi conto che è impossibile comprimere, senza perdita, i dati casuali anche solo per un singolo bit. Considera un file con N bit di dati binari. Esistono 2 ^ N file possibili. Se comprimi uno di questi file di un singolo bit, quindi il file compresso ha dimensioni N-1 bit, ci sono solo 2 ^ (N-1) possibili rappresentazioni compresse. In altre parole, ogni possibile file compresso deve rappresentare più di un possibile file non compresso. Senza una rappresentazione compressa univoca, l'algoritmo di decompressione non può garantire la decompressione senza perdita.


3
un file può essere non compresso (aggettivo) ma non può essere decompresso (verbo). invece è decompresso .
Quack Quixote,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.