Голомбовское кодирование: как работает элегантный алгоритм сжатия данных

Голомбовское кодирование: как работает элегантный алгоритм сжатия данных

Май 25, 2026 data-compression algorithms golomb-coding rice-coding optimization backend-development computer-science performance-tuning

Golomb Coding: когда математика помогает сжать данные

Всё чаще разработчики сталкиваются с задачей сжатия данных, где обычные алгоритмы вроде gzip или LZ4 работают неоптимально. Особенно если данные имеют чёткую математическую структуру. Здесь на помощь приходит Golomb coding — метод сжатия без потерь, предложенный Соломоном Голомбом ещё в 60-х годах прошлого века.

Его главная особенность — узкая специализация. Алгоритм эффективен только для данных с геометрическим распределением, где маленькие значения встречаются намного чаще больших.

Где встречается геометрическое распределение

Такие данные окружают нас повсюду. Количество попыток повторной отправки пакета в сети, разница между соседними кадрами в видео, частота ошибок разной критичности в логах — во всех этих случаях маленькие числа доминируют. Golomb coding использует это преимущество, назначая короткие коды частым значениям и длинные — редким.

Принцип работы

В основе лежит параметр M. Каждое число разбивается на частное и остаток. Частное кодируется унарным кодом, остаток — бинарным. Получается компактное представление, которое хорошо работает именно при геометрическом распределении.

На практике это означает: если в ваших данных преобладают небольшие значения, Golomb coding даст лучшее сжатие, чем универсальные алгоритмы, и при этом потребует меньше ресурсов процессора.

Rice coding: упрощённая версия

Роберт Райс предложил ограничить параметр M степенями двойки. Это позволило заменить деление и взятие остатка на простые побитовые операции — сдвиги и маски. В результате Rice coding работает быстрее Golomb coding, сохраняя сопоставимое качество сжатия.

Где используют эти алгоритмы

Несмотря на возраст, методы до сих пор применяются в реальных системах:

  • Видеокодеки H.264 и H.265 используют Exp-Golomb coding для заголовков
  • Алгоритмы сжатия голоса применяют Rice coding
  • Инструменты биоинформатики сжимают последовательности ДНК
  • IoT-устройства минимизируют объём передаваемых данных
  • Встраиваемые системы экономят процессорное время

Преимущества для разработчика

Главное достоинство — предсказуемость. Достаточно правильно выбрать параметр M, и сжатие будет работать стабильно. Кодирование и декодирование выполняются за константное время, не требуют больших таблиц и дают одинаковый результат при каждом запуске.

Когда метод не подходит

Если значения распределены равномерно или по нормальному закону, Golomb coding может даже увеличить размер данных. В таких случаях лучше использовать адаптивные алгоритмы или LZMA.

Итог

Golomb и Rice coding — пример того, как понимание структуры данных позволяет создавать простые и эффективные решения. В мире, где доминируют сложные ML-модели, эти алгоритмы 60-х годов всё ещё находят применение там, где данные имеют нужное распределение.

Read in other languages:

BG EL CS UZ TR SV FI RO PT PL NB NL HU IT FR ES DE DA ZH-HANS EN