Huffmankoding - mest effektiv

Mange finner bevis vanskelig. Her er rom for spørsmål vedrørende bevis, og for å dele dine bevis med andre. Vi tenker først og fremst videregående nivå, men det er ingen begrensninger her.

Moderatorer: Vektormannen, espen180, Aleks855, Solar Plexsus, Gustav, Nebuchadnezzar, Janhaa

Svar
EScII
Pytagoras
Pytagoras
Innlegg: 12
Registrert: 24/10-2008 12:28

Jeg holder på med et prosjekt om Huffmanalgoritmen og jeg skulle gjerne hatt et bevis for at den faktisk lager det kortest mulige koden for en tegnstreng.

Takker for alle svar.
FredrikM
Poincare
Poincare
Innlegg: 1367
Registrert: 28/08-2007 20:39
Sted: Oslo
Kontakt:

Jeg har ikke lest dette, men den er resultatet etter et raskt søk på Google.

http://www.maths.abdn.ac.uk/~igc/tch/mx ... ode59.html
jeg skulle gjerne hatt et bevis for at den faktisk lager det kortest mulige koden for en tegnstreng.
Dette er ikke nødvendigvis tilfellet. Huffman-koding er optimal om vi baserer kodingen vår på et binært tre. Det fins flere andre komprimeringsmetoder som i noen tilfeller kan komprimere bedre enn Huffmann-koding.
Cube - mathematical prethoughts | @MatematikkFakta
Med forbehold om tullete feil. (både her og ellers)
EScII
Pytagoras
Pytagoras
Innlegg: 12
Registrert: 24/10-2008 12:28

Men så lenge hvert tegn skal ha hver sin kode, blir vel kodingen optimal ved bruk av Huffmanalgoritmen?
EScII
Pytagoras
Pytagoras
Innlegg: 12
Registrert: 24/10-2008 12:28

Mulig jeg tenker feil.
drgz
Fermat
Fermat
Innlegg: 757
Registrert: 24/12-2008 23:22

Vet ikke om det er dette du er på utkikk etter, men jeg gir det et forsøk, så får du heller si i fra hvis det er noe annet.

Huffmanalgoritmen gir optimal koding hvis alle symbolene fra kilden har en sannsynlighet som er en potens av 2.

[tex]L(C,X) = \sum_{i}p_{i}l_{i} \geq H(X) = \sum_{i}p_{i}log_{2}\left(\frac{1}{p_{i}}\right)[/tex]

1. Definer de ubetingede sannsynlighetene
[tex]q_{i}= \frac{2^{-l_{i}}}{z}[/tex], der [tex]z = \sum_{i_{b}}2^{-l_{i_{b}}}[/tex], slik at
[tex]l_{i} = log_{2}\left(\frac{1}{q_{i}}\right)-log_{2}(z)[/tex]

2. Bruk så Gibbs ulikhet som sier
[tex]\sum_{i}p_{i}log_{2}\left(\frac{1}{q_{i}}\right) \geq \sum_{i}{}p_{i}log_{2}\left(\frac{1}{p_{i}}\right)[/tex] med likhet hvis [tex]p_{i} = q_{i}[/tex]

3. Bruk så Kraftulikheten som sier at for enhver unik dekodbar kode [tex]C(X)[/tex] over det binære alfabetet [tex]\left{0,1\right}[/tex] må lengden på kodeordet tilfredsstille

[tex]\sum_{i=1}^{|A_{X}|}2^{-l_{i}} \leq 1[/tex], der [tex]|A_{X}|[/tex] er lengden på symbolalfabetet.

Dette gir at [tex]z \leq 1[/tex]

Da kan en utlede:

[tex]L(C,X) = \sum_{i}p_{i}l_{i} = \sum_{i}p_{i}log_{2}\left(\frac{1}{q_{i}}\right)-log_{2}(z) \geq \sum_{i}p_{i}log_{2}\left(\frac{1}{p_{i}}\right)-log_{2}(z) \geq H(X)[/tex]

Slik at en komprimerer ned til entropien hvis, og bare hvis, Kraftulikheten er oppfylt. Det vil si at [tex]z=1[/tex], noe som gir [tex]q_{i} = 2^{-l_{i}}[/tex], som er en potens av 2.
Svar