Istnieje mnóstwo algorytmów kompresji. To, czego potrzebujesz, to bezstratny algorytm kompresji. Bezstratny algorytm kompresji kompresuje dane w taki sposób, że można je zdekompresować, aby osiągnąć dokładnie to, co podano przed kompresją. Przeciwieństwem byłby algorytm kompresji stratnej. Kompresja stratna może usunąć dane z pliku. Obrazy PNG używają bezstratnej kompresji, podczas gdy obrazy JPEG mogą i często wykorzystują kompresję stratną.
Niektóre z najbardziej znanych algorytmów kompresji obejmują:
archiwa ZIP użyć kombinacji kodowania Huffmana i LZ77 dać szybką kompresję i czasy dekompresji i dość dobre kompresja ra tios.
LZ77 jest w dużym stopniu uogólnioną formą RLE i często przynosi znacznie lepsze wyniki.
Huffman pozwala najbardziej powtarzającym się bajtom reprezentować najmniejszą liczbę bitów. Wyobraźmy sobie plik tekstowy, który wyglądał tak:
aaaaaaaabbbbbcccdd
Typowa implementacja Huffman skutkowałoby poniższej mapie:
Bits Character
0 a
10 b
110 c
1110 d
Więc plik zostanie sprężony do tego:
00000000 10101010 10110110 11011101 11000000
^^^^^
Padding bits required
18 bajtów zejść do 5. Oczywiście tabela musi być zawarta w pliku. Ten algorytm działa lepiej z większą ilością danych: P
Alex Allain ma a nice article na algorytmie kompresji Huffmana, jeśli Wiki nie jest wystarczający.
Możesz poprosić o więcej informacji. Ten temat jest dość szeroki.
Hmmmm Istnieje wiele algorytmów kompresji, czego szukasz w kategoriach "najlepszych". Takich jak szybkość, lub całkowicie bez strat, lub najwyższy współczynnik kompresji? W odniesieniu do których ASIC przeznaczone dla nich jest bardziej pytanie badawcze. Jestem pewien, że większość, jeśli nie wszystkie, głównego algorytmu kompresji ma jakieś implementacje ASIC. – Nomad101
http://www.ccs.neu.edu/home/jnl22/oldsite/cshonor/jeff.html – taocp
@taocp, dziękuję! – Veridian