É sabido que existe um algoritmo ideal para o pior caso para calcular o código de Huffman no tempo . Isso é aprimorado de duas formas ortogonais:
Os códigos livres de prefixo ideal podem ser calculados mais rapidamente se o conjunto de frequências distintas for pequeno (por exemplo, de tamanho ): classifique as frequências usando [Munro e Spira, 1976], de modo a tirar proveito do pequeno valor de e calcule o Huffman árvore em tempo linear a partir das frequências ordenadas. Isso produz uma solução em
Existe um algoritmo para calcular códigos equivalentes em que é o número de comprimentos distintos de palavras de código [Belal e Elmasry].
O RESULTADO DE STACS 2006 parecem ser errados O ( 16 k n ) O ( 9 k log 2 k - 1 n ) , Elmasry publicado no arXiv em 2010 (http://arxiv.org/abs/cs/0509015) uma versão anunciando - operações na entrada não triados e - operações na entrada classificada
Vejo uma analogia com a complexidade da computação do casco plano convexo, em que algoritmos em (com base na classificação, como o algoritmo para o código de Huffman) e em (presente foram substituídos pelo algoritmo de Kirkpatrick e Seidel em (mais tarde provou ser uma instância ideal com complexidade do formato ). versus sugere a possibilidade de um algoritmo com complexidade ou mesmo que é o número de palavras de código de comprimentoO ( n lg n ) O ( n h ) O ( n lg h ) O ( n H ( n 1 , … , n k ) O ( n lg n ) O ( n lg n ) O ( n k ) O ( n lg k ) O ( n H ( n 1 ,, usando a analogia de uma aresta do casco convexo que cobre aponta para um comprimento de código que cobre símbolos.
Um exemplo simples mostra que a classificação dos valores logarítmicos (arredondados) das frequências (em tempo linear no modelo de RAM word ) não fornece um código livre ideal do prefixo em tempo linear:
- Para , e
- para que a classificação dos logs não mude de ordem
- no entanto, dois códigos em cada três custam bits mais do que o ideal.
Outra questão interessante seria reduzir a complexidade quando for grande, ou seja, todos os códigos têm comprimentos distintos:
- por exemplo, quando as frequências têm todos valores de log distintos. Nesse caso, pode-se classificar as freqüências em tempo linear na RAM palavra e calcular o código de Huffman em tempo linear (porque classificar seus valores de log é suficiente para classificar os valores), resultando em tempo linear geral , muito melhor que o do algoritmo de Belal e Elmasry.