Portál AbcLinuxu, 30. května 2024 00:03

Příběh Davida Huffmana

9.5.2006 10:04 | Přečteno: 1799× | Ostatní

Byla to výzva, jakých se denně na univerzitách a vysokých školách po celém světě urodí desítky. Profesor umožnil svým studentům vyhnout se zkoušce, když vyřeší složitý problém. Jednalo se o problém dosažitelnosti nejkratšího prefixového kódování (tzv. ideální kódování ve vztahu k informační entropii). Studenti ovšem nevěděli, že se jedná o nevyřešenou úlohu, protože v té době byly známy jen docela neúčinné metody (analýzou shora dolů).

Davidu Huffmanovi na univerzitě v Ohiu se ke zkoušce nechtělo. Ne snad proto, že by látce nerozuměl. Chtěl se jí prostě vyhnout, jenže úloha se zdála téměř neřešitelná. Když už chtěl nechat bádání a začít se na závěrečnou zkoušku učit, zadíval se na papír s poznámkami, které zlostně vyhodil do koše. V tu chvíli ho to napadlo.

Magistr Huffman později publikoval svůj nápad v práci nazvanou Metoda pro vytvoření kódu s minimální redundancí (A Method for the Construction of Minimum Redundancy Codes). Jeho řešení pomocí binárního stromu bylo velmi prosté a zároveň elegantní. Ale také velmi účinné v praxi. V tu dobu již působil na MIT (Massachusetts Institute of Technology), kde také získal rok nato doktorát.

Míru informace (přesněji řečeno nejistoty) stanovil poprvé americký vědec C. E. Shannon. Určuje nahodilost v nějakém signálu - například míru informace písmena "a" ve větě (v řetězci písmen). Čím více se pravděpodobnost výskytu písmena na dané pozici blíží hodnotě 0,5, tím vyšší má informační hodnotu. Více prozradí tento graf - na ose x je pravděpodobnost výskytu a je jasné, že pokud se písmeno v řetězci nevyskytuje, nebo je řetězec tvořen jen tímto písmenem, pak je míra informace minimální.

Princip spočívá ve vytvoření binárního stromu s ohodnocenými hranami (1,0) a uzly (pravděpodobnosti výskytu). Pravděpodobnost vnitřního uzlu je rovna součtu pravděpodobností jeho potomků. Ve výsledném stromu jsou kódované znaky uložené pouze v listech, takže je zaručeno, že kódování (tedy posloupnost ohodnocení hran od kořene k listu) bude prefixové (tedy žádná předpona nebude kódem jiného znaku - zakódovaný vstup bude jednoznačně dekódovatelný, protože neznáme šířky binárních kódů). Doporučuji shlédnout demonstrační applet.

Dnes se nejrůznější varianty Huffmanova kódování (například adaptivní varianta) používají v široké škále produktů, zejména je to neoddělitelná součást některých komprimačních algoritmů (PKZIP, JPEG, MP3, BZIP2). Zajímavé je, že algoritmus z unixového programu bzip2 používal nejdříve aritmetické kódování (jedná se o zobecněný princip Huffmanova kódování, algoritmus vykazuje mírně vyšší účinnost). Jelikož ale na tento algoritmus získala firma IBM v letech 1977-2001 přes desítku patentů a bylo prakticky nemožné jej efektivně implementovat bez použití těchto metod, programátoři tohoto open-source programu se rozhodli použít Huffmanovo kódování.

Profesor David A. Huffman stál při zrodu fakulty informatiky na kalifornské univerzitě a získal mnoho ocenění (kromě jiného medaili R. W. Hamminga při IEEE za celoživotní přínost pro informatiku). Po desetiměsíčním boji s rakovinou v říjnu 1999 zemřel. David Huffman svůj geniální nápad nikdy nepatentoval (ani nechtěl). Svému synovci říkával: "Vždyť je to jen algoritmus."

Článek vyšel na serveru Scienceworld.cz.

       

Hodnocení: 100 %

        špatnédobré        

Anketa

Při objevení nějakého nového algoritmu byste
 (13 %)
 (9 %)
 (18 %)
 (58 %)
 (2 %)
Celkem 88 hlasů

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (4) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

9.5.2006 11:18 Ivanhoej | skóre: 26 | blog: ss2_Debian | Bratislava
Rozbalit Rozbalit vše Re: Příběh Davida Huffmana
Odpovědět | Sbalit | Link | Blokovat | Admin
Len ma napadlo ci Huffyuv ten vyborny bezstratovy video kodek nepouziva nahodou algoritmus od tohoto pana?
http://neuron2.net/www.math.berkeley.edu/benrg/huffyuv.html
*** Jabber (XMPP): fogo@jabber.cz ***
9.5.2006 11:44 Lukáš Zapletal | skóre: 42 | blog: lzapův svět | Olomouc
Rozbalit Rozbalit vše Re: Příběh Davida Huffmana
Používá to JPEG, takže - ano.
9.5.2006 11:44 Lukáš Zapletal | skóre: 42 | blog: lzapův svět | Olomouc
Rozbalit Rozbalit vše Re: Příběh Davida Huffmana
Resp. jak se tam píše: Huffyuv's algorithm is roughly the same as lossless JPEG.
Heron avatar 9.5.2006 12:13 Heron | skóre: 53 | blog: root_at_heron | Olomouc
Rozbalit Rozbalit vše Re: Příběh Davida Huffmana
Odpovědět | Sbalit | Link | Blokovat | Admin
Pěkně napsaný. Už když jsem to četl ráno na scienceworldu, říkal jsem si, že tak dobře ta jejich "redakce" nepíše. Pak vidím autor: LZap.
Heron
9.5.2006 15:46 Lukáš Zapletal | skóre: 42 | blog: lzapův svět | Olomouc
Rozbalit Rozbalit vše Re: Příběh Davida Huffmana
Heh dík. Studoval jsem to kódování a nějak jsem se doklikal na Wikipedii. Mimochodem - Wikipedia už mě drahnou dobu pomáhá při studiu. Výborný to nástroj :-)
9.5.2006 15:16 zde | skóre: 9 | blog: Linuch | Brno
Rozbalit Rozbalit vše Re: Příběh Davida Huffmana
Odpovědět | Sbalit | Link | Blokovat | Admin
Tsss, nám konstrukci optimálního prefixového kódování dali za úkol v semináři. Bylo to v době kdy Huffmanův algoritmus nebyl široce znám, ani se nevyučoval. Z deseti lidí to zhruba třetina "znovuvynalezla", takže o žádný zázrak nejde. Já na to tehdy bohužel taky nepřišel, furt jsem to zkoušel shora dolů.
Táto, ty de byl? V práci, já debil.
9.5.2006 15:43 Lukáš Zapletal | skóre: 42 | blog: lzapův svět | Olomouc
Rozbalit Rozbalit vše Re: Příběh Davida Huffmana
Jaká že to byla škola a doba?

ps - v profilu čtu: Linux používám od roku: 1990? Čert ví..

Asi by to chtělo smajlík, protože linux-0.01 byl zveřejněn koncem roku 1991 ;-)
9.5.2006 16:43 zde | skóre: 9 | blog: Linuch | Brno
Rozbalit Rozbalit vše Re: Příběh Davida Huffmana
To bylo ještě na gymplu, takže druhá půlka osmdesátejch let.. Kdosi z Prahy dělal dálkové "semináře z programování", a Huffmanovo kódování byl jeden z úkolů.

Ad 90 vs 91: právě proto je tam to "čert ví" .-)
Táto, ty de byl? V práci, já debil.

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.