Як працює адаптивне кодування Хаффмана?


10

Кодування Хаффмана - широко використовуваний метод ентропійного кодування, що використовується для стиснення даних. Це передбачає, що ми маємо повне знання статистики сигналу. Однак існують версії кодування Хаффмана, які використовуються з потоковими носіями і, можливо, не можуть знати все про статистику сигналу. Як працюють ці адаптивні кодери Хаффмана ?


1
Ви читали статтю у Вікіпедії, включаючи приклад реалізації? en.wikipedia.org/wiki/Adaptive_Huffman_coding#Vitter_algorithm У вас є конкретніше запитання?
ендоліт

Відповіді:


7

У статті у Вікіпедії є досить хороший опис адаптивного процесу кодування Хаффмана з використанням однієї з помітних реалізацій - алгоритму Віттера. Як ви зазначали, стандартний кодер Хаффмана має доступ до функції масової ймовірності вхідної послідовності, яку він використовує для побудови ефективних кодувань для найбільш ймовірних значень символів. Наприклад, у прототипічному прикладі стиснення даних на основі файлів цей розподіл ймовірностей може бути обчислений шляхом гістограмування вхідної послідовності, підрахувавши кількість входів кожного значення символу (наприклад, символи можуть бути 1-байтовими послідовностями). Ця гістограма використовується для створення дерева Хаффмана, як ця (взята зі статті Вікіпедії):

Приклад Хаффмана

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


Структура адаптивного кодера Хаффмана досить схожа; він використовує подібне представлення на основі дерева статистики вхідних послідовностей для вибору ефективних кодувань для кожного значення вхідного символу. Основна відмінність полягає в тому, що в якості потокової реалізації алгоритму немає апріорного знання функції вхідної маси ймовірностей; статистичні дані послідовності повинні бути оцінені під час руху. Якщо потрібно використовувати ту саму схему кодування Хаффмана, це означає, що дерево, яке використовується для генерування кодування кожного символу в стисненому потоці, повинно бути побудовано та підтримуватися динамічно в міру обробки потоку введення.

Алгоритм Віттера є одним із способів цього досягти; по мірі обробки кожного вхідного символу дерево оновлюється, зберігаючи свою характеристику зменшення ймовірності появи символу під час переміщення вниз по дереву. Алгоритм визначає набір правил того, як дерево оновлюється з часом, і як отримані стислі дані кодуються у вихідному потоці. Коли споживається послідовність введення, структура дерева повинна представляти більш точний опис розподілу ймовірностей введення. На відміну від стандартного підходу Хаффмана до кодування, у декомпресора немає статичного дерева, яке можна використовувати для декодування; він повинен постійно виконувати одні й ті ж функції з обслуговування дерева під час процесу декомпресії.

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

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