47 lines
1.5 KiB
Markdown
47 lines
1.5 KiB
Markdown
# Kompresor / Dekompresor – Huffmanovo kódovanie
|
||
|
||
## Zadanie
|
||
Cieľom projektu je vytvoriť nástroj na bezstratovú kompresiu a dekompresiu
|
||
ľubovoľných binárnych súborov do veľkosti 10 MB bez použitia algoritmu RLE.
|
||
Program musí byť ovládateľný z príkazového riadka a používať iba štandardnú
|
||
knižnicu jazyka C.
|
||
|
||
## Funkčnosť
|
||
Program podporuje:
|
||
- kompresiu súborov pomocou Huffmanovho kódovania,
|
||
- dekompresiu skomprimovaných súborov,
|
||
- spracovanie ľubovoľných binárnych dát,
|
||
- zachovanie úplnej zhody po dekompresii.
|
||
|
||
Rozhranie:
|
||
./compressor -c infile outfile
|
||
./compressor -d infile outfile
|
||
./compressor -h
|
||
|
||
## Riešenie
|
||
Použitý algoritmus je Huffmanovo kódovanie:
|
||
1. Zistí sa frekvencia bajtov v súbore
|
||
2. Z frekvencií sa zostaví Huffmanov strom
|
||
3. Dáta sa zapíšu ako bitový prúd
|
||
4. Do hlavičky súboru sa uloží veľkosť a frekvenčná tabuľka
|
||
|
||
Formát výstupu:
|
||
- magické číslo "HUF1"
|
||
- pôvodná veľkosť súboru
|
||
- tabuľka frekvencií (256 × uint32_t)
|
||
- zakódované dáta
|
||
|
||
## Podmienky funkčnosti
|
||
- program funguje pre vstupy do 10 MB,
|
||
- používa iba štandardnú knižnicu C,
|
||
- testované na súboroch z Canterbury Corpus,
|
||
- kompresný pomer typicky > 10 %.
|
||
|
||
## Použité zdroje
|
||
- D. Huffman: A Method for the Construction of Minimum-Redundancy Codes
|
||
- Canterbury Corpus (testovacie dáta)
|
||
- Generatívny model: ChatGPT (OpenAI)
|
||
|
||
Prompt použitý pri generovaní:
|
||
"Vytvor kompletný C program na kompresiu a dekompresiu binárnych súborov pomocou Huffmanovho kódovania bez použitia RLE."
|