diff --git a/sk1/README.md b/sk1/README.md index e69de29..75ee697 100644 --- a/sk1/README.md +++ b/sk1/README.md @@ -0,0 +1,95 @@ +Zadanie: + +Do programu sa zadáva súbor so stlačenými údajmi, ktoré boli zakódované pomocou algoritmov RLE alebo LZ77. Úlohou programu je zabezpečiť správnu kompresiu a dekompresiu textových a binárnych súborov. + +Program podporuje nasledujúce funkcie: + +Kompresia súborov pomocou RLE (Run-Length Encoding). +Dekompresia súborov stlačených pomocou RLE. +Kompresia súborov pomocou LZ77 (Sliding Window Compression). +Dekompresia súborov stlačených pomocou LZ77. +Formát vstupu: + +Vstupné súbory môžu byť textové alebo binárne. +Pre RLE každý stlačený blok pozostáva z bajtu znaku a jeho počtu. +Pre LZ77 sa používajú trojice: offset, dĺžka, nasledujúci znak. +Formát výstupu: + +Veľkosť stlačeného alebo dekomprimovaného súboru v bajtoch. +V prípade chyby sa vypíše správa s vysvetlením a program ukončí svoju činnosť. +Program kontroluje správnosť vstupných údajov a spracováva chyby, napríklad poškodený alebo neúplný súbor kompresie. + + + +Implementácia: + +Program sa skladá z: + +Hlavných štruktúr: + +struct LZ77Triple: Štruktúra, ktorá predstavuje trojice (offset, length, next_char) pre LZ77. +Funkcií: + +int rle_compress(const char* input_filename, const char* output_filename) +Implementuje algoritmus kompresie RLE. +Číta znaky a počíta ich opakovania. +Vracia veľkosť stlačeného súboru alebo kód chyby. + +int rle_decompress(const char* input_filename, const char* output_filename) +Rekonštruuje pôvodný súbor zo stlačených údajov RLE. +Vracia veľkosť dekomprimovaného súboru alebo kód chyby. + +int lz77_compress(const char* input_filename, const char* output_filename) +Implementuje algoritmus LZ77 s použitím posuvného okna a vyrovnávacej pamäte na predbežné prezeranie. +Vracia veľkosť stlačeného súboru alebo kód chyby. + +int lz77_decompress(const char* input_filename, const char* output_filename) +Rekonštruuje pôvodný súbor zo stlačených údajov LZ77. +Vracia veľkosť dekomprimovaného súboru alebo kód chyby. + +int main(int argc, char* argv[]) +Spracováva argumenty príkazového riadka. +Volá príslušné funkcie na základe zadaných argumentov (-c, -d, -c2, -d2). +Vypisuje výsledky alebo chybové hlásenia. + +void display_help() +Vypisuje informačnú nápovedu o dostupných príkazoch. + + + +Štrukturálny opis riešenia + +Projekt je postavený pomocou modulárneho prístupu. Hlavné komponenty: + +compressor.h: Hlavičkový súbor obsahujúci deklarácie funkcií na kompresiu a dekompresiu. +compressor.c: Implementácia algoritmov RLE a LZ77 pre kompresiu a dekompresiu. +main.c: Hlavný modul, ktorý spracováva argumenty príkazového riadka a volá príslušné funkcie na kompresiu alebo dekompresiu. +Implementácia: + +RLE: Funguje na princípe ukladania znaku a počtu jeho opakovaní. +LZ77: Používa posuvné okno na vyhľadávanie opakujúcich sa sekvencií bajtov. + + + +Prevádzkové podmienky + +Program funguje správne za nasledujúcich podmienok: + +Súbory sú dostupné na čítanie a zápis. +Vstupné údaje neobsahujú chyby, ako je nesúlad formátu alebo poškodenie. +Pridelená pamäť na spracovanie údajov nepresahuje limity systému. + + + +Zoznam použitých zdrojov + +Wikipedia - Run Length Encoding - https://en.wikipedia.org/wiki/Run-length_encoding + +Wikipedia - LZ77 and LZ78 - https://en.wikipedia.org/wiki/LZ77_and_LZ78 + +GeeksforGeeks - Run Length Encoding Algorithm - https://www.geeksforgeeks.org/run-length-encoding/ + +Stackoverflow - LZ77 Algorithm - https://stackoverflow.com/questions/71708874/could-you-give-me-some-explain-of-lz77-algorithm + + +