Wie komplex ist die Berechnung optimaler, vorwahlfreier Codes, wenn die Frequenzen ähnlich sind?

13

Es ist bekannt, dass es einen optimalen Algorithmus für den ungünstigsten Fall gibt, um den Huffman-Code in der Zeit zu berechnen θ(nlgn). Dies wird auf zwei orthogonale Arten verbessert:

  1. 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 Ö(nlgσ)

  2. Es gibt einen -Algorithmus zum Berechnen äquivalenter Codes, wobei k die Anzahl unterschiedlicher Codewortlängen ist [Belal und Elmasry].Ö(n16k)k

Ö(nMindest{16k,lgσ})


Das -Ergebnis von STACS 2006 scheint falsch zu seinÖ(nk) . 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 )Ö(16kn)Ö(9kLog2k-1n)


  1. 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 ,Ö(nlgn)Ö(nlgn)Ö(nh)Ö(nlgh)Ö(nH(n1,,nk)Ö(nlgn)Ö(nk)Ö(nlgk)Ö(nH(n1,,nk)nichichunter Verwendung der Analogie einer Kante der konvexen Hülle, die bedeckt, zeigt auf eine Codelänge, die Symbole bedeckt .nichnich

  2. 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: θ(lgn)

    • Für ist undn=3f1=1/2-εf2=f3=1/4+ε
    • lgfich=2 damit die Protokollsortierung die Reihenfolge nicht ändert
    • dennoch kosten zwei von drei Codes Bits mehr als optimal.n/4
  3. Eine andere interessante Frage wäre, die Komplexität zu reduzieren, wenn groß ist, dh alle Codes unterschiedliche Längen haben:k

    • 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.k=nθ(lgn)n2
Jeremy
quelle

Antworten:

1

Es hat ein paar Jahre gedauert (fünf!), Aber hier ist eine teilweise Antwort auf die Frage:

http://arxiv.org/abs/1602.00023

Optimales Präfix für freie Codes mit teilweiser Sortierung Jérémy Barbay (Eingereicht am 29. Januar 2016)

Wir beschreiben einen Algorithmus, der einen optimalen Präfix-freien Code für n unsortierte positive Gewichte in der Zeit innerhalb von O (n (1 + lgα)) ⊆O (nlgn) berechnet, wobei die Abwechslung α∈ [1..n − 1] die Menge von misst für die Berechnung erforderliche Sortierung. Diese asymptotische Komplexität liegt in einem konstanten Faktor des Optimums im Rechenmodell des algebraischen Entscheidungsbaums, im schlimmsten Fall über alle Fälle von Größe n und Alternation α. Solche Ergebnisse verfeinern die Komplexität von Θ (nlgn) nach dem Stand der Technik im ungünstigsten Fall gegenüber Instanzen der Größe n im selben Rechenmodell, einem Meilenstein in Komprimierung und Codierung seit 1952, durch die bloße Kombination des van Leeuwen-Algorithmus zur Berechnung des optimalen Präfix Freie Codes aus sortierten Gewichten (seit 1976 bekannt), mit verzögerten Datenstrukturen zum teilweisen Sortieren eines Multisets in Abhängigkeit von den Abfragen (seit 1988 bekannt).

Jeremy
quelle