> huffman | optimal | koding <
// Huffman-koding – optimalt prefiksfritt komprimeringsalgoritme
>> funksjoner
Optimale koder
Gir kortest mulig gjennomsnittlig kodelengde for de gitte frekvensene.
Prefiksfri
Ingen kode er prefiks for en annen, noe som gir entydig dekoding.
Frekvensbasert
Vanlige tegn får automatisk kortere koder.
>> teknisk info
Hvordan fungerer Huffman-koding?
Huffman-koding bygger et binært tre nedenfra og opp. Med utgangspunkt i tegnfrekvenser kombineres gjentatte ganger de to nodene med lavest frekvens til en foreldrenode, til bare roten står igjen. Venstre grener representerer '0', høyre grener '1'. Tegn som forekommer oftere får kortere koder, noe som gir optimal komprimering for den gitte frekvensfordelingen.
Eksempel på Huffman-koding
Text: "AABBBCCCC"
Frequencies:
A: 2
B: 3
C: 4
Tree Building:
1. Combine A(2) + B(3) = AB(5)
2. Combine C(4) + AB(5) = Root(9)
Tree:
Root(9)
/ \
C(4) AB(5)
/ \
A(2) B(3)
Codes:
C: 0
A: 10
B: 11
Encoded: 10 10 11 11 11 0 0 0 0
= 1010111111 0000
Hvorfor bruke Huffman-koding?
- Nær optimalt kompresjonsnivå
- Enkelt å implementere
- Grunnleggende teknologi bak ZIP/JPEG
- Ingen tap av data
- Dokumentert effektivitet i praksis
>> ofte stilte spørsmål
Hva er Huffman-koding?
Huffman-koding er en optimal, prefiksfri komprimeringsalgoritme utviklet av David A. Huffman i 1952. Den tildeler tegn variable kodelengder basert på frekvensen deres; tegn som forekommer oftere får kortere koder, slik at den gjennomsnittlige kodelengden blir minimal.
Hvorfor kalles den prefiksfri?
En kode er prefiksfri når ingen kodeord er prefiks for et annet. Hvis for eksempel 'A' kodes som '01', kan ingen andre tegn ha en kode som starter med '01'. Dette sikrer entydig dekoding – du kan se hvor én kode slutter og den neste begynner uten ekstra skilletegn.
Hvor effektiv er Huffman-koding?
Huffman-koding oppnår optimal komprimering for en gitt frekvensfordeling, vanligvis innenfor 1 bit fra den teoretiske entropigrensen. For engelsk tekst gir den ofte 60–70 % komprimering og er spesielt effektiv når tegnfrekvensene varierer mye.
Hvor brukes Huffman-koding?
Huffman-koding brukes i JPEG-bildekomprimering, ZIP-filkomprimering (sammen med LZ77 i DEFLATE), MP3-lyd og mange andre formater. Den kombineres ofte med andre algoritmer – for eksempel bruker JPEG Huffman etter DCT og kvantisering, mens ZIP bruker det etter LZ77.