tanszek:oktatas:infrendalapjai_architekturak:informacio_feldolgozas:toemoerites
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
tanszek:oktatas:infrendalapjai_architekturak:informacio_feldolgozas:toemoerites [2024/11/12 12:49] – knehez | tanszek:oktatas:infrendalapjai_architekturak:informacio_feldolgozas:toemoerites [2024/11/15 18:01] (current) – knehez | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ===== Adattömörítő eljárások ===== | ||
A tömörítő eljárások lényege: olyan változó szóhosszúságú kódot választunk, | A tömörítő eljárások lényege: olyan változó szóhosszúságú kódot választunk, | ||
Line 37: | Line 38: | ||
$$ H = - (\frac{2}{4}log\frac{1}{4} + \frac{2}{8} log \frac{1}{8} + \frac{4}{16} log \frac{1}{16}) = 2.75 \,\, [bit]$$ | $$ H = - (\frac{2}{4}log\frac{1}{4} + \frac{2}{8} log \frac{1}{8} + \frac{4}{16} log \frac{1}{16}) = 2.75 \,\, [bit]$$ | ||
- | Mekkora az átlagos szóhosszúság? | + | ===== Huffman kódolás ===== |
- | Az átlagos szóhosszúságot így számoljuk ki: \( L = \sum\limits_{i=1}^{n} p_i \cdot \mu_i \) ahol n szimbólumunk van és \( p_i \) az i. szimbólum valószínűsége szorozva | + | A Huffman kódolás egy veszteségmentes adatkompressziós algoritmus, amely a gyakrabban előforduló szimbólumokhoz rövidebb, míg a ritkábban előfordulókhoz hosszabb kódokat rendel. Ez az előfordulási gyakoriság alapján történik az adatban. Az eljárás optimális, mert a legkisebb átlagos kódhosszt eredményezi. |
- | $$ L = \frac{2}{4} \cdot 2 + \frac{2}{8} \cdot 3 + \frac{4}{16} \cdot 4 = 2.75. \, \, [bit] $$ | + | === A Huffman-kódolás lépései === |
+ | - Számoljuk ki az egyes karakterek előfordulási gyakoriságát az adatban. | ||
+ | - Építsünk bináris fát a gyakorisági adatok alapján. | ||
+ | - Rendeljünk bináris kódokat minden karakterhez a fa szerkezetét követve, biztosítva, | ||
+ | |||
+ | === Huffman-kódolási példa === | ||
+ | Kódoljuk a következő szöveget: '' | ||
+ | |||
+ | == Gyakoriságok meghatározása === | ||
+ | |||
+ | ^Karakter^Gyakoriság^ | ||
+ | |A|9| | ||
+ | |B|3| | ||
+ | |C|1| | ||
+ | |D|1| | ||
+ | |E|1| | ||
+ | |F|1| | ||
+ | |G|1| | ||
+ | |H|1| | ||
+ | |||
+ | Készítsük el a bináris fa leveleit úgy, hogy zárójelben feltüntetjük a gyakoriságokat: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Válasszuk ki a két legkisebb gyakoriságú levelet és vonjuk össze az alábbiak szerint: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Vonjuk össze a F és G leveleket is ugyanígy: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Vonjuk össze a D és E leveleket is ugyanígy: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Most a középső két levél tartalmazza legkisebb gyakoriságot, | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Most a B és a jobb oldali 2-vel jelölt levél tartalmazza legkisebb gyakoriságot, | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Most vonjuk össze az utolsó két megmaradt levelet: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | A végén ez a fa lesz az eredmény: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | === Bináris kód hozzárendelés a fa leveleihez === | ||
+ | |||
+ | A bináris fa létrehozása után, rendeljük a levelekhez a kódokat, felülről lefelé haladva balra mozdulva 0-val, jobbra mozdulva 1-el egészítjük ki a kódot. | ||
+ | |||
+ | ^Karakter^Bináris kód^ | ||
+ | |A|0| | ||
+ | |B|100| | ||
+ | |C|1100| | ||
+ | |D|1110| | ||
+ | |E|1111| | ||
+ | |F|1010| | ||
+ | |G|1011| | ||
+ | |H|1101| | ||
+ | |||
+ | Az eredmény a következő lesz: | ||
+ | |||
+ | < | ||
+ | |||
+ | Hasonló módon készül el a végleges kód, mint a Shannon-Fano kódolás esetén, csak itt a fa készítés segít a bináris hozzárendelés elkészítésében. | ||
+ | |||
+ | megjegyzés: | ||
+ | |||
+ | ===== LZW kódolás ===== | ||
+ | |||
+ | Ennél a módszernél, | ||
+ | |||
+ | === Algoritmusa === | ||
+ | |||
+ | Kiindulásként a kódtáblázat tartalmazza a forrás összes előforduló elemét. | ||
+ | A kódoláskor az éppen aktuális pozíciótól kezdve addig olvassuk be a soron következő szimbólumokat egy bufferbe (**b**), amíg a sorozat szerepel a szótárban. Ha a soron következő karakter (**c**) az első olyan elem, amelyre **bc** már nem szerepel a szótárban, | ||
+ | |||
+ | Ezt a tömör leírást egy példa alapján tesszük érthetővé. | ||
+ | |||
+ | === Példa === | ||
+ | |||
+ | Kódoljuk a következő sorozatot LZW kódolással: | ||
+ | |||
+ | '' | ||
+ | |||
+ | Megvizsgálva az adatforrást, | ||
+ | |||
+ | - A kódoló először **d** karaktert veszi. | ||
+ | - A **d** benne van a szótárban, | ||
+ | - A **da** már nem szerepel jelenleg a szótárban, | ||
+ | - **d** 4-es indexét lejegyzi | ||
+ | - felveszi a szótárba **da** részszöveget a 6. bejegyzésbe és megy tovább **a**-val folytatva. | ||
+ | - Az **a** szerepel a szótárban, | ||
+ | |||
+ | '' | ||
+ | |||
+ | ^index^bejegyzés^ | ||
+ | |1|a| | ||
+ | |2|b| | ||
+ | |3|c| | ||
+ | |4|d| | ||
+ | |5|e| | ||
+ | |6|da| | ||
+ | |7|ab| | ||
+ | |8|bb| | ||
+ | |9|ba| | ||
+ | |10|ac| | ||
+ | |11|cd| | ||
+ | |12|dab| | ||
+ | |13|bba| | ||
+ | |14|acd| | ||
+ | |15|dabb| | ||
+ | |16|bac| | ||
+ | |17|cda| | ||
+ | |18|abb| | ||
+ | |19|bacd| | ||
+ | |20|de| | ||
+ | |21|ee| | ||
+ | |22|ec| | ||
+ | |23|cde| | ||
+ | |24|eec| | ||
+ | |25|cdee| | ||
+ | |||
+ | A Unix **compress** parancsa és a **GIF** (Graphics Interchange Format) képtömörítő eljárás is az **LZW** algoritmust alkalmazza. | ||
+ | ===== RLE kódolás ===== | ||
+ | |||
+ | Run-Length Encoding (RLE) – futáshossz kódolás. | ||
+ | |||
+ | A fentiekhez képes nagyon egyszerű, de mégis a gyakorlatban széleskörben használt kódolás. | ||
+ | |||
+ | Egyszerű tömörítési eljárás, amely a hosszasan ismétlődő azonos karaktereket, | ||
+ | Példa alapján könnyen érthető. | ||
+ | |||
+ | Kódoljuk a következő karaktereket RLE kódolással: | ||
+ | |||
+ | '' | ||
+ | |||
+ | === Kódolva === | ||
+ | |||
+ | '' | ||
+ | |||
+ | Melynek értelmezése: | ||
+ | |||
+ | Így tehát a Run-Length Encodinggal kódolt szöveg az eredeti 67 karaktert 18-cal írja le. Természetesen a valóságban nem karakterekkel, | ||
tanszek/oktatas/infrendalapjai_architekturak/informacio_feldolgozas/toemoerites.1731415745.txt.gz · Last modified: 2024/11/12 12:49 by knehez