Es ist bekannt, dass es einen optimalen Algorithmus für den ungünstigsten Fall gibt, um den Huffman-Code in der Zeit zu berechnen . Dies wird auf zwei orthogonale Arten verbessert:
Optimale freie Präfixcodes können schneller berechnet werden, wenn die Menge der verschiedenen Frequenzen klein ist (z. B. mit der Größe ): Sortieren Sie die Frequenzen mit [Munro und Spira, 1976], um den kleinen Wert von auszunutzen und den Huffman zu berechnen Baum in linearer Zeit von den sortierten Frequenzen. Dies ergibt eine Lösung in
Es gibt einen -Algorithmus zum Berechnen äquivalenter Codes, wobei k die Anzahl unterschiedlicher Codewortlängen ist [Belal und Elmasry].
Das -Ergebnis von STACS 2006 scheint falsch zu sein . Elmasry veröffentlichte 2010 auf ARXIV (http://arxiv.org/abs/cs/0509015) eine Version, in der -Operationen für unsortierte Eingaben und - Operationen für sortierte EingabenO ( 9 k log 2 k - 1 n )
Ich sehe eine Analogie zur Komplexität der Berechnung der planaren konvexen Hülle, bei der Algorithmen in (sortierungsbasiert, als -Algorithmus für Huffmans Code) und in (Geschenk) Wrapping) wurden von Kirkpatricks und Seidels Algorithmus in (später erwies es sich als optimal mit der Komplexität der Form ). gegen legt die Möglichkeit eines Algorithmus mit der Komplexität oder sogar wobei die Anzahl der Codewörter der Länge istO ( n lg n ) O ( n h ) O ( n lg h ) O ( n H ( n 1 , ... , n k ) O ( n lg n ) O ( n k ) O ( n lg k ) O ( n H ( n 1 ,unter Verwendung der Analogie einer Kante der konvexen Hülle, die bedeckt, zeigt auf eine Codelänge, die Symbole bedeckt .
Ein einfaches Beispiel zeigt, dass das Sortieren der (gerundeten) logarithmischen Werte der Frequenzen (in linearer Zeit im -Wort-RAM-Modell) keinen optimalen freien Präfixcode in linearer Zeit ergibt:
- Für ist und
- damit die Protokollsortierung die Reihenfolge nicht ändert
- dennoch kosten zwei von drei Codes Bits mehr als optimal.
Eine andere interessante Frage wäre, die Komplexität zu reduzieren, wenn groß ist, dh alle Codes unterschiedliche Längen haben:
- Wenn zum Beispiel die Frequenzen alle einen unterschiedlichen log-Wert. In diesem Fall kann man die Frequenzen in linearer Zeit im -Wort-RAM sortieren und den Huffman-Code in linearer Zeit berechnen (da das Sortieren ihrer Protokollwerte ausreicht, um die Werte zu sortieren), was zu einer linearen Gesamtzeit führt , viel besser als die aus dem Algorithmus von Belal und Elmasry.
quelle