Update sk1/README.md
This commit is contained in:
parent
5aea3e8697
commit
50a5920166
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user