Wie gut ist der Huffman-Code, wenn keine großen Wahrscheinlichkeitsbuchstaben vorhanden sind?

21

Der Huffman-Code für eine Wahrscheinlichkeitsverteilung ist der Präfixcode mit der minimalen gewichteten durchschnittlichen Codewortlänge , wobei die Länge des ten Codeworts ist. Es ist ein bekanntes Theorem, dass die durchschnittliche Länge pro Symbol des Huffman-Codes zwischen und , wobei die Shannon-Entropie ist der Wahrscheinlichkeitsverteilung.ppiiiiH(p)H(p)+1H(p)=ipilog2pi

Das kanonisch schlechte Beispiel, bei dem die durchschnittliche Länge die Shannon-Entropie um fast 1 überschreitet, ist eine Wahrscheinlichkeitsverteilung wie , bei der die Entropie nahezu 0 ist und die durchschnittliche Codewortlänge 1 beträgt eine Lücke zwischen der Entropie und der Codewortlänge von fast .{.999,.001}1

Aber was passiert, wenn die Wahrscheinlichkeitsverteilung an die größte Wahrscheinlichkeit gebunden ist? Angenommen, alle Wahrscheinlichkeiten sind kleiner als . Die größte Lücke, die ich in diesem Fall finden konnte, ist für eine Wahrscheinlichkeitsverteilung wie , bei der die Entropie etwas mehr als 1 und die durchschnittliche Codewortlänge etwas weniger als 1,5 beträgt, was a ergibt Lücke nähert sich . Ist das das Beste, was du tun kannst? Können Sie eine Obergrenze für die Lücke angeben, die in diesem Fall streng unter 1 liegt?12{.499,.499,.002}0.5

Betrachten wir nun den Fall, in dem alle Wahrscheinlichkeiten sehr klein sind. Angenommen , Sie eine Wahrscheinlichkeitsverteilung über wählen Buchstaben, von denen jede Wahrscheinlichkeit . In diesem Fall tritt die größte Lücke auf, wenn Sie wählen . Hier erhalten Sie eine Lücke von ungefähr Ist dies das Beste, was Sie in einer Situation tun können, in der alle Wahrscheinlichkeiten gering sind?M1/MM2kln2

1+lnln2ln2ln20.08607.

Diese Frage wurde von dieser TCS Stackexchange-Frage inspiriert .

Peter Shor
quelle

Antworten:

19

Es gibt viele Artikel, die genau das Problem untersuchen, das Sie ansprechen. Die erste in der Reihe ist ein Artikel von Gallager, "Variations on a Theme von Huffman", IEEE-IT, vol. 24, 1978, S. 668-674. Er beweist , dass die Differenz zwischen der durchschnittlichen Codewortlänge eines Huffman - Codes und der Entropie (er nennt diese Menge „Redundanz“) ist immer streng kleiner als (= größte Wahrscheinlichkeit in der Wahrscheinlichkeitsverteilung) im Fall p 1 / 2 und es ist weniger als p + 0,086 , wenn p < 1 / 2 . Bessere Grenzen sind bekannt, Sie können sie in den zahlreichen Artikeln finden, die Gallager Arbeiten zitieren.pp1/2p+0.086p<1/2

Ugo
quelle
2
Die optimale Grenze wurde von Manstetten gefunden. Enge Grenzen für die Redundanz von Huffman-Codes .
Yuval Filmus
2

Nach der Grenze von urteilen , haben Sie vermutlich beabsichtigt, eine andere Frage zu stellen ... oder Sie haben einfach nicht angegeben, wie Sie den "Durchschnitt" nehmen. Also werde ich beides beantworten. Die Antwort ist nein auf beide Fragen.H(p)H(p)+1

Wenn Sie die durchschnittliche Codelänge unter Verwendung einer gleichmäßigen Verteilung über Codewörter definieren und als obere Grenze für die Wahrscheinlichkeit eines Elements verwenden, betrachten Sie zunächst den Längencode mit Codewörter haben die Länge und die verbleibenden haben die Länge . Für die durch diesen Code perfekt codierte Verteilung nähert sich die durchschnittliche Länge , es sei denn, Sie haben auch eine Untergrenze für die Wahrscheinlichkeit eines Elements, während die Entropie . q + k 2 q - 1 q 2 q + k - 1 q + k q + k q + k2qq+k2q1q2q+k1q+kq+kq+k2

Betrachten wir nun die "durchschnittliche Länge", dh die durchschnittliche Codewortlänge, wenn der Huffman-Code zum Codieren von . Hier ist die Schranke eng, und eine beispielhafte Verteilung, die diese Grenze erreicht, ist eine, bei der jedes Element mit einer Wahrscheinlichkeit von für auftritt(Dem letzten Element wird eine Restwahrscheinlichkeit zugewiesen, die jedoch asymptotisch keinen Unterschied macht.)2 q ± 1 / 2 q Z .p2q±1/2qZ.

Betrachten Sie zum Beispiel Dannq=7.

A+B=128,A2+B/2128,maxAZA ergibt . Unsere Distribution hat Elemente mit einer Wahrscheinlichkeit von , mit einer Wahrscheinlichkeit von und ein Element erhält die Reste.52 2 - 6.5 76 2 - 7,5A=52,B=765226.57627.5

Dann ist , während der Huffman-Code einen Entropieverlust von . (Übrigens hat der Entropieverlust einen Namen, egal ob Sie Huffman-Codierung oder beliebige Codierung für : die Kullback-Liebler-Divergenz . Ich habe vor ein paar Tagen herausgefunden, dass die Verwendung zu engeren doppelseitigen Chernoff-Grenzen führt, wie Sie auf Wikipedia für Chernoff-Grenzen sehen können.)( 52 0,5 - 76 0,5 ) / 128 0,99436 Q D ( P Q ) = Σ p i log p iH(X)=(526.5+767.5)/128=7.09375(520.5760.5)/1280.99436QD(PQ)=pilogpiqi+(1pi)log1pi1qi

Carl
quelle
1
Dieses zweite Beispiel verblüfft mich ein wenig. Wenn Sie 128 Codewörter haben, gibt es einen Code mit einer durchschnittlichen Wortlänge von 7 (tatsächlich haben alle Wortlängen 7), was Ihrer Aussage, dass die Entropie 7.09375 ist, widerspricht. Die Entropie dieser Verteilung (die Sie erhalten, indem Sie einen gewichteten Durchschnitt von und keinen Durchschnitt nehmen) beträgt 6,88, während die durchschnittliche Länge des Huffman-Codes 7 beträgt. Dies ergibt eine Lücke (oder Kullback-Liebler-Divergenz) von um 0.12, was ziemlich viel besser zu sein scheint als mein Beispiel, aber nicht nahe am 1.log2pi
Peter Shor
Und in der Tat hast du recht. Ich wollte nach der erwarteten Codewortlänge unter der Wahrscheinlichkeitsverteilung fragen . p
Peter Shor
Hoppla, ich habe mich über gegen verrechnet . Wir wollen weiterhin, dass etwas kleiner als , aber so etwas wie , um die kleineren Einträge in die untere Zeile zu zwingen. Dies ergibtB A AB 2kA+2B=2kA= 2 - 1 / A2+B/22kA+2B=2kA=21/221B.
Carl
Eigentlich wäre das ... aber dieses Gleichungssystem hat keine positive Lösung - es scheint, dass wir nicht alles zu einer halben ganzen Potenz von zwingen können . Anstelle von und wir z. B. für die Hälfte des Huffman-Codes und berücksichtigen. für den Rest Einträge geben ...2 2A+B2 1/2 (1+x)/2k(1-x)/2 k + 1 32k1/2(1+x)/2k(1x)/2k+132k
Carl
Probieren Sie dies aus (nicht optimal - das hängt vermutlich davon ab, wie Sie ab- oder aufrunden möchten). Einträge mit einer Wahrscheinlichkeit von und Einträge mit einer Wahrscheinlichkeit von eine Entropie von . Ändern Sie dies stattdessen in Einträge mit einer Wahrscheinlichkeit von und Einträge mit einer Wahrscheinlichkeit von . Die Entropie dieser Verteilung beträgt 5,802, was 6,4023 ergibt, während die Entropie des Huffman-Codes unter Uniform 7,5 beträgt, undWenn ich mich also nicht verrechnet habe (und das tue ich oft), ergibt sich eine Lücke von ungefähr1 / 128 128 1 / 256 7,5 64 1 / 128 641/1281281/2567.564 1281/256(2-1/1/12821281/(21/256(21/2)(1-2 - 1,5 )*7+2 - 1,5 *8=7,3535. 0,951/(22)7.5+(11/(2(2)))5.802(121.5)7+21.58=7.3535.0.95 .
Carl