Compressie en decompressie Algorithms

Compressie en decompressie Algorithms


Grote computer programma's en bestanden bevatten vaak te veel gegevens om gemakkelijk te verzenden of op te slaan. Om dit probleem op te lossen, hebben programmeurs komen met ingenieuze algoritmen of systemen voor het comprimeren en decomprimeren van bestanden. Ze worden gebruikt om de grootte van het beeld, video, software en andere bestanden verlagen zodat ze gemakkelijker bruikbaar zal zijn.

samendrukking

Een compressie-algoritme specifiek behoefte aan een woordenboek van code en een uitgang buffer dat is 50 procent groter dan de gegevens. Gegevens worden afgestemd en vervolgens gekrompen zijn vereenvoudigd. Bijvoorbeeld, als je een 32 byte stuk code die kan overeenkomen met een 16 byte, dan bent u in staat om het geheugen te halveren. Een compressie-bestand tests om uw gehele code base te vereenvoudigen.

Decompressie

Decompressie is iets eenvoudiger dan compressie omdat het geen specifieke geheugenlocatie vereist. Als je je uitpakken eenvoudig bepalen of de gegevens is een wedstrijd of letterlijke. Als het een match, dan decompressie niet nodig en de data wordt gekopieerd van de laatste buffer. Als het letterlijk, te coderen de differentiële aan de uitgangsbuffer.

compressie Code

Een algoritme voor comprimeren gebruikt pointers naar de geheugenlocatie identificeren overeenkomen met de gegevens en vervolgens aftrekken van de aanvullende code eenmaal is samengedrukt. Dus de "if - else" algoritmische functie kan als volgt worden weergegeven:

if (valid_pointer (wedstrijd) && wedstrijd == ingang && (wedstrijd + 1) == (ingang + 1)) {

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

}
anders

++input;

decompressie Code

Een decompressiecode anderzijds slechts exemplaren letterlijke code, zodat deze in een uitgangsbuffer kan worden gereproduceerd op het juiste moment. Het trekt dan het extra geheugen van het programma. De "if-terwijl" functie kan als volgt worden weergegeven:

while (ingang <end) {
if (* ingang & 0x80) {// match

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