Прямая теорема кодирования.. Арифметическое кодирование
Прямая теорема кодирования. Теорема 12. 7. Для дискретного стационарного источника с энтропией H(x) и для любого d > 0. существует способ неравномерного FV-кодирования такой, для которого . Итак, выбрав достаточно большую длину блоков n и применив к блокам побуквенное кодирование, мы получим кодирование со средней скоростью , где o(n) ® 0 при n ® ¥. К сожалению, этот внешне оптимистический результат оказывается почти бесполезным при решении практических задач. Основное препятствие на пути его применения – это экспоненциальный рост сложности при увеличении длины блоков n. Поясним эту проблему следующим простым примером. Предположим, что кодированию подлежат файлы, хранящиеся в памяти компьютера. Символы источника – байты и, значит, объем алфавита |X| = 28 = 256. При кодировании последовательностей длины n = 2 объем алфавита вырастает до |X2| = 216 = 65536. Далее при n = 3, 4, … объемы алфавита будут 224 = 16777216, 232 = 4294967296, …. Понятно, что работать с кодами таких размеров невозможно. Описываемый в следующем параграфе метод арифметического кодирования позволяет эффективно кодировать блоки длины n с избыточностью порядка 2/n и со сложностью растущей только пропорционально квадрату длины блока n. За счет пренебрежимо малого проигрыша в средней длине кода на сообщение сложность может быть сделана даже линейной по длине кода. Неудивительно, что арифметическое кодирование все шире применяется в разнообразных системах обработки информации. Арифметическое кодирование
При кодировании кодом Шеннона-Фано и Хаффмана оптимальность будет обеспечена только в том случае, если вероятность появления кодируемых символов кратна 2n, n = -1, -2, … При произвольном значении вероятности появления символа условие оптимальности не выполняется.
Арифметическое кодирование обеспечивает более точное выполнение этого равенства при произвольной величине . Рассмотрим для простоты дискретный постоянный источник, выбирающий сообщения из множества X = {1, …, N}, с вероятностями {P1, …, PN}. Наша задача состоит в кодировании последовательностей множества . Мы хотели бы применить к ансамблю достаточно простой и эффективной побуквенный код. Упрощение состоит в том, ни кодер ни декодер не хранят и не строят всего множества из |Xn| кодовых слов. Вместо этого при передаче конкретной последовательности кодером вычисляется кодовое слово только для данной последовательности . Правило кодирования, конечно, известно декодеру и он восстанавливает по , не имея полного списка кодовых слов. Идея арифметического кодирования заключается в следующем. Сообщения буквы в тексте встречаются с определенными вероятностями при этом справедливо равенство . Интервал 0…1 разбивается на подинтервалы с длинами, равными вероятностям появления символов в потоке, которые называются диапазонами соответствующих символов. Выбирается диапазон для первого символа (буквы), определяется его начало и конец. Появление следующих символов уменьшает ширину этого диапазона. В конце текста образуется достаточно узкий диапазон и число, выбранное из этого диапазона в двоичном коде будет определять передаваемую кодовую комбинацию. Например, символы “a”, “b”, “c” в потоке встречаются с вероятностями ; ; . Составим таблицу
Допустим, что необходимо закодировать текст “bcbab”. Для первого символа рабочий диапазон выбирается 0, 0…0, 6. Диапазон следующего символа “c” равен 0, 6…0, 9. В результате исходный диапазон 0, 0…0, 6 сужается по следующему правилу: начало нового диапазона равно началу исходного диапазона плюс начало диапазона следующей буквы , умноженное на разность конец исходного диапазона минус начало исходного диапазона
. Конец нового диапазона определяется по правилу Здесь - конец диапазона буквы “c”. С поступлением каждой последующей i-ой буквы начало и конец диапазона определяется по правилу ; . В этом выражении и соответственно начало и конец диапазона передаваемой буквы “x”. Для приведенного примера после буквы “c” передается буква “b”. Начало и конец следующего диапазона будут равны ; . При передаче буквы “a” начало и конец диапазона равны ; . Последняя буква текста “b” имеет начало и конец диапазона текста равные ; . В этом диапазоне выбирается точка, значение которой определяется по формуле . Графически процесс кодирования показан на рис. 12. 0
Двоичный код этого числа является кодовой комбинацией, обозначающей передаваемый текст. Дробное число в двоичном коде записывается следующим образом: . Количество разрядов определяется необходимой точностью записи числа и чтобы это число попадало в интервал закодированного слова. Для приведенного примера кодовая комбинация имеет вид 01110110. Этой кодовой комбинации соответствует число 0, 4609375. При таком кодировании длина полученного интервала равна произведению вероятностей всех встретившихся символов, а его начало зависит от порядка следования символов. Определим алгоритм восстановления текста. При кодировании каждый следующий интервал вложен в предыдущий. Это означает, что если принято число 0, 4609375, то первым символом в цепочке текста может быть только буква “b”, так как ее диапазон (0, 0…0, 6) включает это число. Перебором всех возможных символов по приведенной выше методике расчета определяем, что следующая буква “c” и т. д. Обсудим кратко вопрос о сложности кодирования. Из описания алгоритма следует, что на каждом шаге кодирования выполняется одно сложение и 2 умножения. Отсюда легко сделать неправильный вывод о том, что сложность кодирования последовательности из n сообщений пропорциональна n. Это неверно, поскольку на каждом шаге линейно растет сложность выполнения самих операций сложения и умножения, т. к. нарастает число двоичных разрядов, необходимых для записи операндов.
Предположим, что для представления вероятностей P1, …, PN использованы числа разрядности d. После первого шага кодирования точное представление Н и K потребует 2d разрядов, после n шагов кодирования кодер и декодер будут работать (в худшем случае) с числами разрядности nd, и, следовательно, суммарная сложность имеет порядок . Таким образом, можно говорить о том, что сложность арифметического кодирования пропорциональна n2. На самом деле, возможна практическая реализация арифметического кодирования со сложностью пропорциональной n. Отметим еще одну чрезвычайно важную особенность арифметического кодирования. Его легко адаптировать к случаю источников с памятью. Если, например, в качестве модели источника рассматривается простая цепь Маркова, то алгоритм кодирования остается прежним за тем исключением, что вместо одномерных вероятностей P(xi) нужно использовать условные вероятности P(xi|xi-1).
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|