WikiSort.ru - Не сортированное

ПОИСК ПО САЙТУ | о проекте

Код Левенштейна — это универсальный код, позволяющий кодировать неотрицательные целые числа. Он был придуман Владимиром Левенштейном.

Код нуля — это «0»; для кодирования положительного числа используется алгоритм:

  1. Инициализировать счетчик шагов С = 1, K — код числа(изначально пустой).
  2. Записать двоичный код кодируемого числа без «старшей» 1 (например, число 1100 записать как 100; число 100 — как 00).
  3. Дописать полученное в начало K.
  4. Пусть M — количество бит, записанных на втором шаге. Перевести M в двоичный вид.
  5. Если М не пусто, то С = С + 1, и повторить алгоритм с шага 2 для полученного М. Иначе перейти на шаг 6.
  6. Записать С штук единиц и 0 в начало кода К (например, если счетчик С = 2, К = 0 011, получить: 110 0 011) — код Левенштейна.

Код Левенштейна для первых 24 чисел будет выглядеть так:

 0 0
 1 10
 2 110 0
 3 110 1
 4 1110 0 00
 5 1110 0 01
 6 1110 0 10
 7 1110 0 11
 8 1110 1 000
 9 1110 1 001
10 1110 1 010
11 1110 1 011
12 1110 1 100
13 1110 1 101
14 1110 1 110
15 1110 1 111
16 11110 0 00 0000
17 11110 0 00 0001
18 11110 0 00 0010
19 11110 0 00 0011
20 11110 0 00 0100
21 11110 0 00 0101
22 11110 0 00 0110
23 11110 0 00 0111
24 11110 0 00 1000

Пусть К — код Левенштейна. Для расшифровки кода Левенштейна необходимо:

  1. Посчитать количество С единичных бит до первого нулевого бита.
  2. Если С = 0, то закодированное значение — 0. Если нет, перейти на шаг 3.
  3. Отбросить из К эти С единиц и следующий за ними 0. Записать новое значение К.
  4. Установить переменную N = 1. Ввести счетчик шагов P = С — 1.
  5. Если P = 0, то N — искомое число. Если нет, перейти на шаг 6.
  6. Считать первые N бит из К. Записать новое значение К без считанных N бит.
  7. К считанной записи добавить 1 в начало (например, считано 00, получено: 100).
  8. Преобразовать полученное значение в десятичную систему (или исходную, если известно) — новое значение переменной N.
  9. P = P — 1. Повторить с шага 5.

При кодировании Левенштейна положительное число всегда на 1 бит больше, чем при омега-кодировании Элиаса. Однако, кодом Левенштейна можно закодировать ноль, в то время как при омега-кодировании Элиаса необходимо переобозначать все цифры таким образом, чтобы ноль представлялся единицей.


Ссылки

Источник

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии