Чи завжди кодування Хаффмана завжди оптимальне?


9

Вимога кодування, що не має префікса, призводить до великих дерев через те, що дерево має бути повним. Чи є поріг, коли некодированное зберігання даних фіксованої довжини було б ефективніше, ніж кодування даних?


Загалом "ні". Для середніх даних частота кожного символу буде> 1, і корисно використовувати Huffman Encoding, а не коди фіксованої довжини

@arunmoezhi Чи можете ви, будь ласка, звернутися до прикладу, який я наводив вище? Частота кожного символу більша за 1, проте фіксована довжина є більш оптимальною.

Цей приклад цікавий. Але чи можете ви надати такий сценарій із ймовірністю кожного символу замість частоти та переконайтесь, що ймовірності всіх символів додають до 1

@arunmoezhi Я включив ймовірності символів, і вони складають до 1.

Відповіді:


4

Ентропія H(A)цієї проблеми є 1.998. Як кодування Хаффмана, так і кодування фіксованої довжини для цієї проблеми має середню довжину кодового слова як 2. І FYI кодування, яке ви отримали за допомогою кодування Huffman, є неправильним. Huffman Encoding також створює коди, подібні фіксованій довжині для цієї проблеми. Він використовує жадібний підхід. Таким aчином, код не отримується як, 0але натомість він отримує 00. Переробіть дерево, яке ви генеруєте за допомогою кодування Huffman. Дерево, яке ви повинні отримати:введіть тут опис зображення


Дякую тобі. Чи можете ви надати якісь докази того, що кодування Хаффмана завжди більш оптимальне, ніж фіксована довжина, або якнайменше віднести мене до одного?

1
Ви можете звернутися до Introduction to Algorithmsпо CLRS. У главі, яка розповідає про greedy algorithmsвас, ви можете отримати офіційний доказ Huffman algorithm. Це довгий доказ і потребує терпіння для читання.

8

Кодування Хаффмана наближає розподіл населення з двома ймовірностями. Якщо справжній розподіл складається з потужностей з двома ймовірностями (а вхідні символи абсолютно некорельовані), кодування Хаффмана є оптимальним. Якщо ні, то можна краще зробити кодування діапазону. Однак оптимально серед усіх кодувань призначати конкретні набори бітів певним символам на вході.


Що ви маєте на увазі під "приблизним розподілом населення"?

3
Існує теоретичний правдивий розподіл повідомлення, яке може гіпотетично надіслати. В ідеалі кожне повідомлення повинно кодуватися таким чином, що пропорційно логу його ймовірності, але оскільки коди Хаффмана є цілим числом бітів, це неявно відповідає ймовірності, що є двома силами. Звідси наближення. Знайдіть теорію кодування Шеннона.

8

Так, це завжди оптимально.

Ні, немає порогового значення, де б було використано менше місця для використання некодованих даних фіксованої довжини.

Я знайшов ряд доказів в Інтернеті, але є достатньо дискусій у статті Вікіпедії, що кодує Хаффмана .

Це стосується також інших методів, які досягають більш високої компресії (робота поза тим простором, для якого код Хаффмана є оптимальним).

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