Projekty IB015

Komprese souborů

Autor: Libor Škarvada

Napište program, který bude komprimovat textové soubory pomocí Huffmanova kódování. Prostudujte princip tohoto kódování (např. zde).

Definujte funkce hEncode::String→[Word8] a hDecode::[Word8]→String, které budou převádět znakové řetězce do binárních dat a naopak. Použijte tyto funkce v programu, který komprimuje nebo dekomprimuje soubor podle jména na příkazovém řádku:

huffman -c soubor.txt
huffman -d soubor.huf

Ke zjištění četností znaků v textech lze přistoupit dvojím způsobem: buď spočítat četnost znaků v každém komprimovaném souboru ještě před jeho kompresí, anebo se omezit na texty v určitém jazyce a použít statistické četnosti pro daný jazyk. První přístup vyžaduje dva průchody vstupním souborem, ale zaručuje optimální kompresní poměr (relativně vzhledem k použité metodě), druhý přístup je rychlejší, ale může vést k horším výsledkům (například při kompresi cizojazyčného textu).

Odhadovaný počet řešitelů: 1