WikiSort.ru - Не сортированное

ПОИСК ПО САЙТУ | о проекте

Интервальное кодирование (диапазонное кодирование) — энтропийный метод кодирования, предложенный Г. Найджелом и Н. Мартином в 1979 году[1]. Это разновидность арифметического кодирования[2].

Описание

Интервальное кодирование кодирует все символы сообщения в одно число, в отличие от, например, кода Хаффмана, который присваивает каждому символу последовательность бит и объединяет все битовые последовательности вместе.

Пример

Допустим, необходимо зашифровать сообщение «AABA<EOM>», где <EOM> — это символ конца сообщения (англ. end of message). Для этого примера предполагается, что декодировщик знает, что мы намерены закодировать ровно пять символов в десятичной системе счисления (алгоритм в данном случае поддерживает 105 различных комбинаций символов в диапазоне [0, 100000)) используя распределение вероятностей {A: 0.60; B: 0.20; <EOM>: 0.20}. Кодировщик делит диапазон [0, 100000) на три поддиапазона:

A:     [     0,  60000)
B:     [ 60000,  80000)
<EOM>: [ 80000, 100000)

Поскольку наш первый символ — A, это снижает наш первоначальный диапазон до [0, 60000). Второй символ делит этот диапазон еще на три части:

AA:     [     0,  36000)
AB:     [ 36000,  48000)
A<EOM>: [ 48000,  60000)

С двумя закодированными символами наш диапазон становится [0, 36000) и наш третий символ предоставляет следующие варианты:

AAA:     [     0,  21600)
AAB:     [ 21600,  28800)
AA<EOM>: [ 28800,  36000)

На этот раз выбор падает на второй из трех вариантов, которые представляют собой сообщение, которое мы хотим закодировать, и наш диапазон становится [21600, 28800). Может показаться, что стало сложнее определить наши поддиапазоны в данном случае, но на самом деле это не так: мы можем просто вычесть нижнюю границу из верхней границы, чтобы определить, что в нашем диапазоне доступно 7200 чисел; первые 4320 из них представляют 0,60 от общего числа, следующие 1440 представляют следующие 0,20, а остальные 1440 представляют оставшиеся 0,20 от общего диапазона. Прибавка нижней границы дает нам наши диапазоны:

AABA:     [21600, 25920)
AABB:     [25920, 27360)
AAB<EOM>: [27360, 28800)

Наконец, наш диапазон сузился до [21600, 25920), у нас остался только один символ для кодирования. Используя ту же технику, как и прежде, для разделения диапазона между нижней и верхней границей мы находим три оставшихся поддиапазона:

AABAA:     [21600, 24192)
AABAB:     [24192, 25056)
AABA<EOM>: [25056, 25920)

И так как <EOM> — это наш последний символ — наш конечный диапазон - [25056, 25920). Так как все пятизначные числа, начинающиеся с «251», попадают в наш последний ряд, то мы могли бы передать один из трехзначных префиксов, чтобы однозначно выразить исходное сообщение (тот факт, что на самом деле существует восемь таких префиксов, говорит о том, что можно оптимизировать алгоритм. Но они возникли из-за использования десятичной системы счисления, а не двоичной).

Связь с арифметическим кодированием

Арифметическое кодирование аналогично интервальному, использует дробные числа в диапазоне [0,1). Соответственно, в результате арифметический код интерпретируется как начало с неявным «0.», так как это просто разные интерпретации одних и тех же методов кодирования, то любой арифметический кодировщик — это соответствующий интервальный кодировщик, и наоборот.

На практике, однако, так называемое диапазонные кодировщики имеют тенденцию быть реализованными в значительной степени, как описано в статье Мартина,[1] в то время как арифметические кодировщики вообще не называют диапазонными. Часто разницей является побайтовая и побитовая ренормализация. Интервальные кодировщики склонны использовать байты, а не биты. Хотя это и снижает уровень сжатия, это быстрее, чем выполнение перенормировки для каждого бита.

См. также

Примечания

  1. 1 2 G. Nigel N. Martin, Range encoding: An algorithm for removing redundancy from a digitized message, Video & Data Recording Conference, Southampton, UK, July 24-27, 1979.
  2. «Source coding algorithms for fast data compression» Richard Clark Pasco, Stanford, CA 1976

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии