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