Levenstein coding, or Levenshtein coding, is a universal code encoding the non-negative integers developed by Vladimir Levenshtein.[1][2]
Encoding
The code of zero is "0"; to code a positive number:
Initialize the step count variable C to 1.
Write the binary representation of the number without the leading "1" to the beginning of the code.
Let M be the number of bits written in step 2.
If M is not 0, increment C, repeat from step 2 with M as the new number.
Write C "1" bits and a "0" to the beginning of the code.
The code begins:
Number
Encoding
Implied probability
0
0
1/2
1
10
1/4
2
110 0
1/16
3
110 1
1/16
4
1110 0 00
1/128
5
1110 0 01
1/128
6
1110 0 10
1/128
7
1110 0 11
1/128
8
1110 1 000
1/256
9
1110 1 001
1/256
10
1110 1 010
1/256
11
1110 1 011
1/256
12
1110 1 100
1/256
13
1110 1 101
1/256
14
1110 1 110
1/256
15
1110 1 111
1/256
16
11110 0 00 0000
1/4096
17
11110 0 00 0001
1/4096
To decode a Levenstein-coded integer:
Count the number of "1" bits until a "0" is encountered.
If the count is zero, the value is zero, otherwise
Start with a variable N, set it to a value of 1 and repeat count minus 1 times:
Read N bits, prepend "1", assign the resulting value to N
The Levenstein code of a positive integer is always one bit longer than the Elias omega code of that integer. However, there is a Levenstein code for zero, whereas Elias omega coding would require the numbers to be shifted so that a zero is represented by the code for one instead.
Example code
Encoding
Decoding
See also
Elias omega coding
Iterated logarithm
References
1. ^{{cite web | url = http://www.compression.ru/download/articles/int/levenstein_1968_on_the_redundancy_and_delay.pdf | title = 1968 paper by V. I. Levenshtein (in Russian) }} 2. ^{{cite book | title = Variable-length codes for data compression | author = David Salomon | publisher = Springer | year = 2007 | isbn = 978-1-84628-958-3 | page = 80 | url = https://books.google.com/books?id=81AfzW6vux4C&pg=PA80&dq=%22Levenstein+coding%22&hl=en&ei=tYKZTIfzKJScsQP-1eWpAw&sa=X&oi=book_result&ct=result&resnum=3&ved=0CDgQ6AEwAg#v=onepage&q&f=false }}