Дельта-код Элиаса: различия между версиями

Материал из in.wiki
Перейти к навигации Перейти к поиску
w>AVB
м (переименовал «Дельта код Элиаса» в «Дельта-код Элиаса»: орфография)
w>AVB
(викификация, оформление, орфография, стилевые правки)
Строка 1: Строка 1:
 
{{изолированная статья|сирота1}}
 
{{изолированная статья|сирота1}}
'''Дельта-код Элиаса ''' это универсальный код для кодирования положительных целых чисел, разработанный Питером Элиасом.  
+
'''Дельта-код Элиаса ''' — это [[универсальный код]] для кодирования положительных целых чисел, разработанный Питером Элиасом.
  
 
Для того, чтобы закодировать число:
 
Для того, чтобы закодировать число:
# Запишите его в двоичном виде.
+
# Записать его в двоичном виде.
# Посчитайти биты и запишите количество битов в двоичном виде (Х).
+
# Сосчитать биты и записать количество битов в двоичном виде (Х).
# Используйте двоичное значение, записанное в шаге 1 снова, удалите стоящий впереди бит и запишите оставшиеся биты (Y).
+
# Использовать двоичное значение, записанное в шаге 1 снова, удалить стоящий впереди бит и записать оставшиеся биты (Y).
# Присоедините второе двоичное значение (Y) к первому (X).
+
# Присоединить второе двоичное значение (Y) к первому (X).
# Посчитайте биты, написанные в шаге 2 (X), вычтите 1 из этого числа и добавьте в начало много нулей.
+
# Сосчитать биты, записанные в шаге 2 (X), вычесть 1 из этого числа и добавить в начало много нулей.
  
 
Аналогичным образом этот процесс можно описать так:
 
Аналогичным образом этот процесс можно описать так:
# Разделите целое число на самую большую степень 2, которую оно содержит (2N ' ), и оставшиеся N' двоичных цифр целого числа.
+
# Разделить целое число на самую большую степень 2, которую оно содержит (2<sup>N'</sup>), и оставшиеся N' двоичных цифр целого числа.
# Закодируйте N = N' + 1 с помощью Гамма кода Элиаса.
+
# Закодировать N = N' + 1 с помощью гамма-кода Элиаса.
# Добавьте оставшиеся N' двоичных цифр к представлению N.
+
# Добавить оставшиеся N' двоичных цифр к представлению N.
 
 
  
 
Начало кодирования:
 
Начало кодирования:
Строка 35: Строка 34:
 
16 = 24 + 0 => N' = 4, N = 5 => 001010000 1/512
 
16 = 24 + 0 => N' = 4, N = 5 => 001010000 1/512
 
17 = 24 + 1 => N' = 4, N = 5 => 001010001  "
 
17 = 24 + 1 => N' = 4, N = 5 => 001010001  "
 
 
 
 
</source>
 
</source>
  
 
Чтобы декодировать число из Дельта-кода Элиаса:
 
Чтобы декодировать число из Дельта-кода Элиаса:
# Вычитайте и посчитайте ноли из потока, пока не доберетесь до первой единицы. Назовите число нолей L.
+
# Прочитать и сосчитать количество нулей из потока, пока не встретится 1. Пусть L — количество нулей.
# Учитывая, что единица, которая была достигнута – это первая цифра целого числа, значение которого 2L, прочитайте оставшиеся L цифр этого целого числа. Назовите это целое число N.
+
# Учитывая, что единица, которая была достигнута — это первая цифра целого числа, значение которого 2<sup>L</sup>, прочитать оставшиеся L цифр этого целого числа. Пусть N — прочитанное число.
# Поместите единицу на первое место конечного вывода, который представляет собой значение 2N-1. Вычитайте и добавьте следующие N-1 цифр.
+
# Поместить единицу на первое место конечного вывода, который представляет собой значение 2<sup>N</sup>-1. Прочитать и добавить следующие N-1 цифр.
 
 
  
 
Пример:
 
Пример:
 
001010001
 
001010001
# 2 ведущих ноля в 001.
+
# 2 ведущих ноля в 001.
 
# вычитайте 2 или более битов, т.e. 00101.
 
# вычитайте 2 или более битов, т.e. 00101.
 
# декодируйте N = 00101 = 5.
 
# декодируйте N = 00101 = 5.
# получим N' = 5 - 1 = 4 оставшихся бита для полного кода, т.e. '0001'.
+
# получим N' = 5 — 1 = 4 оставшихся бита для полного кода, т.e. '0001'.
 
# закодированное число = 24 + 1 = 17.
 
# закодированное число = 24 + 1 = 17.
  
Этот код может быть также применен к целым числам с нулевым или отрицательным значением таким же способом, которые был описан в статье о [[Гамма код Элиаса |Гамма-коде Элиаса]] .
+
Этот код может быть также применён к целым числам с нулевым или отрицательным значением (см.: [[гамма-код Элиаса]]).
 
 
 
 
 
 
 
 
== Ссылки ==
 
Оригинал статьи на английском
 
{{cite web
 
| url = http://en.wikipedia.org/wiki/Elias_delta_coding
 
| title = Elias delta coding
 
}}
 
  
 
== См. также ==
 
== См. также ==

Версия от 18:27, 12 мая 2009

Ошибка Lua в Модуль:Autosorting на строке 85: attempt to index field 'wikibase' (a nil value).Ошибка Lua в Модуль:Autosorting на строке 85: attempt to index field 'wikibase' (a nil value).

Дельта-код Элиаса  — это универсальный код для кодирования положительных целых чисел, разработанный Питером Элиасом.

Для того, чтобы закодировать число:

  1. Записать его в двоичном виде.
  2. Сосчитать биты и записать количество битов в двоичном виде (Х).
  3. Использовать двоичное значение, записанное в шаге 1 снова, удалить стоящий впереди бит и записать оставшиеся биты (Y).
  4. Присоединить второе двоичное значение (Y) к первому (X).
  5. Сосчитать биты, записанные в шаге 2 (X), вычесть 1 из этого числа и добавить в начало много нулей.

Аналогичным образом этот процесс можно описать так:

  1. Разделить целое число на самую большую степень 2, которую оно содержит (2N'), и оставшиеся N' двоичных цифр целого числа.
  2. Закодировать N = N' + 1 с помощью гамма-кода Элиаса.
  3. Добавить оставшиеся N' двоичных цифр к представлению N.

Начало кодирования:

                                         Предполагаемые вероятности
 1 = 20 => N' = 0, N = 1 => 1             1/2
 2 = 21 + 0 => N' = 1, N = 2 => 0100      1/16
 3 = 21 + 1 => N' = 1, N = 2 => 0101       "
 4 = 2² + 0 => N' = 2, N = 3 => 01100     1/32
 5 = 2² + 1 => N' = 2, N = 3 => 01101      "
 6 = 2² + 2 => N' = 2, N = 3 => 01110      "
 7 = 2² + 3 => N' = 2, N = 3 => 01111      "
 8 = 2³ + 0 => N' = 3, N = 4 => 00100000  1/256
 9 = 2³ + 1 => N' = 3, N = 4 => 00100001   "
10 = 2³ + 2 => N' = 3, N = 4 => 00100010   "
11 = 2³ + 3 => N' = 3, N = 4 => 00100011   "
12 = 2³ + 4 => N' = 3, N = 4 => 00100100   "
13 = 2³ + 5 => N' = 3, N = 4 => 00100101   "
14 = 2³ + 6 => N' = 3, N = 4 => 00100110   "
15 = 2³ + 7 => N' = 3, N = 4 => 00100111   "
16 = 24 + 0 => N' = 4, N = 5 => 001010000 1/512
17 = 24 + 1 => N' = 4, N = 5 => 001010001  "
…

Чтобы декодировать число из Дельта-кода Элиаса:

  1. Прочитать и сосчитать количество нулей из потока, пока не встретится 1. Пусть L — количество нулей.
  2. Учитывая, что единица, которая была достигнута — это первая цифра целого числа, значение которого 2L, прочитать оставшиеся L цифр этого целого числа. Пусть N — прочитанное число.
  3. Поместить единицу на первое место конечного вывода, который представляет собой значение 2N-1. Прочитать и добавить следующие N-1 цифр.

Пример: 001010001

  1. 2 ведущих ноля в 001.
  2. вычитайте 2 или более битов, т.e. 00101.
  3. декодируйте N = 00101 = 5.
  4. получим N' = 5 — 1 = 4 оставшихся бита для полного кода, т.e. '0001'.
  5. закодированное число = 24 + 1 = 17.

Этот код может быть также применён к целым числам с нулевым или отрицательным значением (см.: гамма-код Элиаса).

См. также

en:Elias delta coding ko:엘리어스 델타 부호 ja:デルタ符号