From 33819cc8424c5e3c0f584feeeb35a05556b9b4e8 Mon Sep 17 00:00:00 2001 From: VIliam Date: Sun, 19 Jan 2025 21:59:09 +0100 Subject: [PATCH] skuska --- sk1/README.md | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/sk1/README.md b/sk1/README.md index e69de29..915e8fa 100644 --- a/sk1/README.md +++ b/sk1/README.md @@ -0,0 +1,72 @@ +Zadanie + + Naprogramuj nástroj na kompresiu a dekompresiu. + + Na kompresiu použite aspoň dva kompresné algoritmy, napr. : Huffmanovo kódovanie, LZ77, LZ78, Run Length kódovanie alebo iný. Môžete vymyslieť aj vlastný algoritmus. + + Maximálne hodnotenie za riešenie obsahujúce iba algoritmus RLE je 30 percent. + + 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 Canterbury corpus. + + Riešenie nesmie využívať inú ako štandardnú knižnicu. Riešenie sa môže inšpirovať voľne dostupným cudzím riešením za predpokladu, že uvediete zdroj, ste podrobne oboznámený so zdrojovým kódom a viete odpovedať na otázky týkajúce sa kódu. Vaše riešenie nemôže kopírovať cudzie riešenie. V prípade, že použijete generatívny model, napíšte ktorý a napíšte aj prompt ktorý ste použili. + + Program by mal mať takéto rozhranie pri spustení z príkazového riadka: + + # skomprimuje infile do súboru outfile + ./compressor -c infile outfile + # dekomprimuje súbor compressed a zapíše do súboru uncompressed. + ./compressor -d compressed uncompressed + # vypíše pomoc + ./compressor -h + +Opis funkčnosti + + Program vykonáva kompresiu a dekompresiu súborov pomocou dvoch algoritmov: + + Huffmanovo kódovanie (implementované v compress_1 a decompress_1). + + LZ77 (implementované v compress_2 a decompress_2). + + Pri kompresii sa vstupný súbor analyzuje a prevádza do skomprimovaného formátu, ktorý zaberá menej miesta. Pri dekompresii sa súbor obnovuje do pôvodnej podoby. + + Program podporuje prácu s ľubovoľnými binárnymi súbormi do veľkosti 10 MB. + +Opis riešenia + + Huffmanovo kódovanie: + + Vstupný súbor sa analyzuje a vytvorí sa frekvenčná tabuľka znakov. + + Na základe tejto tabuľky sa zostaví Huffmanov strom. + + Každému znaku sa priradí binárny kód, ktorý je následne použitý na zápis skomprimovaných dát. + + LZ77: + + Algoritmus používa sliding window techniku na hľadanie opakujúcich sa reťazcov v dátach. + + Zápis pozostáva z trojíc (offset, length, next_symbol), ktoré umožňujú rekonštrukciu pôvodného súboru. + + Spracovanie binárnych súborov: + + Na čítanie a zápis sa používajú funkcie fopen(), fread(), fwrite(). + + Dáta sa spracovávajú v pamäťových bufferoch. + +Podmienky spustenia : + + Súbor musí byť menší ako 10 MB. + + Program pracuje iba s binárnymi a textovými súbormi. + + Súbor musí byť dostupný a čitateľný (program kontroluje chyby pri otváraní súborov). + +Zoznam použitých zdrojov + + Canterbury corpus - Súbory použité na testovanie: https://corpus.canterbury.ac.nz/ + + Dokumentácia k Huffmanovmu kódovaniu: https://en.wikipedia.org/wiki/Huffman_coding + + Dokumentácia k LZ77: https://en.wikipedia.org/wiki/LZ77_and_LZ78 \ No newline at end of file