Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

В информатике и теории информации , Танстолы кодирование является формой энтропии кодирования используется для сжатия без потерь сжатия данных .

История [ править ]

Кодирование Tunstall было предметом докторской диссертации Брайана Паркера Танстолла в 1967 году, когда он работал в Технологическом институте Джорджии. Тема дипломной работы - «Синтез бесшумных кодов сжатия» [1].

Его конструкция является предшественницей Lempel – Ziv .

Свойства [ править ]

В отличие от кодов переменной длины , которые включают кодирование Хаффмана и Лемпеля – Зива, кодирование Tunstall - это код, который отображает исходные символы в фиксированное количество битов. [2]

И коды Танстолла, и коды Лемпеля – Зива представляют слова переменной длины кодами фиксированной длины. [3]

В отличие от типичного кодирования набора, кодирование Tunstall анализирует стохастический источник с кодовыми словами переменной длины.

Можно показать [4] , что для достаточно большого словаря, число битов в исходном письме может быть сколь угодно близко к , к энтропии источника.

Алгоритм [ править ]

Алгоритм требует в качестве входных данных алфавит , а также распределение вероятностей для каждого входного слова. Также требуется произвольная константа , которая является верхней границей размера словаря, который он будет вычислять. Рассматриваемый словарь,, построен как дерево вероятностей, в котором каждое ребро связано с буквой из входного алфавита. Алгоритм выглядит так:

D: = дерево из листьев, по одному на каждую букву в .Пока : Превратите наиболее вероятный лист в дерево с листьями.

Пример [ править ]

Представим, что мы хотим закодировать строку «hello, world». Далее предположим (несколько нереалистично), что входной алфавит содержит только символы из строки «hello, world» - то есть, 'h', 'e', ​​'l', ',', '', 'w', ' о ',' г ',' д '. Таким образом, мы можем вычислить вероятность каждого символа на основе его статистического появления во входной строке. Например, буква L встречается трижды в строке из 12 символов: вероятность равна .

Инициализируем дерево, начиная с дерева из листьев. Таким образом, каждое слово напрямую связано с буквой алфавита. 9 слов, которые мы получаем таким образом, можно закодировать в выходной бит фиксированного размера .

Пример Tunstall "hello, world" - одна итерация

Затем мы берем лист с наибольшей вероятностью (здесь ) и преобразуем его в еще одно дерево листьев, по одному для каждого символа. Мы повторно вычисляем вероятности этих листьев. Например, последовательность из двух букв L встречается один раз. Учитывая, что существует три появления букв, за которыми следует L, результирующая вероятность равна .

Мы получаем 17 слов, каждое из которых можно закодировать в бит фиксированного размера .

Пример Tunstall "hello, world" - две итерации

Обратите внимание, что мы можем повторять и дальше, каждый раз увеличивая количество слов .

Ограничения [ править ]

Кодирование Tunstall требует, чтобы алгоритм знал до операции синтаксического анализа, каково распределение вероятностей для каждой буквы алфавита. Эта проблема характерна для кодирования Хаффмана .

Требование вывода блока фиксированной длины делает его меньше, чем у Lempel – Ziv , который имеет аналогичную структуру на основе словаря, но с выводом блока переменного размера. [ требуется разъяснение ]

Ссылки [ править ]

  1. ^ Танстолл, Брайан Паркер (сентябрь 1967). Синтез бесшумных кодов сжатия . Технологический институт Джорджии .
  2. ^ http://www.rle.mit.edu/rgallager/documents/notes1.pdf , Исследование алгоритма Tunstall в Массачусетском технологическом институте
  3. ^ "Адаптивное кодирование источника от переменной до фиксированной длины - кодирование Лемпеля-Зива".[1] [2]
  4. ^ [3] , Исследование алгоритма Танстолла изотдела теории информации EPFL.