Код Левенштейна


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

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

  • Инициализировать счетчик шагов С = 1, K — код числа(изначально пустой).
  • Записать двоичный код кодируемого числа без «старшей» 1 (например, число 1100 записать как 100; число 100 — как 00).
  • Дописать полученное в начало K.
  • Пусть M — количество бит, записанных на втором шаге. Перевести M в двоичный вид.
  • Если М не пусто, то С = С + 1, и повторить алгоритм с шага 2 для полученного М. Иначе перейти на шаг 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

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

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



  • Список графов и герцогов Мэна
  • Числа харшад
  • Список глав государств в 1110 году
  • Шмелёв, Вадим Фёдорович
  • Регулярное простое число

  •  

    • Яндекс.Метрика
    • Индекс цитирования