66 lines
2.2 KiB
Markdown
66 lines
2.2 KiB
Markdown
Zadanie
|
||
-Naprogramovať nástroj na kompresiu a dekompresiu binárnych súborov pomocou kompresného algoritmu (nie RLE). Program má podporovať súbory do 10 MB, dosiahnuť minimálne 10% kompresiu a po dekompresii má byť súbor identický s pôvodným.
|
||
|
||
Stručný opis funkčnosti
|
||
-Program komprimuje a dekomprimuje súbory pomocou Huffmanovho kódovania. Pri
|
||
kompresii analyzuje frekvenciu výskytu jednotlivých bajtov a vytvorí pre ne
|
||
optimálne binárne kódy - častejšie bajty dostanú kratšie kódy. Pri dekompresii
|
||
použije uloženú frekvenčnú tabuľku na rekonštrukciu pôvodných dát.
|
||
|
||
|
||
|
||
STRUČNY OPIS RIEŠENIA
|
||
|
||
|
||
Program používa Huffmanovo kódovanie:
|
||
|
||
Kompresia:
|
||
Načíta súbor do pamäte
|
||
Spočíta frekvenciu každého bajtu (0-255)
|
||
Vytvorí zoznam uzlov pre bajty s nenulovou frekvenciou
|
||
Zoradí uzly podľa frekvencie (bubble sort)
|
||
Postupne spája dva uzly s najnižšou frekvenciou do stromu
|
||
Vygeneruje binárne kódy prechádzaním stromu
|
||
Zakóduje dáta pomocou týchto kódov bit po bite
|
||
Uloží veľkosť, frekvenčnú tabuľku a komprimované dáta
|
||
|
||
|
||
Dekompresia:
|
||
Načíta veľkosť a frekvenčnú tabuľku
|
||
Zrekonštruuje Huffmanov strom rovnakým spôsobom
|
||
Číta komprimované dáta bit po bite
|
||
Pre každý bit prechádza stromom (0=vľavo, 1=vpravo)
|
||
Keď dosiahne list, zapíše zodpovedajúci bajt
|
||
Pokračuje kým nedekóduje celý súbor
|
||
|
||
|
||
|
||
PODMIENKY FUNGOVANIA
|
||
|
||
|
||
Program funguje správne za týchto podmienok:
|
||
|
||
Vstupný súbor existuje a je čitateľný
|
||
Veľkosť súboru je maximálne 10 MB
|
||
Dostatočná voľná pamäť (aspoň 2× veľkosť súboru)
|
||
Súbor nie je prázdny
|
||
Pri dekompresii sa používa súbor vytvorený týmto programom
|
||
|
||
Kompresia:
|
||
|
||
Textové súbory: 40-60% kompresia
|
||
Zdrojové kódy: 30-50% kompresia
|
||
Binárne súbory: 5-30% kompresia (závisí od obsahu)
|
||
Už komprimované súbory (zip, jpg): minimálna alebo žiadna kompresia
|
||
Veľmi malé súbory (<1 KB): môžu byť väčšie kvôli hlavičke (1032 B)
|
||
|
||
|
||
ZOZNAM POUŽITYCH ZDROJOV
|
||
|
||
Youtube: https://www.youtube.com/watch?v=JsTptu56GM8
|
||
Youtube: https://www.youtube.com/watch?v=iiGZ947Tcck
|
||
Youtube: https://www.youtube.com/watch?v=goOa3DGezUA
|
||
Internet: https://en.wikipedia.org/wiki/LZ77_and_LZ78
|
||
Internet: ChatGBT Prompt: Príklady kompresie dát
|
||
|