Важным моментом является то, что коды Голомба не должны быть короче, чем кратчайшее двоичное кодирование для одного конкретного числа. Скорее, предоставляя конкретный вид кодирования переменной длины , они уменьшают среднюю длину на кодированное значение по сравнению с кодированием с фиксированной шириной, если кодированные значения взяты из большой диапазон, но наиболее распространенные значения, как правило, малы (и, следовательно, большую часть времени используют только небольшую часть этого диапазона).
Например, если вы должны были передавать целые числа в диапазоне от 0 до 1000, но подавляющее большинство фактических значений было в диапазоне от 0 до 10, в кодировке с фиксированной шириной, большинство передаваемых кодов будет иметь начальные 0, которые не содержат информации:
Чтобы охватить все значения от 0 до 1000, вам необходимо 10-битное кодирование в двоичном коде с фиксированной шириной. Теперь, поскольку большинство ваших значений будет меньше 10, по крайней мере, первые 6 битов большинства чисел будут равны 0 и будут содержать мало информации.
Чтобы исправить это с помощью кодов Голомба, вы делите числа, деля их на 10 и кодируя частное и остальное отдельно. Для большинства значений все, что должно быть передано, - это остаток, который может быть закодирован с использованием максимум 4 битов (если вы используете усеченный двоичный код для остатка, он может быть меньше). Затем частное передается в унарном формате, который кодируется как один 0
бит для всех значений ниже 10, как 10
для 10..19, 110
для 20..29 и т. Д.
Теперь для большинства ваших значений вы уменьшили размер сообщения до 5 бит максимум, но вы все равно можете передавать все значения однозначно без разделителей.
Это связано с довольно высокой стоимостью для больших значений (например, значения в диапазоне 990..999 требуют 100 бит для частного), поэтому кодирование является оптимальным для двусторонних геометрических распределений.
Для длинных серий 1 бита в коэффициентах больших значений можно обратиться с последующим кодированием длины серии. Однако, если коэффициенты занимают слишком много места в получающемся сообщении, это может указывать на то, что другие коды могут быть более подходящими, чем Голомб / Райс.