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