Я не получаю Golomb / Rice, кодирующий: Это действительно делает больше битов входа или делает это?

Еще один способ сделать это с помощью так называемых f-строк (доступно в Python 3.6+, но последняя версия 3.7):

print (f"{p1} Questions: {q1}")

Обратите внимание, как f перед кавычками (относится ко всем типам кавычек), и любая переменная, которую вы хотите, должна быть в {}

12
задан Hanno Fietz 8 April 2009 в 08:04
поделиться

2 ответа

Важным моментом является то, что коды Голомба не должны быть короче самого короткого двоичного кодирования для одного конкретного числа. Скорее, предоставляя специальный вид кодирования переменной длины , они уменьшают среднюю длину на кодированное значение по сравнению с кодированием с фиксированной шириной, если кодированные значения взяты из большой диапазон, но наиболее распространенные значения, как правило, малы (и, следовательно, большую часть времени используют только небольшую часть этого диапазона).

Например, если вы должны передавать целые числа в диапазоне от 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 бита в коэффициентах больших значений могут быть адресованы с последующим кодированием длины серий. Однако, если коэффициенты занимают слишком много места в получающемся сообщении, это может указывать на то, что другие коды могут быть более подходящими, чем Голомб / Райс.

Длинные серии из 1 бита в коэффициентах больших значений могут быть адресованы с последующим кодированием длин серий. Однако, если коэффициенты занимают слишком много места в получающемся сообщении, это может указывать на то, что другие коды могут быть более подходящими, чем Голомб / Райс.

Длинные серии из 1 бита в коэффициентах больших значений могут быть адресованы с последующим кодированием длин серий. Однако, если коэффициенты занимают слишком много места в получающемся сообщении, это может указывать на то, что другие коды могут быть более подходящими, чем Голомб / Райс.

22
ответ дан 2 December 2019 в 06:27
поделиться

Одно из различий между кодированием Голомба и двоичным кодом состоит в том, что двоичный код не является префиксным кодом, который не является перейти к кодированию строк произвольно больших чисел (вы не можете решить, является ли 1010101010101010 конкатенацией 10101010 и 10101010 или чем-то еще). Следовательно, они не так легко сравнимы.

Во-вторых, код Голомба оптимален для геометрического распределения, в данном случае с параметром 2 ^ (- 1/10). Вероятность 42 составляет около 0,3%, поэтому вы получите представление о том, насколько это важно для длины выходной строки.

2
ответ дан 2 December 2019 в 06:27
поделиться