Compressione & decompressione Algoritmi

March 12

Compressione & decompressione Algoritmi


Grandi programmi per computer e file spesso contengono troppi dati da trasmettere o salvarli facilmente. Per risolvere questo problema, i programmatori hanno creato algoritmi o sistemi ingegnosi per comprimere e decomprimere i file. Essi sono utilizzati per ridurre le dimensioni delle immagini, video, software e altri file in modo che siano più facilmente utilizzabili.

Compressione

Un algoritmo di compressione richiede specificamente un dizionario di codice e un buffer di uscita che è del 50 per cento maggiore dei dati. I dati vengono abbinati e poi ristretto fino alla sua forma semplificata. Ad esempio, se si dispone di un pezzo da 32 byte di codice che può corrispondere a 16 byte, allora si è in grado di ridurre la memoria della metà. Un test di file di compressione per semplificare l'intera base di codice.

Decompressione

Decompressione è un po 'più semplice di compressione, in quanto non richiede una posizione di memoria specifica. Quando si decomprimere semplicemente determinare se i dati è una partita o letterale. Se si tratta di una partita, poi la decompressione è inutile e i dati vengono copiati dall'ultimo tampone. Se si tratta di un letterale, allora si codifica il differenziale al buffer di uscita.

codice di compressione

Un algoritmo per comprimere i dati utilizza puntatori per identificare la posizione di memoria, far corrispondere i dati e quindi sottrarre il codice aggiuntivo una volta che è compresso. Quindi, il "se - altro" funzione algoritmica potrebbe essere il seguente:

if (valid_pointer (match) && partita == ingresso && (partita + 1) == (ingresso + 1)) {

if (literal < input)
OutputLiteral(literal, input - literal);

}
altro

++input;

codice di decompressione

Un codice di decompressione invece semplicemente codice copia letterale in modo che possa essere riprodotta in un buffer di uscita al momento opportuno. Quindi sottrae la memoria supplementare del programma. La funzione "if-, mentre" potrebbe apparire come segue:

mentre (ingresso <end) {
if (* ingresso e 0x80) {// partita

length = DecodeLength(&amp;input);
offset = DecodeOffset(&amp;input); // same algorithm as DecodeLength
while (length-- > 0)
{
*output = *(output - offset);
++output;