
- •010400.62 Прикладная математика и информатика
- •Предисловие
- •1. Элементы математической логики
- •1.1. Логические связки и их таблицы истинности
- •1.2. Свойства логических операций
- •1.3. Функции алгебры логики и их свойства
- •1.4. Совершенные формы
- •1.5. Многочлены Жегалкина
- •Примеры решения задач
- •Упражнения
- •Вопросы для самоконтроля и повторения
- •2. Множества и отображения
- •2.1. Множества
- •2.2. Операции над множествами.
- •2.3. Свойства операций над множествами
- •2.4. Отображения множеств
- •Примеры решения задач
- •Упражнения
- •Вопросы для самоконтроля и повторения
- •3. Элементы комбинаторного анализа
- •Примеры решения задач
- •Упражнения
- •Вопросы для самоконтроля и повторения
- •4. Элементы теории графов
- •4.1. Основные понятия теории графов
- •4.2. Основные операции над графами
- •4.3. Матрицы графов
- •4.4. Мосты, деревья
- •4.5. Алгоритмы построения минимального остовного дерева
- •4.6 Задача о кратчайшем пути и алгоритм Дейкстры для ее решения
- •4.7. Дерево кратчайших путей
- •4.8. Гамильтоновы циклы и гамильтоновы графы
- •4.9. Эйлеровы циклы и эйлеровы графы
- •Примеры решения задач
- •Алгоритм Дейкстры-Прима
- •Упражнения
- •Вопросы для самоконтроля и повторения
- •5. Теория кодирования
- •5.1. Основные понятия теории кодирования
- •5.2. Проблема взаимной однозначности
- •5.3. Коды Хемминга
- •Примеры решения задач
- •Упражнения
- •Вопросы для самоконтроля и повторения
- •6. Теория автоматов
- •6.1. Основные понятия теории автоматов
- •6.2. Способы задания конечного автомата
- •Примеры решения задач
- •Упражнения
- •Вопросы для самоконтроля и повторения
- •7. Задания для самостоятельной работы
- •Библиографический список
- •Мария Николаевна Рыжкова Андрей Владимирович Макаров
- •010400.62 Прикладная математика и информатика
5.2. Проблема взаимной однозначности
Одним из основных вопросов в кодировании является проблема взаимной однозначности, т.е. возможность по коду b сообщения a однозначно восстановить сообщение a.
Достаточный признак взаимной однозначности алфавитного кодирования:
Если b = b'b", то b' называется началом, или префиксом, слова b, b" — окончанием, или постфиксом, слова b. Если b' ¹ Ù, то b' называется собственным началом. Если b"¹ Ù, то b" называется собственным окончанием слова b. Схема алфавитного кодирования обладает свойством префикса, если ни один элементарный код не является префиксом другого элементарного кода. Если схема S алфавитного кодирования обладает свойством префикса, то алфавитное кодирование взаимно однозначно.
Условие префиксности не является необходимым, т.е. алфавитное кодирование может быть взаимно-однозначным, но не обладать свойством префиксности.
Слово binbin-1.. bi1 будем называть обратным к слову b = b1b2… bin и обозначать b-1. Схему кодирования, полученную из схемы кодирования S заменой каждого элементарного кода bi на bi-1, будем называть обратной к схеме S и обозначать S-1. Тогда: если схема S или схема S-1 обладает свойством префикса, то тогда алфавитное кодирование, определяемое схемой S(S-1), будет взаимно однозначным.
Общий критерий взаимной однозначности.
Нетривиальное разложение: представим слово b в виде:
b = b'b1b2… binb",
где слово b' не может оканчиваться на элементарный код, а b" не может начинаться с элементарного кода. Причем одно из слов b', b", b1b2… bin может быть пробелом - Ù. Для определения однозначности алгоритма кодирования необходимо выполнить действия в соответствии с алгоритмом:
1). Для каждого элементарного кода выписываем все нетривиальные разложения.
2). Выписываем множество M1, состоящее из слов b', являющихся началом нетривиальных разложений.
3). Выписываем множество M2, состоящее из слов b", являющихся окончаниями нетривиальных разложений.
4). Выписываем множество М = М1 Ç М2 È {Ù}, т.е. множество слов, являющихся как началом, так и окончанием нетривиального разложения и пробел.
5). Выписываем все разложения, связанные с множеством M, т.е.
= b'b1b2… binb",
где b', b" Î М, причем n может быть равно 0 (заменяется Ù).
6). По полученным разложениям строится ориентированный граф, следующим образом: вершины графа отождествляются с элементами множества М, пара вершин b' и b" соединяются ребрами только в том случае, если существует разложение b'b1b2… binb", ребру приписывается значение b1b2… bin.
7). По полученному графу легко проверить, обладает ли схема кодирования однозначностью.
Теорема А.А. Маркова: алфавитное кодирование со схемой S не обладает свойством взаимной однозначности тогда и только тогда, когда граф содержит ориентированный цикл, проходящий через вершину Ù.
5.3. Коды Хемминга
Коды Хемминга – наиболее известные и, вероятно, первые из самоконтролирующихся и самокорректирующихся кодов. Построены они применительно к двоичной системе счисления. Будем считать, что в канале связи может произойти не более одной ошибки.
Число дополнительных разрядов для построения кодов Хемминга нужно выбрать так, чтобы их хватило для кодирования перечисленных l +1 случаев. Следовательно, необходимо, чтобы выполнялись условия:
2k >= l + 1, 2m <= 2l / l + 1.
Число l называется длиной кода Хемминга, m – число информационных символов, k – число контрольных символов – наименьшее целое число, удовлетворяющее условию 2k >= k + m + 1.
Алгоритм построения кода Хемминга для кода a1a2…am:
1) Определим длину кода Хемминга:
m – число информационных символов,
2k >= k + m +1 – число контрольных символов,
l = m + k – длина кода Хемминга.
2) Представим каждое число i из множества L = {1, 2, … l} в виде k-разрядного числа t = Vk-1Vk-2..V0 . Результат запишем в виде таблицы:
Таблица 5.1
|
Vk-1 |
… |
V1 |
V0 |
1 |
0 |
… |
0 |
1 |
2 |
0 |
… |
1 |
0 |
3 |
0 |
… |
1 |
1 |
… |
… |
… |
… |
… |
m |
|
|
|
|
3) Разобьем множество L на подмножества следующим образом:
L 0 = {i Î L 0: V0 = 1}
L 1 = {i Î L 1: V1 = 1}
L 2 = {i Î L 2: V2 = 1}
L 3 = {i Î L 3: V3 = 1}
….
L k-1 = {i Î L k-1: V k-1 = 1}
4) Первые элементы (их ровно k) являются степенью числа 2, они определяют номера контрольных разрядов кода Хемминга:
b1 b2 b4 b8…
5) Остальные разряды являются информационными, заполняются исходного сообщения по порядку:
b3 = a1, b5 = a2, b6 = a3, …, bl = am.
6) Контрольные разряды заполняются следующим образом:
b1 = Å bj, bj Î L 0, j ¹ 1,
b2 = Å bj, bj Î L 1, j ¹ 2,
b4 = Å bj, bj Î L 2, j ¹ 4,
b8 = Å bj, bj Î L 3, j ¹ 8.
Обнаружение ошибки в кодах Хемминга
Если при передаче по каналу связи получили сообщение b¢, и известно что при передаче произошла одна ошибка в неизвестном разряде, то можно найти этот разряд, обозначим его t. Для его нахождения представим t в виде двоичного числа: t = V¢k-1V¢k-2.. V¢0.
Найдем эти числа V¢ по формулам:
V¢0 = Å b¢j, b¢ j Î L 0,
V¢1 = Å b¢ j , b¢ j Î L 1,
V¢2 = Å b¢ j, b¢ j Î L 2,
……………………..
V¢k-1 = Å b¢ j, b¢ j Î L 3.
Выберем из таблицы номер разряда, который соответствует этим значениям, именно в этом разряде и произошла ошибка.