Как известно большинству людей, используя 4 бита, мы можем считать от 0 до 15 (0123456789ABCDEF в шестнадцатеричном формате). Но если бы мы считали только до 9, мы все равно использовали бы 4 бита, и цифры от A до F были бы потрачены впустую.
Однако на странице QR-кода в Википедии говорится, что при использовании только цифровых цифр от 0 до 9 используется 3 9 бит на символ, что является правильным с точки зрения статистики. И все же треть бита не является физическим объектом, и отправка числа от 0 до 9 использует, по крайней мере, 4 бита, насколько мне известно.
Есть ли способ использовать потраченные впустую комбинации для эффективной отправки символа с долями битов?
Хорошо, позвольте мне привести пример: две цифры «27» должны быть отправлены. При нормальных методах кодирования отправленные биты были бы 00100111. Затем мы могли бы представить систему, которая заменит цифру «2» на цифру «E» или «F», в зависимости от следующего бита; в этом случае следующий бит равен 0, поэтому «2» заменяется на «E». Результирующая битовая строка будет тогда иметь вид 1101 0 111. С другой стороны, если цифры «28» должны быть отправлены, первый бит после «2» будет 1, поэтому вместо этого он заменяется цифрой «F», получая строку 1111 1 000.
В обоих случаях была достигнута экономия в 1 бит, потому что один клев использовался для двух разных символов. Другими словами, три с половиной бита используются для каждого символа.
(10 * first_digit) + second_digit
и закодировать это в 7 битов, представляющих 0 ... 99, с кодами 100-127, оставленными для других целей. И еще больше экономии благодаря 3 цифрам, сжатым в 10 бит.