Podstawowa koncepcja polega na tym, że zamiast używać ośmiu bitów do reprezentowania każdego bajtu, używa się krótszych reprezentacji dla częstszego występowania bajtów lub sekwencji bajtów.
Na przykład, jeśli plik składa się wyłącznie z 0x41 bajtów (A
) powtarzające się szesnaście razy, a następnie zamiast reprezentujący go jako sekwencja 8-bitowym 01000001
skrócić to do sekwencji 1-bitowym 0
. Następnie plik może być reprezentowany przez 0000000000000000
(szesnaście 0
s).Tak więc plik z bajtem 0x41
powtórzony szesnaście razy może być reprezentowany przez plik składający się z bajtu 0x00
powtórzonego dwukrotnie.
Więc co mamy tutaj jest to, że dla tego pliku (0x41
powtarzane szesnaście razy) bity 01000001
nie przenoszą żadnych dodatkowych informacji na bit 0
. Tak więc w tym przypadku wyrzucamy obce bity, aby uzyskać krótszą reprezentację.
To jest podstawowa idea kompresji.
Jako inny przykład, rozważmy wzór o osiem bajta
0x41 0x42 0x43 0x44 0x45 0x46 0x47 0x48
i teraz go powtórzyć 2048 razy. Jednym ze sposobów podejścia powyżej jest przedstawienie bajtów za pomocą trzech bitów.
000 0x41
001 0x42
010 0x43
011 0x44
100 0x45
101 0x46
110 0x47
111 0x48
Teraz możemy reprezentować powyższy wzór bajtu przez 00000101 00111001 01110111
(jest to wzór trzy-bajtowy 0x05 0x39 0x77
) powtarzane 2048 razy.
Ale jeszcze lepszym rozwiązaniem jest reprezentują wzorzec bajta
0x41 0x42 0x43 0x44 0x45 0x46 0x47 0x48
przez pojedynczy bit 0
. Następnie możemy przedstawić powyższy wzór bajtu przez 0
powtórzony 2048 razy, który staje się bajtem 0x00
powtórzonym 256 razy. Teraz musimy tylko do przechowywania słownika
0 -> 0x41 0x42 0x43 0x44 0x45 0x46 0x47 0x48
a wzór bajtowy 0x00
powtarzane 256 razy i skompresowany plik z 16384 bajtów (modulo słownika) 256 bajtów.
To, w dużym skrócie, to, jak działa kompresja. Cała sprawa sprowadza się do znalezienia krótkich, wydajnych reprezentacji sekwencji bajtów i bajtów w danym pliku. To prosty pomysł, ale szczegóły (znalezienie reprezentacji) mogą być dość trudne.
Patrz na przykład:
- Data compression
- Run length encoding
- Huffman compression
- Shannon-Fano coding
- LZW
brzmi dla mnie jak trzeba iść do wikip edia i trochę czytać. – skaffman
Easy! Konwertuj na binarne i usuń zera –
http://www.howstuffworks.com/file-compression.htm –