У чому полягає складність обчислення оптимальних вільних кодів префікса, коли частоти схожі?


13

Добре відомо, що існує найгірший варіант оптимального алгоритму для обчислення коду Хаффмана в часі . Це покращується двома ортогональними способами:θ(nlgn)

  1. Оптимальні вільні коди префікса можуть бути обчислені швидше, якщо набір різних частот невеликий (наприклад, розмір ): сортуйте частоти за допомогою [Munro і Spira, 1976], щоб скористатися малим значенням та обчислити дерево Хаффмана в лінійний час від відсортованих частот. Це дає рішення вσσO(nlgσ)

  2. Існує алгоритм для обчислення еквівалентних кодів, де - кількість різних кодових слів [Білал та Ельмасрі].O(n16k)k

Чи є спосіб комбінувати ці методи, щоб покращити поточну найкращу складність ?O(nmin{16k,lgσ})


O(nk) РЕЗУЛЬТАТ ВІД STACS 2006 SEEM бути неправим , Elmasry опубліковано Arxiv в 2010 році (http://arxiv.org/abs/cs/0509015) версія оголошуючи - O(16kn) операції на несортовані вході і - O(9klog2k1n) операції на впорядкованому вході


  1. Я бачу аналогію зі складністю обчислення плоского опуклого корпусу, де алгоритми в O(nlgn) (сортування на основі, як алгоритм O(nlgn) для коду Хаффмана) і в O(nh) (подарунок обгортання) були витіснені алгоритмом Кіркпатріка та Зейделя в O(nlgh) (пізніше виявився оптимальним примірником за складністю форми O(nH(n1,,nk) ). O(nlgn) проти O(nk) передбачає можливість алгоритму зі складністю O(nlgk) , або навіть O(nH(n1,,nk) де ni - кількість кодових слів довжини i, використовуючи аналогію краю опуклого корпусу, що охоплює ni вказує на довжину коду, що охоплює ni символи.

  2. Простий приклад показує, що сортування (округлих) логарифмічних значень частот (у лінійному часі в моделі оперативної пам'яті слова θ(lgn) ) не дає оптимального вільного коду з префіксом у лінійному часі:

    • Для n=3 , f1=1/2ε і f2=f3=1/4+ε
    • lgfi=2 тому сортування журналу не змінює порядок
    • все ж два коди з трьох коштують n/4 біт більше, ніж оптимально.
  3. Іншим цікавим питанням буде зменшення складності, коли k великий, тобто всі коди мають різну довжину:

    • наприклад, коли частоти є різними логічними значеннями. У цьому випадку можна сортувати частоти в лінійний час в оперативній пам'яті слова і обчислити код Хаффмана в лінійний час (оскільки для сортування їхніх журнальних значень достатньо для сортування значень), в результаті чого загальний лінійний час , набагато краще, ніж з алгоритму Белала та Ельмасрі.k=nθ(lgn)n2

Відповіді:


1

Минуло кілька років (п'ять!), Але ось часткова відповідь на питання:

http://arxiv.org/abs/1602.00023

Оптимальні вільні коди з префіксом з частковим сортуванням Jérémy Barbay (Надіслано 29 січня 2016)

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.