откуда получаем, что L(C) < L(B), что неверно, поскольку код B был оптимальным.
Теперь ясно, как выглядит процесс построения оптимального кода. Упорядочиваем символы по вероятности
их появления в тексте (по убыванию). Далее берём два са мых редких, складыв аем их вероятности, и полученную
сумму вставляем в упорядоченный набор вероятностей без двух последних элементов. З атем эту процедуру
повторяем, пока не придём к двум вероятностям. Им соответствуют коды 0 и 1. А теперь идём назад: находим
те две вероятности на предыдущем шаге, которые дали в сумме одну из вероятностей p
i
, им присваиваем коды
K0 и {K1} (добавляем 0 и 1 к уже имеющемуся коду K вероятности p
i
). И так далее: находим на предыдущем
шаге две вероятности, давшие в сумме одну из имеющихся на данном шаге вероятностей, и приписываем к их
кодам нуль и единицу. Остальные коды переносим в предыдущий шаг без изменений.
Набор кодовых слов для исходного набора вероятностей (то есть то, что получится после возвращения к
первому шагу) и есть код Хаффмана.
2.2. Коды с исправлением ошибок
2.2.1. Постановка задачи
Пусть требуется передат ь по зашумлённому ка налу связи некоторое сообщение (конечный набор симво-
лов фиксированного алфавита). При этом зашумлённость подразумевает возможность искажения некоторых
передаваемых символов. Мы будем передавать сообщение в закодированном виде, при этом добавляя в него
некоторую избыточную информацию с тем чтобы адреса т имел возможность правиль но раскодировать наше
сообщение.
При этом мы будем считать, что в процесс е передачи данных происходят т олько ошибки замещения, то есть
один или несколько с имволов сообщения изменяются на какие-то другие символы, но длина сообщения при этом
не меняется.
2.2.2. Коды Хемминга
Определим схему кодирования для (двоичного) кода Хемминга, исправляющего одну ошибку. Поскольку мы
оперируем с двоичными разрядами, суммирование везде будет предполагаться по модулю два.
Пусть требуется закодировать некоторое сообщение a
1
a
2
. . . a
l
, где a
i
∈ B.
Через V
k
обозначим набор индексов, имеющих в двоичной записи единицу в k-м разряде.
Теперь будем с троить кодовое слово b
1
b
2
. . . b
n
по следующему правилу. Вначале все разряды с номерами,
не являющимися степенями двойки, заполним символам кодируемого сообщения и назовём информационными.
Разряды с номерами, являющимися степенью двойки, заполним так:
b
2
k
:=
X
m6=2
k
,m∈V
k
b
m
. (19)
Такие разряды на з ы вают контрольными. Таким образом, мы выбираем их так, чтобы сумма всех разрядов с
индексами из каждой последовательности V
i
была равна нулю, потому что в каждом множе стве V
k
находится
ровно один контрольный разряд. Несложно з аметить, что число контрольных разрядов в кодо вом слове длины n
будет равно m, где 2
m−1
6 n < 2
m
. Следовательно, число информа ционных разрядов равно n−m, а общее число
наборов длины n в коде Хемминга равно 2
n−m
, потому что мы имеем право заполнять только информа ционные
разряды, а контрольные уже однозначно определяются.
Пусть произошла ошибка в разряде b
i
. Поскольку код двоичный, то, чтобы исправить эту ошибку, достаточно
знать только номер i. Найдём числа ε
k
=
P
m∈V
k
b
m
. Заметим, что ε
k
= 0 тогда и только тогда, когда i ∈ V
k
. Иными
словами, это означает, что последоват е льность ε
t
. . . ε
0
есть не что иное, как дво ичная запись числа i. Если мы
получили нулевое число, то ошибок нет.
2.2.3. Свойства кодов, исправляющих ошибки
Определение. Расстоянием Хемминга между двумя кодовыми словами будем наз ывать число различных
разрядов в них. Минимальным расстоянием кода C будем называть, соответст венно, минимум таких расстояний
по всем парам слов из C.
Определение. Весом Хемминга кодового слова будем называть число ненулевых символов в нём.
Замечание. Это определение работает не только для двоичных кодов, но и для кодов над Z
q
.
Сейчас мы выясним, что такое вообще двоичный код C, который испра вляет одну о шибку. Пусть α, β ∈ C.
Введём на булевом кубе, в который вложен наш код C, метрику, задаваемую расстоянием Хемминга. Шары
радиуса 1 с центрами в точках α и β не должны пересекаться, иначе возможна ситуация, когда искажённое
слово попадёт в «сферу влияния» двух кодовых слов, и будет неясно, к какому из двух слов его относить.
22