Grote computerprogramma's en bestanden bevatten vaak te veel gegevens om gemakkelijk 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 af , zodat ze gemakkelijker bruikbaar zal zijn . Compressie Een compressie-algoritme specifiek behoefte aan een woordenboek van code en een output buffer die 50 procent groter is dan de gegevens . Data wordt afgestemd en vervolgens gekrompen tot zijn vereenvoudigde vorm . 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 testen te vereenvoudigen uw gehele code base . Decompressie Decompressie is een beetje eenvoudiger dan compressie , omdat het niet een specifieke geheugenlocatie nodig . Wanneer u decomprimeren je gewoon bepalen of de data is een wedstrijd of letterlijke . Als het een match , dan decompressie niet nodig en de data wordt gekopieerd van de laatste buffer . Als het een letterlijke , dan is het differentieel coderen u de output buffer . Compressie Code Een algoritme om data te comprimeren maakt gebruik van pointers naar het geheugen te identificeren locatie , overeenkomen met de data en vervolgens aftrekken van de aanvullende code eenmaal is samengedrukt . Dus de " indien - anders " algoritmische functie kan als volgt weergegeven: if ( valid_pointer ( wedstrijd ) && * wedstrijd == * ingang && * ( wedstrijd + 1 ) == * ( ingang + 1 ) ) { if ( letterlijke < input) OutputLiteral ( letterlijk , ingang - letterlijke ) ; } else + + -ingang ; Decompressie Code decompressiecode anderzijds slechts letterlijke code gekopieerd , zodat het kan worden gereproduceerd in een uitgangsbuffer op het juiste moment . Het trekt dan het extra geheugen van het programma . De "als - terwijl" -functie kan als volgt worden weergegeven : terwijl ( ingang < end ) { if ( * ingang & 0x80 ) { //matchlength = DecodeLength ( & input) ; offset = DecodeOffset ( & input) ; //hetzelfde algoritme als DecodeLengthwhile ( lengte - > 0 ) { * output = * (output - offset ) ; + + uitgang;
|