Kompresjon og dekompresjon algoritmer

Kompresjon og dekompresjon algoritmer


Store dataprogrammer og filer inneholder ofte for mye data å enkelt overføre eller lagre dem. For å løse dette problemet, har programmerere kommet opp med geniale algoritmer eller systemer for å komprimere og dekomprimere filer. De brukes til å redusere størrelsen på bildet, video, programvare og andre filer slik at de vil være mer lett anvendelig.

kompresjon

En kompresjonsalgoritme trenger spesielt en ordbok med kode og en utgangsbuffer som er 50 prosent større enn dataene. Data blir matchet og deretter krympet ned til forenklet form. For eksempel, hvis du har en 32 byte stykke kode som kan matche en 16 byte, så du er i stand til å redusere minnet til det halve. En kompresjon fil tester for å forenkle hele kodebasen.

dekompresjon

Dekomprimering er litt enklere enn kompresjon fordi den ikke krever en bestemt lagersted. Når du dekomprimere du bare avgjøre om dataene er en kamp eller bokstavelig. Hvis det er en kamp, ​​så dekompresjon er unødvendig og dataene er kopiert fra den siste buffer. Hvis det er en bokstavelig, så du kode differensial til utgangen buffer.

komprimering Kode

En algoritme for å komprimere data bruker pekere til å identifisere minneplassen, i samsvar med teksten og deretter trekke den ekstra kode når den er komprimert. Så "hvis - ellers" algoritmisk funksjon kan vises som følger:

if (valid_pointer (kamp) && kamp == innspill && (kamp + 1) == (inngang + 1)) {

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

}
ellers

++input;

dekompresjon kode

En dekompresjon kode på den annen side bare er en kopi bokstavelig en kode, slik at det kan reproduseres i en utgangsbuffer på riktig tidspunkt. Det trekker da ekstra minne fra programmet. Den "hvis-mens" -funksjonen kan se slik ut:

mens (input <slutten) {
if (* Kommando og 0x80) {// kamp

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