Коды Голомба

Материал из testwiki
Перейти к навигации Перейти к поиску

Коды Голомба — семейство энтропийных кодов. Под кодом Голомба может подразумеваться также один из представителей этого семейства.

Рассмотрим источник, независимым образом порождающий целые неотрицательные числа i с вероятностями P(i)=(1p)pi, где p — произвольное положительное число, не превосходящее 1, то есть источник, описываемый геометрическим распределением. Если при этом целое положительное число m таково, что

pm=12,

то оптимальным посимвольным кодом (то есть кодом, ставящим в соответствие каждому кодируемому символу определённое кодовое слово) для такого источника будет код, построенный в соответствии с предложенной Соломоном Голомбом процедурой, согласно которой для любого кодируемого числа n при известном m кодовое слово образуют унарная запись числа q=[nm] и кодированный в соответствии с описанной ниже процедурой остаток r от деления nm:

  1. Если m является степенью числа 2, то код остатка представляет собой двоичную запись числа r, размещённую в log2(m) битах.
  2. Если m не является степенью 2, вычисляется число b=log2(m). Далее:
Если r<2bm, код остатка представляет собой двоичную запись числа r, размещённую в b1 битах,
иначе остаток r кодируется двоичной записью числа r+2bm, размещённой в b битах.

Позже Р. Галлагером и Д. Ван Вурхисом было показано, что предложенный Голомбом код оптимален не только для дискретного набора значений p, удовлетворяющих приведённому выше критерию, но и для любых p, для которых справедливо двойное неравенство

pm+pm+11<pm+pm1,

где m — целое положительное число. Поскольку для любого p всегда найдётся не более одного значения m, удовлетворяющего приведённому выше неравенству, предложенная С. Голомбом процедура кодирования геометрического источника оказывается оптимальной для любого значения p.

Чрезвычайно простая в реализации, но не всегда оптимальная разновидность кода Голомба в случае, когда m является степенью 2, называется кодом Райса.

Пример

Пусть p=0.85, требуется закодировать число n=13.

Удовлетворяющее двойному неравенству Галлагера — Ван Вурхиса значение m=4.

В соответствии с описанной выше процедурой кодирования кодовое слово, соответствующее кодируемому числу 13, строится как унарная запись частного от деления n/m:

q=[nm]=[134]=3,

(унарный код 0001, то есть q нулей с завершающей единицей),

и кодированного остатка

r=1,

(код 01, то есть собственно остаток, записанный в log2(m) битах).

Результирующее кодовое слово

0001|01

См. также

Ссылки

Шаблон:Методы сжатия