- •Дискретная математика
- •Реализация функций формулами
- •Важнейшие замкнутые классы
- •Этот класс содержит ровно булевых функций , зависящих от переменных .
- •Этот класс также содержит ровно булевых функций , зависящих от переменных и замкнут . Функция называется двойственной для функции .
- •Алгоритмы построения минимальных дизъюнктивных нормальных форм Совершенная дизъюнктивная нормальная форма (д.Н.Ф.)
- •Способы построения тупиковых д.Н.Ф.
- •Критерий поглощения.
- •Локальные алгоритмы упрощения д.Н.Ф.
- •Необходимое и достаточное условие вхождение конъюнкции в
- •Пусть и .
- •Двоичный-симметричный канал
- •Канал , в котором в каждом слове длины n может произойти любая ошибка заданного типа кратности не более s
- •Примеры кодов с исправлением одиночных ошибок различных типов.
- •Очевидно , что число w(X) равно сумме номеров единичных символов слова х.
- •Элементы теории графов
- •Задача о кратчайшем пути
- •Нахождение кратчайшего пути в графе с ребрами единичной длины
- •Нахождение кратчайшего пути на графе с ребрами произвольной длины
- •Задачи, решаемые методами теории потоков
- •Основные понятия и определения теории потоков Конечный граф (х,т) без петель называется сетью , если каждой дуге
- •В любой сети максимальное значение суммарного потока на конечных дугах равно минимальной пропускной способности разреза.
- •Определение максимального потока методом разметки вершин
- •Последовательность решения примера
- •Транспортная задача по критерию стоимости
Примеры кодов с исправлением одиночных ошибок различных типов.
Код с исправлением одного замещения.
Зафиксируем
число n
и найдем число l
такое ,что
.
Легко
видеть , что
.
Для произвольного слова
положим
.
H(X) представляет собой вектор длины l, полученный в результате сложения векторов (mod2), являющихся двоичными записями (c помощью l цифр) номеров единичных символов слова Х.
Рассмотрим
код
, состоящий
из всех слов
таких, что
H(X)=( 0,0,…,0 ).
Пример. Пусть n = 6, Х = 010101, Y = 110100.
Тогда
l
= 3, Н(Х)
= (0,1,0)
(1,0,0)
(1,1,0)
= (0,0,0) и
H
(Y)
= (0,0,1)
(0,1,0)
(1,0,0)
= (1,1,1). Следовательно,
.
Покажем, что является кодом с исправлением одного замещения.
Рассмотрим
однозначное отображение ( декодирование
), при котором каждому слову
ставится в соответствие слово Y
, если
,
или слово, полученное из Y
замещением символа с номером N(H(Y))
на
противоположный, если
.
Убедимся,
что при таком декодировании в каждом
кодовом слове будет исправлена любая
одиночная ошибка типа замещения, если
она произойдет. Действительно, пусть
в некотором слове
произошло замещение j
– го
символа , в результате чего получилось
слово Y.
Так
как
и
,
то
.
Производя
в слове Y
замещение символа с номером N(H(Y))=
,
получим исходное слово Х
.
Пример.
Пусть в слове Х
= 010101
произошло замещение пятого символа ,
в результате чего получилось слово Y
= 010111.
Так
как
,
то числовое значение слова H(Y)
равняется
5 и определяет номер замещенного символа.
Описанные выше коды были предложены Хеммингом .
Заметим
, что
.
Это следует из того , что при произвольном
задании значений
n
– l
компонент,
номера которых отличны от
(информационные позиции), значения
компонент с номерами
(проверочные позиции) однозначно
определяются из условия H(X)=(
0,0,…,0 ).
В
частности ,
.
Код
представим
следующей таблицей (*).
|
|
|
|
000000 111000 110011 001011 101101 010101 011110 100110 |
000000 100001 010010 001100 110100 001011 110011 101101 011110 111111 |
000000 100011 010101 001110 111001 110110 |
000000 001101 011010 101111 110100 |
Код с исправлением одной ошибки типа
.
Для
произвольного двоичного слова
положим
.
Очевидно , что число w(X) равно сумме номеров единичных символов слова х.
При
любых n
и k
определим код
как множество слов
таких, что W(X)=0(mod
k) , и
положим
.
Пример.
Пусть n
= 6, Х
= 110100 и Y
= 010101.Тогда W(X)
= 1+2+4 = 7, W(Y)
= =2+4+6=12 и , следовательно,
.
Покажем
, что каждый код
при
является кодом с
исправлением ошибки типа 0
.
Предположим
, что в слове Х
произошло не более одной ошибки типа
0
,
в результате чего получилось слово
Y
. Ясно, что
,
если ошибки не произошло ,
и
,
если ошибка произошло в
ом
символе. Так как
,
то при
W(Y)(mod
k)=0
, если
ошибки не произошло, или номеру
замещенного символа в противном случае
. Это позволяет построить декодирование
, при котором в каждом слове кода
( при
будет исправлена одиночная ошибка типа
0
,
если она произойдет .
Заметим
, что по крайней мере для половины слов
кода
так же возможно разбиение на информационные
и проверочные позиции.
Пусть
.
Выберем в качестве проверочных позиций
компоненты с номерами 1,2,…,
и убедимся в том, что при любом заполнении
остальных (информационных) позиций
существует (вообще говоря , уже не
однозначное ) заполнение проверочных
позиций, при котором выполняется условие
H(X)=(
0,0,…,0 ) для
Действительно,
пусть информационные позиции вносят
в сумму
некоторую величину , наименьший
положительный вычет которой по mod(n+1)
равен
i
(
.
Очевидно, что проверочные позиции
всегда
можно заполнить так, чтобы они вносили
в эту сумму величину n+1-i
, что обеспечивает выполнение условия
W(X)=0(mod
k). Другое
заполнение проверочных позиций , при
котором также получается кодовое слово
, возможно
лишь тогда , когда 2(n+1)-i
,
так как
.
Отюда следует , что полученное множество
содержит не менее половины слов кода
, а в случае
совпадает с
.
Код с исправлением одного выпадения или вставки.
Покажем
, что каждый код
при
является также кодом с исправлением
одного выпадения (и , следовательно ,
кодом с исправлением одного исправления
или вставки ) .
Предположим,
что в некотором слове
произошло выпадение символа, результате
чего получилось слово
длины
.
Пусть
обозначает число единиц (соответственно
нулей), расположенных правее выпавшего
символа, и
.
Тогда, если выпал символ 0,то
,а
если символ 1,то
. Поэтому , обозначая наименьший
неотрицательный вычет числа - W(Y)
по mod
k
через
и замечая , что
,
имеем
Поскольку
, то на основании сравнения чисел
и
можно определить , какой из символов
(0 или 1 ) выпал.
Таким
образом, для восстановления слова Х
по слову Y
достаточно в случае
вставить в слово Y
символ 0 так , чтобы правее него было
единиц
, а в случае
вставить в слово Y
символ 1 так , чтобы правее него было
нулей .
Пример.
Пусть в слове Х
= 110100
выпал первый символ, в результате чего
получилось слово Y
= 10100. Находим , что
и , следовательно,
.
В силу условия
отсчитаем справа
нулевых
символов и вставляем перед ними символ
1, получим исходное слово Х.
4. Код с исправлением одного выпадения , вставки или замещения .
Покажем
, что каждый код
при
является кодом с
исправлением
одного выпадения, вставки или замещения
.
Убедимся
в том , что этот код является кодом с
исправлением одного замещения. Пусть
в j-
ом символе некоторого слова Х
произошло замещение, в результате чего
получилось слово У
. Ясно , что
, где знак + соответствует замещению
типа 0
,
а знак - соответствует замещению типа
1
.
Обозначим через
наименьший по абсолютной величине
вычет числа
по
mod
k
( в случае
, когда таких вычетов два , для
определенности через
обозначим положительный вычет ).
Из
соотношений
(mod
k
) ,
и
следует, что
,
что обеспечивает возможность исправления
в каждом слове
кода
(при
любого замещения , если
оно произойдет .
Пример.
Отметим, что Х
= 010101
, так как W(X)=
2+4+6=12 и
W(X)
(mod
12).
Предположим
, что в четвертом символе слова Х
произошло замещение, в результате чего
получилось слово Y
= 010001. Так
как W(Y)
= 2 + 6 = 8 и
W(Y)
= 8 = -4 (mod 12) ,
то
, что
указывает на номер замещенного символа.
Код
приведен в таблице (*).
Замечание.
По крайней мере для половины слов кода
также возможно разбиение информационные
и проверочные позиции.
Пусть
.
В качестве проверочных позиций выберем
компоненты с номерами 1,2,…,
и
n.
Ясно , что в виде суммы некоторых из
этих чисел можно
представить любое число от 0 до 2n-1.
Поэтому точно так же , как это было
сделано выше , можно показать , что при
произвольном заполнении остальных
(информационных) позиций и таком
последующем заполнении проверочных
позиций , при котором выполняется
условие
(mod
k), для
k=2n
, получается
множество, содержащее не менее половины
слов кода
и совпадающие с
при
.
