„Huffman-kódolás” változatai közötti eltérés
[ellenőrzött változat] | [ellenőrzött változat] |
Tartalom törölve Tartalom hozzáadva
a Informatikai portál AWB |
Nincs szerkesztési összefoglaló |
||
5. sor:
Ezután a két vizsgált elemet kitöröljük a sorozatból, és azok összegét beszúrjuk az érték szerinti megfelelő helyre. Ezután folytatjuk az előző műveletet mindaddig, amíg van elem a sorozatban. Természetesen, a folytatásnál felhasználjuk a már meglévő csúcsokat is, csak újabb elemeknél hozunk létre újabbakat. Az így felépített fában a levelek az eredeti karaktereknek (illetve azok gyakoriságának) felelnek meg.
Az eredményül kapott fában, minden csúcs esetében címkézzük meg 0-val a
A gyökértől egy adott levélig egyetlen út halad. Ezen út éleihez rendelt 0 és 1 címkéket sorrendben összeolvasva, megkapjuk a levélhez rendelt karakter kódját. Látható, hogy a gyakoribb karakterek kódja rövidebb, míg a kevésbé gyakoribbaké hosszabb lesz.
Attól függően, hogy a bináris fa felépítésében egy adott lépésben melyik elem kerül balra és melyik jobbra, különböző eredményt kaphatunk, de ez nem befolyásolja a kapott kód hatékonyságát.
'''Az algoritmus pontos leírása:'''
* Legyenek a gyakoriságok: ''f<sub>1</sub> ≤ f<sub>2</sub>≤ ...≤ f<sub>n</sub>''.
* Ameddig a sorozat nem üres, végezzük el a következőket:
:* Amennyiben nem létezik
:* Hozzuk létre az ''
:* Töröljük ki a sorozatból az
* Az eredményül kapott bináris fa éleit címkézzük meg a fentebb leírt módon, megkapva ezáltal az egyes karakterek kódját.
Ha az ''i''-edik levél gyökértől mért távolságát <math>l_i</math>-vel jelöljük, akkor a Huffman-algoritmus által kapott fa esetében a <math>\sum_{i=1}^{n}l_if_i</math> összeg
A '''visszakódolást''' az teszi lehetővé, hogy egyik kód sem előszelete (prefixe, prefixuma) a többi kódnak. Így egy szövegben az első olyan kezdőszelet, amelyik egyenlő egy kóddal, egyértelműen meghatározza a kódolt karaktert.
27. sor:
==Példa==
[[Fájl:Huffman 1.JPG|bélyegkép|jobbra|320px|Az ''a)'', ''b)'', ''c)'',
[[Fájl:Huffman 2.JPG|bélyegkép|jobbra|320px|Az ''e)'' ábra]]
Az a, l, m, f, t és a szóköz (jelölése: <math>\sqcup</math>) karaktereket szeretnénk kódolni a Huffman-algoritmussal, megadva ezek gyakoriságát az alábbiak szerint:
{| {{széptáblázat}}
52. sor:
7, 8, 10, 15, 20, 40
Az első két elemből felépítjük
10, 15, 15, 20, 40
Itt most eldönthetjük, hogy az első vagy
Az újonnan kapott bináris fa a ''b)'' ábrán látható.
64. sor:
15, 20, 25, 40.
Az innen kapott fa a ''c)''
Innen kapjuk, hogy a sorozat most már:
25, 35, 40,
és a megfelelő bináris fát a ''d)'' ábra mutatja.
101. sor:
|}
Az „alma a fa alatt” szöveg kódolása:
1 001 0001 1 011 1 011 0000 1 011 1 001 1 010 010
(A szóközöket
Ha az utolsó lépésben a 40 lett volna a bal oldali csúcs, akkor a
{| {{széptáblázat}}
131. sor:
==Források==
* T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein: ''Új algoritmusok'',
* D. E. Knuth: ''A számítógép-programozás művészete 1. Alapvető algoritmusok'', Műszak Könyvkiadó, Budapest, 2. kiadás, 1994.
* D.A. Huffman: A Method for the Construction of Minimum-Redundancy Codes, ''Proceedings of the I.R.E.'', September 1952, pp. 1098–1102.
145. sor:
* [[Számrendszerek az informatikában]]
* [[Bit]]
{{Portál|Informatika|i }}
{{DEFAULTSORT:Huffmankodolas}}
|