Универсальный код: различия между версиями

Материал из in.wiki
Перейти к навигации Перейти к поиску
w>Qkowlew
м (42 версии импортировано: Импорт из Википедии)
 
(не показаны 23 промежуточные версии 18 участников)
Строка 1: Строка 1:
'''Универсальный код''' для целых чисел в [[Сжатие данных|сжатии данных]] - [[префиксный код]], который преобразует положительные целые числа в двоичные слова, с дополнительным свойством: при любом истинном [[распределение вероятностей]] на целых числах, пока распространение - монотонно(т. е. <math>p(i) \geq p(i+1)</math> для любого <math>i</math>), ожидаемые длины двоичных слов находятся в пределах постоянного фактора ожидаемых длин, которые оптимальный код для этого распределения вероятностей назначил бы.
+
'''Универсальный код''' для целых чисел в [[Сжатие данных|сжатии данных]] — [[префиксный код]], который преобразует положительные целые числа в двоичные слова, с дополнительным свойством: при любом истинном [[распределение вероятностей|распределении вероятностей]] на целых числах, пока распределение — монотонно (то есть <math>p(i) \geq p(i+1)</math> для любого <math>i</math>), ожидаемые длины двоичных слов находятся в пределах постоянного фактора ожидаемых длин, которые оптимальный код назначил бы для этого распределения вероятностей.
  
 
Универсальный код асимптотически оптимален, если коэффициент между фактическими и оптимальными ожидаемыми длинами связывает функция информационной энтропии кода, которая приближается к 1, так как [[энтропия]] приближается к бесконечности.
 
Универсальный код асимптотически оптимален, если коэффициент между фактическими и оптимальными ожидаемыми длинами связывает функция информационной энтропии кода, которая приближается к 1, так как [[энтропия]] приближается к бесконечности.
  
Большинство префиксных кодов для целых чисел назначают более длинные ключевые слова большим целым числам. Такой код может использоваться, чтобы эффективно закодировать сообщение, тянущееся из набора возможных сообщений, просто упорядочивая набор сообщений по уменьшению вероятности а затем пересылая индекс предназначаемого сообщения. Универсальные коды в общем не используются для точно известных распределений вероятностей.
+
Большинство префиксных кодов для целых чисел назначает более длинные ключевые слова большим целым числам. Такой код может использоваться, чтобы эффективно закодировать сообщение, тянущееся из набора возможных сообщений, просто упорядочивая набор сообщений по уменьшению вероятности а затем пересылая индекс предназначаемого сообщения. Универсальные коды в общем не используются для точно известных распределений вероятностей.
  
'''Универсальные коды''' включают в себя:
+
Универсальные коды включают в себя:
* [[унарное кодирование]]
+
* [[Унарное кодирование]]
* [[Гамма код Элиаса]]
+
* [[Гамма-код Элиаса]]
* [[Дельта код Элиаса]]
+
* [[Дельта-код Элиаса]]
* [[Омега код Элиаса]]
+
* [[Омега-код Элиаса]]
* [[дельта код]]
+
* [[Дельта-код]]
* [[кодирование Фибоначчи]]
+
* [[Кодирование Фибоначчи]]
* [[кодирование Голомба]]
+
* [[Экспоненциальный код Голомба]]
* [[кодирование Райса]]
 
  
 +
Некоторые неуниверсальные коды:
 +
* [[одноместное кодирование]], используется в кодах Элиаса
 +
* [[Кодирование Райса]]
 +
* [[Кодирование Голомба]]
  
== Взаимоcвязь и практическое использование ==
+
Их неуниверсальность проявляется в том, что если любые из них использовать, чтобы закодировать [[распределение Гаусса-Кузьмина]] или [[дзета-распределение]] с параметром s=2, то ожидаемая длина ключевого слова бесконечена. Например, используя одноместное кодирование на дзета-распределение, имеем следующую ожидаемую длину:
Использование [[кода Хаффмана]] и [[арифметического шифрования]] (когда они могут использоваться вместе) дают лучший результат, чем любой другой универсальный код.
 
  
Однако, универсальные коды полезны, когда код Хаффмана не может использоваться — например, когда невозможно определить точную вероятность каждого сообщения, но известно ранжирование их вероятностей.
+
<math>E(l) = \frac{6}{\pi^2} \sum_{l=1}^\infty \frac{1}{l} = \infty .</math>
  
Универсальные коды также полезны, когда код Хаффмана отрабатывает не совсем корректно. Например, когда отправитель знает вероятности сообщений,а получатель нет, код Хаффмана требует передачи  вероятностей к получателю. Использование универсального кода избавляет от таких неудобств.
+
== Практическое использование в сжатии данных ==
 +
Использование [[код Хаффмана|кода Хаффмана]] и [[арифметическое кодирование|арифметического кодирования]] (когда они могут использоваться вместе) даёт лучший результат, чем любой другой универсальный код.
  
Каждый универсальный код дает собственное "подразумеваемое распределение" вероятностей p(i) =2-l(i), где l(i) - длина i-го ключевого слова и p(i) - вероятность символа передачи. Если фактические вероятности сообщения - q(i) и [[расхождение Кульбака-Лейблера]] DKL(q||p) минимизирует код с l(i), затем оптимальный код Хаффмана для этого множества сообщений будет эквивалентен к этому коду. С тех пор, как универсальные коды стали работать быстрее, чтобы кодировать и декодировать, чем код Хаффмана, универсальный код был бы предпочтителен в случаях, где DKL(q||p) достаточно маленький.
+
Однако, универсальные коды полезны, когда код Хаффмана не может использоваться — например, когда невозможно определить точную вероятность каждого сообщения, но известно ранжирование их вероятностей.
  
Для любого геометрического распространения  [[код Голомба]] оптимален. С универсальными кодами, подразумеваемое распространение - приблизительно энергетический закон как например 1 / n2. Для [[кода Фибоначчи]], подразумеваемое распространение составляет приблизительно 1 / nq.
+
Универсальные коды также полезны, когда код Хаффмана отрабатывает не совсем корректно. Например, когда отправитель знает вероятности сообщений, а получатель — нет, код Хаффмана требует передачи вероятностей к получателю. Использование универсального кода избавляет от таких неудобств.
  
 +
Каждый универсальный код дает собственное «подразумеваемое распределение» вероятностей <math>p(i) = 2^{-l(i)}</math>, где <math>l(i)</math> — длина i-го ключевого слова и <math>p(i)</math> — вероятность символа передачи. Если фактические вероятности сообщения — <math>q(i)</math> и [[расстояние Кульбака — Лейблера]] <math>DKL(q||p)</math> минимизирует код с <math>l(i)</math>, оптимальный код Хаффмана для этого множества сообщений будет эквивалентен к этому коду. Поскольку универсальные коды быстрее, чем код Хаффмана, универсальный код предпочтителен в случаях, где <math>DKL(q||p)</math> достаточно мало.
  
 +
Для любого [[геометрическое распределение|геометрического распределения]] [[кодирование Голомба]] оптимально. Для универсальных кодов подразумеваемое распределение приблизительно подчиняется [[Степенной закон|степенному закону]], например <math>1/n^2</math>, а точнее, [[Закон Ципфа|закону Ципфа]]. Для [[код Фибоначчи|кода Фибоначчи]] подразумеваемое распределение приблизительно подчиняется закону <math>1/n^q</math> при <math>q = 1/\log_2(\varphi) \approx 1{,}44</math>, где <math>\varphi</math> — отношение [[Золотое сечение|золотого сечения]].
  
 
== Ссылки ==
 
== Ссылки ==
* [http://www-lat.compression.ru/download/integers.html Кодирование целых чисел]
+
* [https://web.archive.org/web/20070214150309/http://www-lat.compression.ru/download/integers.html Кодирование целых чисел]
  
 
{{методы сжатия}}
 
{{методы сжатия}}
  
 
[[Категория:Алгоритмы сжатия без потерь]]
 
[[Категория:Алгоритмы сжатия без потерь]]
 
[[en:Universal code (data compression)]]
 
[[ko:범용 부호]]
 

Текущая версия от 00:47, 20 августа 2025

Универсальный код для целых чисел в сжатии данных — префиксный код, который преобразует положительные целые числа в двоичные слова, с дополнительным свойством: при любом истинном распределении вероятностей на целых числах, пока распределение — монотонно (то есть p ( i ) p ( i + 1 ) p(i) \geq p(i+1) для любого i i ), ожидаемые длины двоичных слов находятся в пределах постоянного фактора ожидаемых длин, которые оптимальный код назначил бы для этого распределения вероятностей.

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

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

Универсальные коды включают в себя:

Некоторые неуниверсальные коды:

Их неуниверсальность проявляется в том, что если любые из них использовать, чтобы закодировать распределение Гаусса-Кузьмина или дзета-распределение с параметром s=2, то ожидаемая длина ключевого слова бесконечена. Например, используя одноместное кодирование на дзета-распределение, имеем следующую ожидаемую длину:

E ( l ) = 6 π 2 l = 1 1 l = . E(l) = \frac{6}{\pi^2} \sum_{l=1}^\infty \frac{1}{l} = \infty .

Практическое использование в сжатии данных[править | править код]

Использование кода Хаффмана и арифметического кодирования (когда они могут использоваться вместе) даёт лучший результат, чем любой другой универсальный код.

Однако, универсальные коды полезны, когда код Хаффмана не может использоваться — например, когда невозможно определить точную вероятность каждого сообщения, но известно ранжирование их вероятностей.

Универсальные коды также полезны, когда код Хаффмана отрабатывает не совсем корректно. Например, когда отправитель знает вероятности сообщений, а получатель — нет, код Хаффмана требует передачи вероятностей к получателю. Использование универсального кода избавляет от таких неудобств.

Каждый универсальный код дает собственное «подразумеваемое распределение» вероятностей p ( i ) = 2 l ( i ) p(i) = 2^{-l(i)} , где l ( i ) l(i)  — длина i-го ключевого слова и p ( i ) p(i)  — вероятность символа передачи. Если фактические вероятности сообщения — q ( i ) q(i) и расстояние Кульбака — Лейблера D K L ( q | | p ) DKL(q||p) минимизирует код с l ( i ) l(i) , оптимальный код Хаффмана для этого множества сообщений будет эквивалентен к этому коду. Поскольку универсальные коды быстрее, чем код Хаффмана, универсальный код предпочтителен в случаях, где D K L ( q | | p ) DKL(q||p) достаточно мало.

Для любого геометрического распределения кодирование Голомба оптимально. Для универсальных кодов подразумеваемое распределение приблизительно подчиняется степенному закону, например 1 / n 2 1/n^2 , а точнее, закону Ципфа. Для кода Фибоначчи подразумеваемое распределение приблизительно подчиняется закону 1 / n q 1/n^q при q = 1 / log 2 ( φ ) 1 , 44 q = 1/\log_2(\varphi) \approx 1{,}44 , где φ \varphi — отношение золотого сечения.

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

Ошибка Lua в Модуль:Navbox на строке 353: attempt to index local 'listText' (a nil value).