Wat is Huffman-code?

Methode om uit de kansen van de symbolen een prefixcode te maken waarvan de gemiddelde codelengte zo klein mogelijk is. Er wordt een boom opgebouwd door herhaaldelijk de twee symbolen (of knopen) met de kleinste kansen samen te voegen tot één, en aan elke vertakking worden 0 en 1 toegekend om de codewoorden te vormen. Hoe vaker een symbool voorkomt, hoe korter zijn codewoord. Ze is optimaal onder de prefixcodes die één symbool tegelijk coderen, en haar gemiddelde codelengte is minstens de entropie en kleiner dan de entropie + 1 bit. Ze wordt in combinatie met andere methoden gebruikt in Deflate (ZIP, gzip), JPEG en elders. Huffman publiceerde haar in 1952.

Japanse benaming: ハフマン符号

“Huffman-code” komt voor in 5 oefenvragen uit 1 onderwerpen, bijv. Basis van informatietheorie en codering.

Vakgebied: Basis van informatietheorie en codering

Hoe je er een maakt

Voor symbolen met kansen 1/2, 1/4, 1/8 en 1/8 worden eerst de twee keer 1/8 samengevoegd tot 1/4, dan dat en de 1/4 tot 1/2, en ten slotte dat en de resterende 1/2. Door de takken van de wortel naar elk symbool met 0 en 1 te labelen krijgt men de codewoorden 0, 10, 110 en 111, met een gemiddelde codelengte van 1,75 bit, gelijk aan de entropie. Wanneer elke kans het omgekeerde is van een macht van 2, valt de gemiddelde codelengte zo samen met de entropie.

De codewoorden zijn niet uniek

De codewoorden veranderen afhankelijk van hoe 0 en 1 worden toegekend en welke van twee gelijke kansen eerst wordt samengevoegd. Met kansen 0,4; 0,2; 0,2; 0,1 en 0,1 kunnen de codelengtes bijvoorbeeld 1, 2, 3, 4, 4 of 1, 3, 3, 3, 3 of 2, 2, 2, 3, 3 zijn, maar de gemiddelde codelengte is in alle gevallen 2,2 bit. Daarom vragen examens eerder naar de gemiddelde codelengte dan naar de codewoorden zelf.

Grenzen en verbeteringen

Codelengtes zijn beperkt tot gehele aantallen bits, dus voor een bron met een symbool waarvan de kans dicht bij 1 ligt, wordt het verschil met de entropie groot. Binaire symbolen één voor één coderen kost 1 bit per symbool, hoe scheef ze ook verdeeld zijn. Symbolen samen coderen, of een methode gebruiken die niet aan hele bits gebonden is, zoals aritmetische codering, brengt de lengte dichter bij de entropie.

Nu oefenen: vragen over Huffman-code

Een bron zendt de symbolen A, B, C en D onafhankelijk uit met kansen 0,4; 0,3; 0,2 en 0,1, en wordt gecodeerd met een Huffman-code. Wat is de gemiddelde codelengte per symbool?

  1. AOngeveer 1,85 bit
  2. B1,9 bit
  3. C2 bit
Antwoord en toelichting tonen

Antwoord: B. 1,9 bit

Een Huffman-code voegt herhaaldelijk de twee kleinste kansen samen. Eerst worden 0,1 en 0,2 samengevoegd tot 0,3, daarna 0,3 en 0,3 tot 0,6, en ten slotte 0,6 en 0,4, zodat de codelengtes 1 bit voor A, 2 bit voor B en 3 bit voor C en D zijn. De gemiddelde codelengte is 0,4 × 1 + 0,3 × 2 + 0,2 × 3 + 0,1 × 3 = 1,9 bit.

Een bron zendt de symbolen A tot E onafhankelijk uit met kansen 0,3; 0,25; 0,2; 0,15 en 0,1, en wordt gecodeerd met een Huffman-code. De codewoorden kunnen veranderen afhankelijk van welke van twee gelijke kansen eerst wordt gekozen, maar de gemiddelde codelengte niet. Wat is de gemiddelde codelengte per symbool?

  1. A2,25 bit
  2. B2,4 bit
  3. C3 bit
Antwoord en toelichting tonen

Antwoord: A. 2,25 bit

Eerst worden 0,1 en 0,15 samengevoegd tot 0,25, daarna 0,2 en 0,25 tot 0,45, vervolgens de resterende 0,25 en 0,3 tot 0,55, en ten slotte 0,45 en 0,55. De codelengtes zijn 2 bit voor A, B en C en 3 bit voor D en E, en de gemiddelde codelengte is (0,3 + 0,25 + 0,2) × 2 + (0,15 + 0,1) × 3 = 1,5 + 0,75 = 2,25 bit. Bij een bron waarvan de kansen weinig scheef verdeeld zijn, is een code met bijna gelijke lengtes korter dan een code met trapsgewijze lengtes zoals 1, 2, 3, 4, 4.

Veelgestelde vragen

Wat is nodig om gegevens te herstellen die met een Huffman-code zijn gecomprimeerd?

Om de gegevens te herstellen moet bekend zijn welk codewoord aan welk symbool is toegekend (een codetabel, of de codelengte van elk symbool). Gecomprimeerde gegevens dragen de codetabel daarom met zich mee of gebruiken een vooraf afgesproken tabel. Deflate stuurt alleen de codelengtes, en de ontvanger bouwt de codewoorden opnieuw op volgens dezelfde regel (canonieke Huffman-codes).

Kan een Huffman-code alle gegevens kleiner maken?

Nee. Zijn de kansen van de symbolen niet scheef verdeeld, dan krimpen de gegevens nauwelijks. In gegevens waarin alle 256 bytewaarden even waarschijnlijk zijn, is bijvoorbeeld elk codewoord 8 bits lang, en de codetabel maakt het resultaat iets groter.

“Huffman-code” in de toelichting

Vragen met “Huffman-code” (5)

  1. Een bron zendt de symbolen A, B, C en D onafhankelijk uit met kansen 0,4; 0,3; 0,2 en 0,1, en wordt gecodeerd met een Huffman-code. Wat is de gemiddelde codelengte per symbool?
  2. Een bron zendt de symbolen A tot E onafhankelijk uit met kansen 0,3; 0,25; 0,2; 0,15 en 0,1, en wordt gecodeerd met een Huffman-code. De codewoorden kunnen veranderen afhankelijk van welke van twee gelijke kansen eerst wordt gekozen, maar de gemiddelde codelengte niet. Wat is de gemiddelde codelengte per symbool?
  3. Een bron zendt de symbolen A, B en C onafhankelijk uit met kansen 0,6; 0,3 en 0,1, en haar entropie is ongeveer 1,30 bit. Welke waarde ligt het dichtst bij het rendement (entropie ÷ gemiddelde codelengte) wanneer deze bron met een Huffman-code wordt gecodeerd?
  4. Een binaire bron zendt onafhankelijk 0 uit met kans 0,8 en 1 met kans 0,2. De symbolen worden per twee genomen, elk van de vier paren 00, 01, 10 en 11 wordt als één symbool behandeld, en ze worden gecodeerd met een Huffman-code. Wat is de gemiddelde codelengte per oorspronkelijk symbool?
  5. Welke beschrijving van het idee achter de LZ77-methode, die in ZIP, gzip en vergelijkbare tools wordt gebruikt, is juist?

Verwante termen

Gemiddelde codelengte Informatie-entropie Verliesvrije compressie Binair symmetrisch kanaal Compressie met verlies Forward error correction (FEC) Hamming-afstand Hamming-code Informatie-inhoud Ongelijkheid van Kraft

Naar de woordenlijst