В чем сложность вычисления оптимальных кодов без префиксов при одинаковых частотах?

13

Хорошо известно, что в худшем случае существует оптимальный алгоритм для вычисления кода Хаффмана за время θ(NЛ.Г.N) . Это улучшается двумя ортогональными способами:

  1. Оптимальные коды без префиксов могут быть вычислены быстрее, если набор различных частот мал (например, имеет размер σ ): отсортируйте частоты, используя [Munro and Spira, 1976], чтобы воспользоваться небольшим значением σ , и вычислите Хаффмана дерево за линейное время от отсортированных частот. Это дает решение в О(NЛ.Г.σ)

  2. Существует алгоритм О(N16К) для вычисления эквивалентных кодов, где К - это количество различных длин кодовых слов [Belal and Elmasry].

О(Nмин{16К,Л.Г.σ})


РЕЗУЛЬТАТ ОТ STACS 2006 SEEM быть неправымО(NК) , Elmasry опубликовано Arxiv в 2010 году (http://arxiv.org/abs/cs/0509015) версия объявляя - операции на несортированном входе и - операций с отсортированным вводомO ( 9 k log 2 k - 1 n )О(16КN)О(9Кжурнал2К-1N)


  1. Я вижу аналогию со сложностью вычисления плоской выпуклой оболочки, где алгоритмы в (на основе сортировки, как алгоритм для кода Хаффмана) и в (подарок обертывание) были заменены алгоритмом Киркпатрика и Зейделя в (позже оказалось, что он является оптимальным для экземпляра со сложностью формы ). В случае свободных кодов префиксов: и предполагают возможность алгоритма со сложностью или даже где - количество кодовых слов длиныO ( 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 ,О(NЛ.Г.N)О(NЛ.Г.N)О(Nчас)О(NЛ.Г.час)О(NЧАС(N1,...,NК)О(NЛ.Г.N)О(NК)О(NЛ.Г.К)О(NЧАС(N1,...,NК)Nяяиспользование аналогии ребра выпуклой оболочки, покрывающей указывает на длину кода, охватывающую символы .NяNя

  2. Простой пример показывает, что сортировка (округленных) логарифмических значений частот (по линейному времени в модели оперативной памяти word) не дает оптимального кода без префикса в линейном времени: θ(Л.Г.N)

    • Для , иNзнак равно3е1знак равно1/2-εе2знак равное3знак равно1/4+ε
    • Л.Г.еязнак равно2 поэтому сортировка журналов не меняет порядок
    • все же два кода из трех стоят бита больше, чем оптимальные.N/4
  3. Другим интересным вопросом было бы уменьшить сложность, когда велико, то есть все коды имеют различную длину:К

    • например, когда все частоты имеют различное логарифмическое значение. В этом случае можно отсортировать частоты по линейному времени в оперативной памяти и вычислить код Хаффмана за линейное время (поскольку для сортировки значений достаточно отсортировать их лог-значения), что приведет к общему линейному времени , намного лучше, чем из алгоритма Белала и Элмасри.Кзнак равноNθ(Л.Г.N)N2
Джереми
источник

Ответы:

1

Прошло несколько лет (пять!), Но вот частичный ответ на вопрос:

http://arxiv.org/abs/1602.00023

Оптимальные коды без префиксов с частичной сортировкой Жереми Барбай (представлен 29 января 2016 г.)

Мы опишем алгоритм, вычисляющий оптимальный код без префикса для n несортированных положительных весов во времени в пределах O (n (1 + lgα)) ⊆O (nlgn), где чередование α∈ [1..n − 1] измеряет величину сортировка требуется вычислением. Эта асимптотическая сложность находится в пределах постоянного коэффициента оптимальности в вычислительной модели алгебраического дерева решений, в худшем случае для всех случаев размера n и чередования α. Такие результаты улучшают современную сложность of (nlgn) в наихудшем случае по сравнению с экземплярами размера n в той же вычислительной модели, являющейся вехой в сжатии и кодировании с 1952 года, с помощью простой комбинации алгоритма Ван Леувена для вычисления оптимального префикса свободные коды из отсортированных весов (известных с 1976 года), с отложенными структурами данных для частичной сортировки мультимножества в зависимости от запросов к нему (известных с 1988 года).

Джереми
источник