Tool to convert numbers according to the Elias Gamma code, denoted γ, encoding generally used in data compression to store data of arbitrary size.

Elias Gamma Encoding - dCode

Tag(s) : Compression, Notation System

dCode is free and its tools are a valuable help in games, maths, geocaching, puzzles and problems to solve every day!

A suggestion ? a feedback ? a bug ? an idea ? *Write to dCode*!

Elias's gamma encoding is a universal code with a prefix. The prefix indicates the length of the binary string that follows it. It is therefore possible to encode any binary integer number.

To code a decimal number $ N $, take its binary representation $ N_{(2)} $ and calculate $ L = \lfloor \log_2 N \rfloor $ which is equivalent to its number of bits minus 1.

__Example:__ To encode $ N = 5 $ which has for binary representation $ N_{(2)} = 101 $ (3 bits), calculate the integer part of $ \log_2 5 \approx 2.32 $ i.e. $ L = 2 $ (i.e. 1 less than the number of bits).

Encode in unary $ L $ and concatenate the binary representation without the most significant bit (the first `1`) to obtain the Elias Gamma code $ \gamma $ that corresponds to $ N $

__Example:__ $ L = 2 $ is coded in unary $ 001 $ (or sometimes $ 110 $) and the binary without the first $ 1 $ is $ 01 $ so the Elias encoding $ \gamma = 00101 $

__Example:__ The first integers encoded with Gamma are&:

1 | 1 | 2 | 010 |
---|---|---|---|

3 | 011 | 4 | 00100 |

5 | 00101 | 6 | 00110 |

7 | 00111 | 8 | 0001000 |

9 | 0001001 | 10 | 0001010 |

11 | 0001011 | 12 | 0001100 |

13 | 0001101 | 14 | 0001110 |

15 | 0001111 | 16 | 000010000 |

17 | 000010001 | 18 | 000010010 |

19 | 000010011 | 20 | 000010100 |

Read the binary value in order to split it into 2 sub-values of the same length separated by a bit: the first is the unary value corresponding to the number of bits minus 1, the second is the binary representation without the most significant bit.

To find the initial value, put a `1` in front of the second value and convert the binary number obtained to base 10.

__Example:__ `00101` splits `00/1/01`, the binary value is $ 101 $ which corresponds to the number $ 5 $.

Binary numbers have always an odd-length.

Coded values always start with a long string of `0` (or `1`)

Elias Gamma encoding is generally linked to data compression algorithms.

The unary code can be coded with `0` followed by a separator `1` or else with `1` followed by the separator `0`.

__Example:__ `5` can be coded as `000001` or `111110`.

Peter Elias described it in an article titled *Universal codeword sets and representations of the integers* in 1975.

dCode retains ownership of the "Elias Gamma Encoding" source code. Except explicit open source licence (indicated Creative Commons / free), the "Elias Gamma Encoding" algorithm, the applet or snippet (converter, solver, encryption / decryption, encoding / decoding, ciphering / deciphering, translator), or the "Elias Gamma Encoding" functions (calculate, convert, solve, decrypt / encrypt, decipher / cipher, decode / encode, translate) written in any informatic language (Python, Java, PHP, C#, Javascript, Matlab, etc.) and all data download, script, or API access for "Elias Gamma Encoding" are not public, same for offline use on PC, tablet, iPhone or Android !

The copy-paste of the page "Elias Gamma Encoding" or any of its results, is allowed as long as you cite the online source

Reminder : dCode is free to use.

elias,gamma,binary,unary,compression

Source : https://www.dcode.fr/elias-gamma-encoding

© 2022 dCode — The ultimate 'toolkit' to solve every games / riddles / geocaching / CTF.

Feedback