In che modo la "dimensione del dizionario" influisce sulla compressione?


39

So che dimensioni maggiori possono portare a un miglior rapporto di compressione e viceversa. Ma c'è un modo per decidere meglio? ... dato che ci sono così tante scelte 7zip


Finora ho notato la dimensione del dizionario size la dimensione del file produce una compressione ottimale. dimensione del file
Qui il file ∼8mb test.aviha lo stesso rapporto di compressione per tutte le dimensioni del dizionario superiori a 8mb. Quindi inizia a cadere.


2
Sì, poiché l'intero file è in memoria. Tuttavia, ciò potrebbe non essere possibile se si tratta di file multi-concerto. Il ritorno sull'investimento diminuisce quanto più si va. Se hai bisogno dell'ultimo 1%, allora size = dimensione del file. Nota: quando si dispone di un set di dati molto più grande, una dimensione del dizionario di 128 MB + aumenta il tempo necessario per comprimere i file in modo significativo.
cybernard,

Risposte:


28

Gli elementi ripetibili sono memorizzati in un dizionario e un codice viene assegnato come sostituto.

QUESTA È UNA SEMPLIFICAZIONE SOPRA

aaaaaaaaaaaaaaaaaaaaaaaa  0001
bbbbbbbbbbbbbbbbbbbbbbbb  0002
alsdjl;asjdfkl;asdfjkljj  0003

invece dell'intera riga ha semplicemente messo il codice al suo posto. Più grande è il dizionario, più codici è in grado di gestire. Normalmente, quando un dizionario si riempie, ne inizia uno nuovo al volo. Quando ne inizia uno nuovo è vuoto e vengono assegnati nuovi codici ai pattern rilevati.

In generale, più grande è, meglio è, fino a un certo punto. L'intero dizionario viene tenuto in memoria, pertanto è necessaria una quantità di RAM maggiore rispetto alle dimensioni del dizionario.

Le dimensioni del dizionario dipendono dalla compressibilità dei dati, dal numero di file, dalle dimensioni e dalle dimensioni complessive.

Generalmente, 32mb è più che sufficiente, ma se si comprimono numerosi file multi-concerto, è possibile utilizzare un numero molto più elevato. I dizionari più grandi spesso rallentano il processo, ma i risultati in un file più piccolo.


2
La dimensione che hai impostato è un limite per la dimensione del dizionario o la dimensione effettiva che sarà? I programmi (7-zip in particolare) normalmente determinano in modo intelligente se devono davvero riempire l'intero dizionario che hai autorizzato?
Stan,

1
Sì, è un limite. Quando sono pieni, avviano un nuovo dizionario o espellono in modo intelligente vecchi dati. A meno che i dati da comprimere non superino le dimensioni del dizionario, verranno riempiti.
cybernard,

@cybernard "si riempirà"? Per essere chiari, la dimensione del dizionario rimane inferiore al limite quando non viene riempita?
LonnieBest,

1
@LonnieBest Sì, il dizionario inizia completamente vuoto. Ogni così tanti bit / byte crea una nuova voce del dizionario fino a quando non si riempie.
cybernard,
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.