то есть,
,
или .
Или
.
Оба данных кода сопоставляют каждому символу свой код. Отметим, что при
этом, даже в оптимальном случае, например, средняя длина кода Шеннона-Фано
для упомянутого выше набора символов с вероятностями , , и , как
было сказано, равна 2 двоичные цифры на символ, а энтропия
, т.е. меньше 2, меньше, чем среднее
число двоичных цифр на символ, можно закодировать более эффективно!
Однако, посимвольные коды – которые сопоставляют каждому символу свой
код – так не могут. Чтобы добиться более эффективного кодирования, нужно
кодировать не отдельные символы, а текст в целом. Для независимых символов
такой код даёт арифметическое кодирование.
Помните, как мы водили количество информации на примере единичного
отрезка, разбитого на интервалы ? Арифметическое кодирование
рассматривает весь текст, который нужно передать, как одно большое число.
Берётся единичный отрезок, берётся первый символ текста (допустим, это символ
, вероятность которого ) и считается, что число, представляющее наш текст лежит
в отрезке внутри единичного отрезка. Далее этот отрезок снова разбивается в
пропорции , берётся второй символ текста, допустим, , и считается, что
число, представляющее текст лежит в под-интервале внутри отрезка и т.д. С
каждым символом отрезок «сжимается», уточняется, нужное количество цифр после
запятой для описания числа растёт - что соответствует обычной записи текста (чем
больше символов, тем длиннее код текста). Арифметическое кодирование позволяет
сколь угодно приблизиться к оптимальному кодированию, когда среднее число
двоичных единиц на символ равно энтропии.
Задачи