usaa20/sk1/README.md

2.1 KiB

Zadanie

Naprogramuj nástroj na kompresiu a dekompresiu. Na kompresiu použite jeden alebo viac kompresných algoritmov: Huffmanovo kódovanie, LZ77, LZ78, Run Length kódovanie alebo iný. Meno vstupného a výstupného súboru načítajte ako argument príkazového riadka. V zadaní by mali byť implementované tieto dve funkcie:

/**
 * Skomprimuje súbor in a zapíše do súboru out.
 * @arg in smerník na otvorený vstupný súbor (na čítanie)
 * @arg out smerník na otvorený výstupný súbor (na zápis)
 * @return počet bajtov skomprimovaného súboru
 */
int compress(FILE* in, FILE* out);
/**
 * Dekomprimuje súbor in a zapíše do súboru out.
 * @arg in smerník na otvorený vstupný súbor (na čítanie)
 * @arg out smerník na otvorený výstupný súbor (na zápis)
 * @return počet bajtov dekomprimovaného  súboru
 */
void decompress(FILE* in, FILE* out);

Kompresor a dekompresor by mal byť schopný pracovať s ľubovoľným binárnym súborom do 10 MB. Súbor by mal byť po skomprimovaní menší minimálne o 10 percent a po dekomprimovaní by mal byť zhodný s pôvodným súborom. Pri práci s binárnymi súbormi môžete využiť funkcie fopen(), fread() a fwrite().

Na otestovanie kompresora a dekompresora použite súbory z Cantebury corpus.

Stručný opis funkčnosti

Musíme vytvoriť program, ktorý dokáže komprimovať a dekomprimovať súbory bez straty akýchkoľvek údajov

Stručný opis riešenia

Program používa na kompresiu súborov algoritmus stratovej kompresie dát LZ78. Kombinácie písmen kombinácie a index tejto kombinácie dynamicky uloží do stromu a potom zapíše iba index do súboru.

Podmienky za ktorých funguje

Program dokáže skutočne komprimovať súbory s dobrým opakovaním podobných bajtových sekvencií. Funguje zle s malými súbormi a so súbormi s veľmi rozdielnymi bajtovými sekvenciami

Návod na použitie

  • Skompilujte program
make all
  • spustiť program
./program c vstupný súbor vystupný súbor
./program d vstupný súbor vystupný súbor

použite c na zakódovanie súboru použite d na dekódovanie súboru