„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 Algoritmusok kategória eltávolítva; Tömörítő algoritmusok kategória hozzáadva (a HotCattel)
13. sor:
'''Az algoritmus pontos leírása:'''
 
* Legyenek a gyakoriságok: <i> ''f<sub>1</sub> ≤ f<sub>2</sub>≤ ...≤ f<sub>n</sub> </i>''.
* Ameddig a sorozat nem üres, végezzük el a következőket:
:* Amennyiben nem létezik az <i>'' f<sub>1</sub> </i> ''és <i>'' f<sub>2</sub> </i>'' címkéjű csúcs (egyike vagy mindkettő), hozzuk azt létre.
:* Hozzuk létre az <i>'' f<sub>1</sub> + f<sub>2</sub> </i>'' címkéjű csúcsot, amely legyen az előbbi két csúcs szülője, azaz kössük össze a szülőcsúcsot az előbbi kettővel egy-egy éllel.
:* Töröljük ki a sorozatból az <i>'' f<sub>1</sub></i> '' és <i>'' f<sub>2</sub> </i> '' értékeket, és szúrjuk be a megfelelő helyre ezek összegét úgy, hogy a sorozat növekvő maradjon. Az így kapott sorozatot jelöljük továbbra is az <i>'' f<sub>1</sub> ≤ f<sub>2</sub>≤ ...</i> '' módon.
* 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>i</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 lehető legkisebb. Ez biztosítja, hogy egy szöveg kódolása rövidebb lesz, mintha azonos hosszúságú kódot használtunk volna. Tulajdonképpen, bármilyen más kódolást használva, ennél jobb eredményt nem lehet elérni.
 
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.
 
Ezt az algoritmust David A. Huffman (1925–1999) írta le először egy mesteri vizgadolgozatban, és 1952-ben publikálta.
 
==Példa==