Коды Голомба: различия между версиями
Строка 1: | Строка 1: | ||
'''Коды [[Голомб, Соломон Вольф|Голомба]]''' — семейство [[энтропийное кодирование|энтропийных кодов]]. Под кодом Голомба может подразумеваться также один из представителей этого семейства. | '''Коды [[Голомб, Соломон Вольф|Голомба]]''' — семейство [[энтропийное кодирование|энтропийных кодов]]. Под кодом Голомба может подразумеваться также один из представителей этого семейства. | ||
− | + | Рассмотрим источник, независимым образом порождающий неотрицательные числа <math>i</math> с вероятностями <math>P(i) = (1-p)p^{i}</math>, где <math>p</math> — произвольное положительное число, не превосходящее 1, т.е. источник, описываемый [[Геометрическое распределение|геометрическим распределением]]. Если при этом целое положительное число <math>m</math> таково, что | |
− | |||
− | + | : <math>p^m = \frac 1 2 </math>, | |
+ | |||
+ | |||
+ | то оптимальным для такого источника будет код, построенный в соответствии с предложенной С. Голомбом процедурой, согласно которой для любого кодируемого числа <math>n</math> при известном <math>m</math> кодовое слово образуют [[Унарное кодирование|унарная запись]] числа <math>q = \left[ \frac{n}{m}\right]</math> и кодированный в соответствии с описанной ниже процедурой остаток <math>r</math> от деления <math>\frac{n}{m}</math>: | ||
+ | |||
+ | |||
+ | #Если <math>m</math> является степенью числа 2, то код остатка представляет собой двоичную запись числа <math>r</math>, размещённую в <math>\log_2(m)</math> битах. | ||
+ | #Если <math>m</math> не является степенью 2, вычисляется число <math>b = \lceil\log_2(m)\rceil</math>. Далее: | ||
+ | |||
+ | ::Если <math>r < 2^b-m </math>, код остатка представляет собой двоичную запись числа <math>r</math>, размещённую в <math>b-1</math> битах, | ||
+ | ::иначе остаток <math>r</math> кодируется двоичной записью числа <math>r+2^b-m</math>, размещённой в <math>b</math> битах. | ||
+ | |||
+ | |||
+ | Позже Р. Галлагером и Д. Ван Вурхисом было показано, что предложенный Голомбом код оптимален не только для дискретного набора значений <math>p</math>, удовлетворяющих приведённому выше критерию, но и для любых <math>p</math>, для которых справедливо двойное неравенство | ||
+ | |||
+ | |||
+ | : <math>p^{m} + p^{m+1} \le 1 < p^{m} + p^{m-1}</math>, | ||
− | |||
− | + | причём для любого <math>p</math> всегда найдётся не более одного значения <math>m</math>, удовлетворяющего такому неравенству. | |
− | |||
− | + | == Пример == | |
− | + | Пусть <math>p = 0.85</math>, <math>n = 13</math>. | |
− | + | Удовлетворяющее двойному неравенству Галлагера - Ван Вурхиса значение <math>m = 4</math>. | |
− | |||
− | |||
− | |||
− | |||
частное | частное | ||
− | : <math> q = \left[ \frac{n}{m} \right] = \left[\frac{13}{4} \right] = 3 </math> | + | : <math> q = \left[ \frac{n}{m} \right] = \left[\frac{13}{4} \right] = 3 </math>, |
− | унарный код | + | |
− | + | унарный код <math> 1110 </math>, | |
+ | |||
остаток | остаток | ||
− | : <math> r | + | : <math>r = 1</math>, |
− | + | ||
− | + | код <math> 01 </math>. | |
+ | |||
− | + | Результирующее кодовое слово | |
: <math> 1110|01 </math> | : <math> 1110|01 </math> | ||
+ | |||
+ | == Ссылки == | ||
+ | * [http://urchin.earth.li/~twic/Golombs_Original_Paper/Golomb1966.djvu Golomb S.W. Run-length encodings //IEEE Trans. Inf. Theor.–1996.- IT-12, No 3. – pp. 399-401] | ||
+ | * [http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?reload=true&arnumber=1055357 Gallager R.G., Van Voorhis D.C. Optimal source codes for geometrically distributed integer alphabets //IEEE Trans. Inf. Theor.–1975.-IT-21, No 2. – pp. 228-230] | ||
{{методы сжатия}} | {{методы сжатия}} |
Версия от 17:11, 12 июня 2010
Коды Голомба — семейство энтропийных кодов. Под кодом Голомба может подразумеваться также один из представителей этого семейства.
Рассмотрим источник, независимым образом порождающий неотрицательные числа с вероятностями , где — произвольное положительное число, не превосходящее 1, т.е. источник, описываемый геометрическим распределением. Если при этом целое положительное число таково, что
то оптимальным для такого источника будет код, построенный в соответствии с предложенной С. Голомбом процедурой, согласно которой для любого кодируемого числа при известном кодовое слово образуют унарная запись числа и кодированный в соответствии с описанной ниже процедурой остаток от деления :
- Если является степенью числа 2, то код остатка представляет собой двоичную запись числа , размещённую в битах.
- Если не является степенью 2, вычисляется число . Далее:
- Если , код остатка представляет собой двоичную запись числа , размещённую в битах,
- иначе остаток кодируется двоичной записью числа , размещённой в битах.
Позже Р. Галлагером и Д. Ван Вурхисом было показано, что предложенный Голомбом код оптимален не только для дискретного набора значений , удовлетворяющих приведённому выше критерию, но и для любых , для которых справедливо двойное неравенство
причём для любого всегда найдётся не более одного значения , удовлетворяющего такому неравенству.
Пример
Пусть , .
Удовлетворяющее двойному неравенству Галлагера - Ван Вурхиса значение .
частное
унарный код ,
остаток
код .
Результирующее кодовое слово
Ссылки
- Golomb S.W. Run-length encodings //IEEE Trans. Inf. Theor.–1996.- IT-12, No 3. – pp. 399-401
- Gallager R.G., Van Voorhis D.C. Optimal source codes for geometrically distributed integer alphabets //IEEE Trans. Inf. Theor.–1975.-IT-21, No 2. – pp. 228-230
Ошибка Lua в Модуль:Navbox на строке 353: attempt to index local 'listText' (a nil value).
de:Golomb-Code en:Golomb coding es:Codificación Golomb-Rice fr:Codage de Golomb ja:ゴロム符号 pl:Kod Golomba pt:Códigos de Golomb