Код Элиаса или гамма-код Элиаса — универсальный код , кодирующий положительные целые числа, разработанный Питером Элиасом . [1] : 197, 199 Он чаще всего используется при кодировании целых чисел, верхняя граница которых не может быть определена заранее.
Чтобы закодировать число x ≥ 1:
Эквивалентный способ выражения того же процесса:
Для представления числа гамма Элиаса (γ) использует биты. [1] : 199
Код начинается (для ясности добавлено предполагаемое распределение вероятностей для кода):
Чтобы декодировать целое число, закодированное гамма-кодом Элиаса:
Гамма-кодирование используется в приложениях, где наибольшее закодированное значение заранее неизвестно, или для сжатия данных [ сомнительно – обсудить ] , в которых малые значения встречаются гораздо чаще, чем большие.
Гамма-кодирование является строительным блоком дельта-кода Элиаса .
Гамма-кодирование не кодирует ноль или отрицательные целые числа. Один из способов обработки нуля — добавить 1 перед кодированием, а затем вычесть 1 после декодирования. Другой способ — добавить к каждому ненулевому коду префикс 1, а затем кодировать ноль как один 0.
Один из способов кодирования всех целых чисел — это настройка биекции , сопоставляющей целые числа (0, −1, 1, −2, 2, −3, 3, ...) с (1, 2, 3, 4, 5, 6, 7, ...) перед кодированием. В программном обеспечении это проще всего сделать, сопоставив неотрицательные входы с нечетными выходами, а отрицательные входы с четными выходами, так что младший бит становится инвертированным битом знака :
Экспоненциально-голомбовское кодирование обобщает гамма-код на целые числа с "более плоским" степенным распределением, так же как кодирование Голомба обобщает унарный код. Оно включает деление числа на положительный делитель, обычно степень 2, запись гамма-кода на единицу больше частного и запись остатка в обычном двоичном коде.