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