56 lines
2.8 KiB
Markdown
56 lines
2.8 KiB
Markdown
# Domáca skúška - Riadny termín: Kompressor
|
|
|
|
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.
|
|
|
|
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(). Riešenie nesmie využívať inú ako štandardnú knižnicu.
|
|
|
|
|
|
## Stručný opis funkčnosti
|
|
|
|
1. Používa sa na ukladanie vstupných údajov, ako je vyrovnávacia pamäť a jej veľkosť a štruktúra.
|
|
(struct Input)
|
|
|
|
1. Slúži na uloženie výsledku kompresie, t. j. komprimovanej vyrovnávacej pamäte a jej veľkosti.
|
|
(struct Output)
|
|
|
|
1. Obsahuje informácie o aktuálnej opakujúcej sa sekvencii v algoritme RLE vrátane počiatočného znaku, dĺžky a aktuálnej pozície vo výslednom bufferi.
|
|
(struct RunLengthData)
|
|
|
|
1. Tieto funkcie implementujú algoritmy kompresie dát LZ78 a RLE. Na vstupe prijímajú vstupnú štruktúru s údajmi, ktoré sa majú komprimovať, a ukazovateľ na výstupnú štruktúru, do ktorej sa zapíše výsledok kompresie.
|
|
(LZ78compress, RLEcompress)
|
|
|
|
1. Funkcia komprimuje údaje zo vstupného súboru pomocou algoritmov RLE a LZ78 a potom zapíše komprimované údaje do výstupného súboru.
|
|
(compress)
|
|
|
|
1. Program prijíma vstupné parametre z príkazového riadku: -c pre kompresiu.
|
|
|
|
|
|
## Stručný opis riešenia
|
|
|
|
Toto riešenie je program na kompresiu súborov pomocou algoritmov kompresie dát LZ78 a RLE. Program spracúva vstupné údaje zo súboru, komprimuje ich pomocou algoritmov LZ78 a RLE a potom komprimované údaje uloží do iného súboru. Na kompresiu sa používajú dátové štruktúry, ako sú vstupné a výstupné štruktúry, ako aj štruktúry na správu slovníka podreťazcov počas procesu kompresie. Algoritmy kompresie údajov sú implementované vo funkciách LZ78compress a RLEcompress, ako aj vo funkcii compress.
|
|
|
|
|
|
## Podmienky za ktorých funguje
|
|
|
|
Pomocou príkazu make môžete jednoducho skompilovať všetky herné súbory, pretože súbor Makefile sa používa na proces kompilácie kódu:
|
|
|
|
```c
|
|
make
|
|
```
|
|
|
|
Ak chcete spustiť proces kompresie, musíte do príkazového riadku napísať (-c vstupný súbor a výstupný súbor):
|
|
|
|
```c
|
|
./compressor -c input output
|
|
```
|
|
|
|
|
|
### Zoznam použitých zdrojov
|
|
|
|
Pre kompresiu LZ78 - https://medium.com/swlh/how-data-compression-works-exploring-lz78-e97e539138
|
|
|
|
Pre kompresiu RLE - https://www.prepressure.com/library/compression-algorithm/rle
|
|
|
|
A tiež vaša lekcia na túto tému a príklad - https://student.kemt.fei.tuke.sk/usaa/prednasky/compression2/lz78.c |