時間ハフマン符号を計算する最悪の場合の最適なアルゴリズムがあることはよく知られています。これは、2つの直交する方法で改善されています。
異なる周波数のセットが小さい場合(サイズ)、最適なプレフィックスフリーコードをより高速に計算できます。[Munro and Spira、1976]を使用して周波数を並べ替え、σの小さい値を利用してハフマンを計算しますソートされた周波数からの線形時間のツリー。これは、溶液が得られるO (N LG σを)
存在する同等のコードを計算するアルゴリズムkがある異なる符号語長の数 [BelalとElmasryは]。
現在の最良の複雑さを改善するためには、これらの技術を組み合わせる方法がある?
STACS 2006からの結果間違っているように見える、Elmasryは(http://arxiv.org/abs/cs/0509015)2010年arXivの上で発表バージョン公表- ソートされていない入力の操作をおよび-O (9 k log 2 k − 1 n )ソートされた入力に対する操作
(ソートに基づいて、ハフマンのコードのO (n lg n )アルゴリズムとして)およびO (n h )(ギフト包装)のアルゴリズムで、平面凸包の計算の複雑さと類似しています)はO (n lg h )のKirkpatrickとSeidelのアルゴリズムに取って代わられました(後にO (n H (n 1、… 、n kの形式の複雑さでインスタンス最適であることが証明されました))。Prefix Freeコードの場合、 O (n lg n )対ここで、 n iは長さ iのコードワードの数で、 n iをカバーする凸包のエッジの類似性を使用しますは、複雑度 O (n lg k )または O (n H (n 1、… 、n k)のアルゴリズムの可能性を示唆します。個のシンボルをカバーするコード長を指します。
単純な例では、周波数の(丸められた)対数値(ワードRAMモデルの線形時間)を並べ替えても、線形時間で最適なプレフィックスのないコードが得られないことが示されています。
- 以下のための、F 1 = 1 / 2 - ε及びF 2 = F
- ので、順序を変更しないソートログイン
- しかし、3つのうち2つのコードのコストはビットが最適です。
別の興味深い質問は、が大きい場合の複雑さを減らすことです。つまり、すべてのコードの長さが異なります。
- たとえば、、周波数はすべて個別の対数値です。この場合、θ (lg n )ワードRAMの線形時間で周波数をソートし、線形時間でハフマンコードを計算できます(ログ値をソートするだけで値をソートできるため)。BelalとElmasryのアルゴリズムのn 2よりも優れています。