- •Лекции по дискретной математике
- •Аннотация
- •Оглавление
- •Предисловие
- •Рекомендуемая литература
- •Начальные сведения
- •1. Множества
- •2. Отображения и соответствия
- •3. Отношения
- •4. Натуральные числа
- •1. Логика высказываний
- •1.1. Высказывания и операции над ними
- •1.2. Формулы логики высказываний
- •1.3. Равносильность формул
- •1.4. Принцип двойственности
- •1.5. Тождественно истинные формулы
- •1.6. Система натурального вывода
- •1.7. Принцип резолюций
- •2. Логика предикатов
- •2.1. Понятие предиката
- •2.2. Логические операции над предикатами
- •2.3. Кванторы
- •2.5. Выполнимые формулы и проблема разрешения
- •2.6. Логика предикатов и математическая практика
- •3. Формальные теории
- •3.1. Формализация в математике
- •3.2. Исчисление высказываний
- •3.3. Исчисление предикатов
- •4. Алгоритмы и вычислимость
- •4.1. Мощность множества
- •4.2. Счетные множества
- •4.3. Диагональный метод Кантора
- •4.4. Уточнение понятия алгоритма
- •4.5. Рекурсивные функции
- •4.6. Вычислимость и разрешимость
- •5. Булевы функции
- •5.1. Двоичные векторы
- •5.2. Понятие булевой функции
- •5.3. Булевы функции от одной и двух переменных
- •5.5. Полные системы булевых функций
- •6. Элементы теории кодирования
- •6.1. Двоичное кодирование
- •6.2. Векторное пространство {0,1}n
- •6.3. Отображения {0,1}n в {0,1}m
- •6.4. Блочные двоичные коды
- •6.5. Коды Хемминга
- •7. Функции выбора и их логическая форма
- •7.1. Понятие функции выбора
- •7.2. Примеры функций выбора
- •7.4. Логическое представление функций выбора
- •7.5. Основные свойства функций выбора
168
E(α) как ближайшее к нему кодовое слово, единственное,
которое может привести к появлению слова β в результате не более, чем k ошибок.
6.5. Коды Хемминга
Начнем с нескольких определений и конструкций общего характера.
Если функция кодирования блочного кода E:{0,1}n→{0,1}m линейна, то код называется линейным. В дальнейшем мы рассматриваем только линейные коды. Назовем проверочным
такое линейное отображение S:{0,1}m→{0,1}k, что S(β)=0 тогда и только тогда, когда β является кодовым словом. Для произвольного β {0,1}m вектор S(β) называется синдромом. Нулевой синдром имеют кодовые слова, и только они.
Предположим, что в зашумленном канале передаваемое кодовое слово E(α) исказилось, к нему добавился вектор ошибок δ, так что на выходе принято слово β=δ E(α). Тогда
S(β)=S(δ E(α))=S(δ) S(E(α))=S(δ).
Для того чтобы правильно декодировать передаваемое сообщение, нужно уметь определять вектор ошибок по его синдрому. Если вектор ошибок определен, то исправить их несложно: E(α)=δ β. Ограничившись случаем одиночных ошибок, можно привести сравнительно несложное построение кода, исправляющего ошибки.
169
Вектор одиночной ошибки имеет всего одну ненулевую координату, то есть является одним из векторов канонического базиса пространства {0,1}m. Линейный код позволяет исправлять все одиночные ошибки тогда и только тогда, когда синдромы всех векторов из канонического базиса пространства
отличны от нуля и друг от друга. Поскольку пространство {0,1}k содержит всего 2k−1 ненулевых векторов,
используя проверочное отображение S:{0,1}m→{0,1}k, можно исправлять одиночные ошибки лишь в том случае, когда длины кодовых слов ограничены числом 2k−1, то есть m≤2k−1. Оказывается, что можно построить коды с исправлением ошибок, в которых m=2k−1. В таких кодах их «исправляющие» возможности используются с максимальной эффективностью. К их числу относятся рассматриваемые ниже коды Хемминга.
Перейдем к описанию кода Хемминга. Пусть m=2k−1. Среди m позиций кодового слова k позиций являются контрольными, а n = 2k−k–1 – информационными. Матрица H (размерности k×(2k−1)), задающая проверочное отображение, содержит в качестве столбцов все ненулевые векторы пространства {0,1}k. Порядок столбцов не важен, но технически удобнее считать, что в каждом столбце записан его номер в двоичном формате. Строки матрицы H определяют коэффициенты системы из k
однородных линейных уравнений c 2k−1 неизвестными. Множество кодовых слов совпадает с множеством решений этой системы. Выражая последние k неизвестных через первые
170
2k−k–1, мы получаем уравнения для вычисления контрольных битов. Вектор с нулевым синдромом является кодовым и его декодирование сводится просто к отбрасыванию контрольных битов. Если синдром отличен от нуля, он представляет собой двоичную запись номера позиции, в которой произошла ошибка. В этом случае при декодировании ошибка исправляется. Доля информационных позиций в коде Хемминга составляет
2k − k −1 |
=1 |
− |
k |
|||
|
|
|
|
|||
2k −1 |
|
2k −1 |
||||
|
|
и стремится к 1 с ростом k.
Пример. Рассмотрим случай k=3, m=7, n=4. Проверочное отображение S задается следующей матрицей:
|
0 |
0 |
0 |
1 |
1 |
1 |
1 |
|
0 |
1 |
1 |
0 |
0 |
1 |
|
H = |
1 . |
||||||
|
1 |
0 |
1 |
0 |
1 |
0 |
|
|
1 |
Столбцы матрицы представляют собой образы векторов канонического базиса пространства {0,1}7 относительно S. Для произвольного вектора β=(β1,β2,β3,β4,β5,β6,β7) синдром
S(β)=(σ1,σ2,σ3) определяется уравнениями
σ1=β4 β5 β6 β7;
σ2=β2 β3 β6 β7;
σ3=β1 β3 β5 β7.
171
Кодовое слово S(α)=(α1,α2,α3,α4,α5,α6,α7) должно удовлетворять системе уравнений
α4 α5 α6 α7=0; α2 α3 α6 α7=0; α1 α3 α5 α7=0.
Решив эту систему относительно α5, α6, α7, можно найти уравнения, задающие контрольные биты. Сложив первые два уравнения, получаем
α2 α3 α4 α5=0,
откуда
α5=α2 α3 α4.
Подставив выражение для α5 в третье уравнение системы, получаем
α7=α1 α2 α4.
Теперь подставляем выражение для α7 во второе уравнение системы и находим
α6=α1 α3 α4.