Quelle est la complexité du calcul des codes libres de préfixe optimaux, lorsque les fréquences sont similaires?

13

Il est bien connu qu'il existe un algorithme optimal dans le pire des cas pour calculer le code Huffman dans le temps θ(nlgn) . Ceci est amélioré de deux manières orthogonales:

  1. Des codes libres de préfixe optimaux peuvent être calculés plus rapidement si l'ensemble de fréquences distinctes est petit (par exemple de taille σ ): triez les fréquences à l'aide de [Munro et Spira, 1976] afin de tirer parti de la petite valeur de σ , et calculez le Huffman arbre en temps linéaire à partir des fréquences triées. Cela donne une solution dans O(nlgσ)

  2. Il existe un algorithme O(n16k) pour calculer des codes équivalents où k est le nombre de longueurs de mots de code distinctes [Belal et Elmasry].

O(nmin{16k,lgσ})


LE RÉSULTAT DES STACS 2006 SEMBLE ÊTRE MAUVAISO(nk) O ( 16 k n ) O ( 9 k log 2 k - 1 n ) , Elmasry a publié sur ARXIV en 2010 (http://arxiv.org/abs/cs/0509015) une version annonçant - des opérations sur les entrées non triées et - opérations sur une entrée triéeO(16kn)O(9kJournal2k-1n)


  1. Je vois une analogie avec la complexité du calcul de la coque convexe planaire, où les algorithmes en (basé sur le tri, comme l' algorithme pour le code de Huffman) et en (cadeau wrapping) ont été remplacés par l'algorithme de Kirkpatrick et Seidel dans (qui s'est avéré plus tard être optimal par exemple avec la complexité de la forme ). Dans le cas des codes libres préfixés, versus suggère la possibilité d'un algorithme de complexité , voire où est le nombre de mots de code de longueurO ( 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 ,O(nlgn)O(nlgn)O(nh)O(nlgh)O(nH(n1,,nk)O(nlgn)O(nk)O(nlgk)O(nH(n1,,nk)njeje, en utilisant l'analogie d'un bord de la coque convexe couvrant pointe vers une longueur de code couvrant symboles.njenje

  2. Un exemple simple montre que le tri des valeurs logarithmiques (arrondies) des fréquences (en temps linéaire dans le θ(lgn) modèle RAM de mot ) ne donne pas un code libre de préfixe optimal en temps linéaire:

    • Pour ,n=3F1=1/2-ε etF2=F3=1/4+ε
    • lgFje=2 donc le tri des journaux ne change pas l'ordre
    • pourtant, deux codes sur trois coûtent bits de plus qu'optimal.n/4
  3. Une autre question intéressante serait de réduire la complexité lorsque est grand, c'est-à-dire que tous les codes ont des longueurs distinctes:k

    • par exemple, lorsque les fréquences ont toutes une valeur de log distincte. Dans ce cas on peut trier les fréquences en temps linéaire dans le θ ( lgk=nmot RAM n ) , et calculer le code Huffman en temps linéaire (car le tri de leurs valeurs logarithmiques suffit pour trier les valeurs), ce qui donne un temps linéaire global, beaucoup mieux que le n 2 de l'algorithme de Belal et Elmasry.θ(lgn)n2
Jeremy
la source

Réponses:

1

Cela a pris quelques années (cinq!), Mais voici une réponse partielle à la question:

http://arxiv.org/abs/1602.00023

Codes gratuits de préfixe optimal avec tri partiel Jérémy Barbay (Soumis le 29 janvier 2016)

Nous décrivons un algorithme calculant un code libre optimal de préfixe pour n poids positifs non triés dans le temps dans O (n (1 + lgα)) ⊆O (nlgn), où l'alternance α∈ [1..n − 1] mesure la quantité de tri requis par le calcul. Cette complexité asymptotique se situe dans un facteur constant de l'optimal dans le modèle de calcul de l'arbre de décision algébrique, dans le pire des cas sur toutes les instances de taille n et d'alternance α. De tels résultats affinent la complexité de l'état de l'art de Θ (nlgn) dans le pire des cas par rapport aux instances de taille n dans le même modèle de calcul, un point de repère en compression et en codage depuis 1952, par la simple combinaison de l'algorithme de van Leeuwen pour calculer le préfixe optimal codes libres à partir de poids triés (connus depuis 1976), avec des structures de données différées pour trier partiellement un multiset en fonction des requêtes qu'il contient (connus depuis 1988).

Jeremy
la source