
- •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 Прикладная математика и информатика
Примеры решения задач
1) Выяснить, является ли код однозначно декодируемым?
С(S) = {b1, b1b2, b3b1}
Решение
Код S не является префиксным, кроме того и код S-1 = {b1, b2b1, b1b3} не является префиксным. Однако по коду можно однозначно восстановить исходное слово. Алгоритм следующий:
a). В кодовом слове находим все буквы b2 и выделяем пары b1b2,
b). В кодовом слове находим все буквы b3 и выделяем пары b3b1,
c). Заменяют найденные пары символами исходного алфавита, и определяются оставшиеся буквы b1.
2) Алфавитное кодирование задано схемой S в виде таблицы
Таблица 5.2
a1 |
a2 |
a3 |
a4 |
a5 |
b1b2 |
b1b3b2 |
b2 b3 |
b1b2 b1b3 |
b2 b1b2 b2 b3 |
C помощью общего критерия взаимной однозначности определить, является ли схема однозначной.
Решение
a) Для каждого элементарного кода выписываем все нетривиальные разложения:
b1 = (b1)(b2)
b2 = (b1)(b3b2) = (b1b3)(b2)
b3 = (b2)(b3)
b4 = (b1)(b2 b1b3) = (b1b2)(b1b3) = (b1b2 b1)( b3)
b5 = (b2)(b1b2 b2 b3) = (b2 b1)(b2 b2 b3) = (b2 b1b2)(b2 b3) = (b2 b1b2 b2)(b3)
b) Выписываем множество M1, состоящее из слов b', являющихся началом нетривиальных разложений.
М1 = {b1, b1b3, b2, b1b2, b1b2 b1, b2 b1, b2 b1b2, b2 b1b2 b2}
c) Выписываем множество M1, состоящее из слов b", являющихся окончаниями нетривиальных разложений
M2 = {b2, b3b2, b3, b2 b1b3, b1b3, b1b2 b2 b3, b2 b2 b3, b2 b3}
d) Выписываем множество М = М1 Ç М2 È {Ù}, т.е. множество слов, являющихся как началом, так и окончанием нетривиального разложения и пробел.
M = {b2, b1b3, Ù}
e) Выписываем все разложения, связанные с множеством M, т.е.
b = b'b1b2… binb", где b', b" Î М, причем n может быть равно 0 (заменяется Ù).
b2 = (b1b3)Ù(b2)
b4 (b1b2)(b1b3) = Ù b1 b1b3
b5 = (b2)(b1b2)(b2 b3) =(b2) b1b3Ù
f) По полученным разложениям строится ориентированный граф, следующим образом: вершины графа отождествляются с элементами множества М, пара вершин b' и b" соединяются ребрами только в том случае, если существует разложение b'b1b2… binb", ребру приписывается значение b1b2… bin.
Рис. 5.1
g) По полученному графу легко проверить, обладает ли схема кодирования однозначностью. Т.к. в графе есть цикл, проходящий через Ù. то взаимно-однозначного кодирования нет.
h) Найдем слово. декодируемое неоднозначно: начнем выписывать последовательно слова. присвоенные ребрам и вершинам. начиная с пробела и заканчивая пробелом:
b1b2 b1b3 b2 b1b2 b2b3
b1 = (b1b2)(b1b3b2)(b1b2)(b2b3) ® a1 = a1a2a1a3
b2 = (b1b2b1b3)(b2b1b2b2b3) ® a2 = a4a5
3) Пусть задано сообщение a = 1011011 = a1a2a3a4a5a6a7. Для этого сообщения необходимо построить код Хемминга.
Решение
a). Определим длину кода Хемминга:
m = 7, 2k >= k + 10, k = 4, l = 11.
b). Представим каждое число i из множества L = {1, 2, … l} в виде k-разрядного числа t = Vk-1Vk-2..V0 . Результат запишем в виде таблицы 5.3.
с). Разобьем множество L на подмножества следующим образом:
L0 = {1, 3, 5, 7, 9, 11}
L1 = {2, 3, 6, 7, 10, 11}
L2 = {4, 5, 6, 7}
L3 = {8, 9, 10, 11}
Таблица 5.3
|
V 3 |
V 2 |
V 1 |
V 0 |
1 |
0 |
0 |
0 |
1 |
2 |
0 |
0 |
1 |
0 |
3 |
0 |
0 |
1 |
1 |
4 |
0 |
1 |
0 |
0 |
5 |
0 |
1 |
0 |
1 |
6 |
0 |
1 |
1 |
0 |
7 |
0 |
1 |
1 |
1 |
8 |
1 |
0 |
0 |
0 |
9 |
1 |
0 |
0 |
1 |
10 |
1 |
0 |
1 |
0 |
11 |
1 |
0 |
1 |
1 |
d). Первые элементы (их ровно k) являются степенью числа 2, они определяют номера контрольных разрядов кода Хемминга:
b1 b2 b4 b8
e). Остальные разряды являются информационными, заполняются исходного сообщения по порядку:
b3 = 1, b5 = 0, b6 = 1, b7 = 1, b9 = 0, b10 = 1, b11 = 1.
f). Контрольные разряды заполняются следующим образом:
b1 = b3 Å b5 Å b7 Å b9 Å b11 = 1 Å 0 Å 1 Å 0 Å 1 = 1,
b2 = b3 Å b6 Å b7 Å b10 Å b11 = 1 Å 1 Å 1 Å 1 Å 1 = 1,
b4 = b5 Å b6 Å b7 = 0 Å 1 Å 1 = 0,
b8 = b9 Å b10 Å b11 = 0 Å 1 Å 1 = 0.
Окончательное решение для слова a = 1011011: b = 11100110011.
4) Пусть вместо кода b = 11100110011, на приемник пришло слово b¢ = 10100110011. Найти, в каком разряде произошла ошибка, и исправить ее.
Решение
Найдем числа V¢:
V¢0 = b1 Å b3 Å b5 Å b7 Å b9 Å b11 Å b13 = 1 Å 1 Å 0 Å 1 Å 0 Å 1 = 0,
V¢1 = b2 Å b3 Å b6 Å b7 Å b10 Å b11 = 0 Å 1 Å 1 Å 1 Å 1 Å 1 = 1,
V¢2 = b4 Å b5 Å b6 Å b7 = 0 Å 0 Å 1 Å 1 = 0,
V¢3 = b8 Å b9 Å b10 Å b11 =0 Å 0 Å 1 Å 1 = 0.
t = 0100, следовательно ошибка произошла в разряде 2, исправим символ в этом разряде на противоположный.
Исходный код b = 11100110011.