skuska
This commit is contained in:
		
							parent
							
								
									ee7833a8f1
								
							
						
					
					
						commit
						33819cc842
					
				| @ -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 | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user