- •Оглавление
- •Глава 1. Алгебраические системы 17
- •Глава 2. Элементы комбинаторики 88
- •Глава 3. Основы теории графов 101
- •Глава 4. Основы математической логики 169
- •4.1.1.4. Эквивалентные преобразования формул 179
- •4.1.4. Выполнить подстановку: 247
- •Глава 5. Основы теории алгоритмов 252
- •Глава 6. Конечные автоматы 289
- •Введение
- •Глава 1. Алгебраические системы
- •1.1 Множества
- •1.1.1. Четкие множества
- •1.1.2. Нечеткие множества
- •1.2. Соответствия, отображения и функции
- •1.2.1. Четкие отображения и функции
- •1.2.2. Нечеткие отображения
- •1.3. Отношение
- •1.3.1. Четкие отношения
- •1.3.2. Нечеткое отношение
- •1.4. Элементы общей алгебры
- •1.5. Булева алгебра
- •1.5.1. Булевы операции
- •1.5.2. Законы булевой алгебры
- •1.5.3. Формула булевой функции
- •1.5.4. Описание булевой функции
- •1.5.5. Суперпозиция булевых функций
- •1.5.6. Свойства булевых функций
- •1.5.6.1. Самодвойственные булевы функции
- •1.5.6.2. Монотонные булевы функции
- •1.5.6.3. Линейные булевы функции
- •1.5.6.4. Функции, сохраняющие “0”
- •1.5.6.5. Функции, сохраняющие “1”
- •1.5.6.6. Функционально полные системы
- •1.5.7. Разложение булевых функции
- •1.5.7.1. Днф булевой функции
- •1.5.7.2. Кнф булевой функции
- •Алгоритм преобразования формулы к скнф:
- •1.5.8. Минимизация булевых функций.
- •1.5.8.1.Минимизация днф булевой функции
- •1.5.8.2. Минимизация кнф булевой функции
- •1.6. Алгебра четких множеств
- •1.6.1. Операции над множествами
- •1.6.2. Законы алгебры множеств
- •1.6.3. Эквивалентные преобразования формул
- •1.6.4. Композиция отображений и отношений
- •1.6.5. Поиск неизвестного множества
- •1.7. Алгебра нечетких множеств
- •1.7.1. Операции над нечеткими множествами
- •1.7.2. Композиция нечетких отображений
- •1.7.3. Композиция нечетких отношений
- •1.7.4. Свойства нечетких отношений
- •Вопросы и задачи
- •Глава 2. Элементы комбинаторики
- •2.1. Размещение из n элементов по k
- •2.2. Перестановка элементов
- •2.3 Сочетание из n элементов по k
- •2.4. Разбиение множества
- •2. 5 Правила комбинаторики
- •Вопросы и задачи
- •Глава 3. Основы теории графов
- •3.1. Граф и его характеристики
- •3.2. Описание графа
- •3. 3. Числа графа
- •3.4. Операции над графами
- •3.4.1. Унарные операции
- •3.4.1.1 Поиск дополнительного графа
- •3.4.1.2. Введение и удаление вершин графа
- •3.4.1.3. Стягивание вершин графа
- •3.4.1.4. Введение и удаление ребер графа
- •3.4.1.5. Поиск плотности и неплотности графа
- •3.4.1.6. Поиск числа компонент связности графа
- •3.4.1.7. Поиск устойчивости графа
- •3.4.1.8. Поиск цикломатического числа графа
- •3.4.1.9. Поиск хроматического числа графа
- •3.4.2. Бинарные операции
- •3.4.2.1. Объединение графов
- •3.4.2.2. Пересечение графов
- •3.4.2.3. Композиция графов
- •3.4.2.4. Соединение графов
- •3.4.2.5. Прямое произведение графов
- •3.4.2.6. Изоморфизм графов
- •3.5. Некоторые алгоритмы на графах
- •3.5.1. Построение покрывающего остова
- •3.5.2. Построение остова минимального веса
- •3.5.3. Поиск кратчайших путей в сети.
- •3.5.4. Поиск максимального потока в сети
- •3.5.5. Метод критического пути в управлении
- •3.6. Нечеткие графы
- •Вопросы и задачи
- •Глава 4. Основы математической логики
- •4.1. Логика высказываний
- •4.1.1. Алгебра высказываний
- •4.1.1.1. Логические операции
- •4.1.1.2. Правила записи сложных формул.
- •4.1.1.3. Законы алгебры высказываний
- •4.1.1.4. Эквивалентные преобразования формул
- •4.1.1.5. Нормальные формы формул
- •4.1.2. Исчисление высказываний
- •4.1.2.1. Интерпретация формул
- •4.1.2.2. Аксиомы и правила введения и удаления логических связок
- •4.1.2.3. Метод дедуктивного вывода
- •4.1.2.4. Принцип резолюции
- •4. 2. Логика предикатов
- •4.2.1. Алгебра предикатов
- •4.2.1.1. Законы алгебры предикатов
- •4.2.1.2. Предваренная нормальная форма формулы
- •4.2.1.3 Сколемовская стандартная форма формулы
- •4. 2. 2. Исчисление предикатов
- •4.2.2.1. Правила подстановки
- •4.2.2.2. Правила введения и удаления кванторов
- •4.2.2.3. Правила заключения
- •4.2.2.4. Метод дедуктивного вывода
- •4.2.2.5. Принцип резолюции
- •4.2.2.6. Логическое программирование
- •4.3. Логика реляционная
- •4.3.1 Реляционная алгебра
- •4.3.1.1. Унарные операции
- •4.3.1.2. Бинарные операции
- •4.3.1.3. Правила реляционной алгебры
- •4.3.2. Реляционное исчисление
- •4.3.3. Языки реляционной логики
- •4.4. Нечеткая логика
- •4.4.1. Нечеткое исчисление
- •4.4.2. Экспертные системы
- •Вопросы и задачи
- •Глава 5. Основы теории алгоритмов
- •5.1. Рекурсивные функции
- •5.1.1. Базовые функции
- •5.1.2. Элементарные операции
- •5.2. Машина Тьюринга
- •5.2.1. Описание машины Тьюринга
- •5.2.2. Примеры машин Тьюринга
- •5.2.3. Композиция машин Тьюринга
- •5.3. Нормальные алгоритмы Маркова
- •5.4 Сложность вычислений
- •Вопросы и задачи
- •Глава 6. Конечные автоматы
- •6.1. Абстрактный автомат
- •6.1.1. Типы конечных автоматов
- •6.1.2. Описание автоматов
- •6.1.3. Автоматное моделирование алгоритмов
- •6.1.3.1. Автомат Мили - модель управляющего автомата
- •6.1.3.2. Автомат Мура - модель управляющего автомата
- •6.1.3.3. Микропрограммный автомат
- •6.1.4. Эквивалентность автоматов
- •6.1.5. Эквивалентность внутренних состояний автомата
- •6.1.5.1. Детерминированный автомат
- •6.1.5.2. Недетерминированный автомат
- •6.2. Структурный автомат
- •6.2.1. Произведение автоматов
- •6.2.1.1. Последовательное соединение автоматов
- •6.2.1.2. Параллельное соединение автоматов
- •Обратная связь автоматов
- •6.2.3. Сумма автоматов
- •6.2.4. Структурный автомат и кодирование
- •6.3. Логическое проектирование автоматов
- •6.3.1. Кодирование алфавитов автомата
- •6.3.2. Автоматы без “памяти”.
- •6.3.2.1. Формирование оператора
- •6.3.2.2. Формирование системы операторов
- •Логическая схема комбинационного автомата
- •6.3.3. Автоматы с “памятью”
- •6.3.3.1. Формирование оператора
- •6.3.3.2. Формирование оператора
- •.3.3.3. Логическая схема автомата с “памятью”
- •Вопросы и задачи
- •Литература
- •Предметный указатель
5.2.2. Примеры машин Тьюринга
Рассмотрим машины Тьюринга, реализующие и обеспечивающие формирование рекурсивных функций.
T1:= базовая функция Сn=0 на правой полуленте:
T1: qо|x + 1# qk|#.
Протокол T1. 1) qо|q1# П; 2) q1|q1# П; 3) q1#q2# Л; 4) q2 #qk|C. |
Текущее |
Символы vt |
|
состояние |
1 |
# |
|
qо |
q1 # П |
— |
|
q1 |
q1 # П |
q2 #Л |
|
q2 |
— |
qk |C |
Пусть x = 3. Тогда для C1(3)=0 на информационной ленте машины Тьюринга будут проведены следующие преобразования:
x= 3 x= 0
# |||| # ## ||| # ### || # #### | # ##### #### | #
qn q1 q1 q1 q2 qk
T2:= базовая функция Сn=1 на правой полуленте:
T2: qо|x + 1#qk||#;
Протокол T2. 1) qо|q1# П; 2) q1|q1# П; 3) q1#q2# |Л; 4) q2 #qk|C. |
Текущее |
Символы vt |
|
состояние |
1 |
# |
|
qо |
q1 #П |
— |
|
q1 |
q1 #П |
Q2 |Л |
|
q2 |
— |
q1 |C |
T3:= базовая функция (x) = х+1 на правой полуленте:
T3: qo | x+1# qk |(õ+1)+1#.
Протокол T2.. 1) qo| q1|П; 4) q2| q2|Л; 2) q1| q1|П; 5) q2# q3 # П; 3) q1 # q2|Л; 6) q3| qk|C;
|
Текущее |
Символы vt |
|
состояние |
| |
# |
|
qí |
q1 | П |
- |
|
q1 |
q1 | П |
q2 | Л |
|
q2 |
q2 | Л |
q3 # П |
|
q3 |
qk | C |
- |
Пусть х=3. Тогда для (3)=3+1=4 на информационной ленте машины Тьюринга будут проведены следующие преобразования:
x=3
# ||||# # ||||# # ||||# # ||||# # |||||# # |||||# # |||||# # ||||| #
q0 q1 q1 q1 q1 q2 q2 q2
x=4
# ||||| # # ||||| # # ||||| # # ||||| # # ||||| #
q2 q2 q2 q3 qk
T4:= базовая функция Im,n на правой полуленте:
T4: qo|1x1+1 # |2x2+1 #...#|mxm+1# ...#|nxn+1#qk|xm+1#,
где |i - слово на i-м месте информационной ленты,
|xi+1 – число “палочек”.
Чтобы найти на информационной ленте i-е слово, следует установить счетчик |m, указывающий место слова |mxm+1 в последовательности слов.
T4’: qo|m #|1x1+1#|2x2+1#...#|mxm+1#|nxn+1 qk|mxm+1.
Текущее |
Символы vt |
|
Это позволит при каждом проходе вправо, отмечая один символ в слове |m, удалять очередное слово |m-1, предшествующее |mxi+1. Для организации вычисления такой функции необходимо увеличить число символов алфавита внешней памяти, что позволит уменьшить число состояний управляющего устройства и упорядочить весь процесс вычисления. Пусть Vт = {|, #, (}. Считывающая головка находится под первым символом слова счетчика |m.
|
||
состояние |
| |
# |
) |
|
|
qo |
q1 #П |
- |
- |
|
|
q1 |
q1 |П |
q2 )П |
- |
|
|
q2 |
q2 #П |
q3 )Л |
- |
|
|
q3 |
- |
q3 #Л |
q4 )Л |
|
|
q4 |
q4 |Л |
q5 # П |
- |
|
|
q5 |
q6 #П |
- |
q8 #П |
|
|
q6 |
q6 |П |
- |
q7 )П |
|
|
q7 |
- |
q7 #П |
q2 #П |
|
|
q8 |
- |
q8 #П |
q9 #П |
|
|
q9 |
q9 |П |
q10 #П |
- |
|
|
q10 |
q10 #П |
q11 #П |
- |
|
|
q11 |
q10 #П |
q12 #Л |
- |
|
|
q12 |
q13 |Л |
q12 #Л |
- |
|
|
q13 |
q13 |Л |
q14 #П |
- |
|
|
q14 |
qk |C |
- |
- |
|
На рис. 5. 6 приведен граф, реализующий базовую функцию Im,n.
При подаче команды “старт” стирается первый символ слова |m и начинается перемещение головки вправо.
После прочтения всех символов слова |m по команде q1#q2) П ставится скобка, закрывающая оставшиеся символы слова |m, и головка перемещается на слово |x1+1.
По команде q2| q2#П стираются все символы слова |1x1+1 и ставится закрывающая скобка q2#q3)Л. Начинается перемещение считывающей головки влево за очередным символом слова |m-2.
Так организован цикл. Затем управляющее устройство стирает второе слово, третье и т. д. пока есть символы “|” в счетчике.
После стирания всех символов в счетчике по команде q5)q8#П головка стирает закрывающую скобку, пробегает все пробелы “#”, по команде q8)q9#П фиксирует место слова |mxm+1, пробегает все символы слова |mxm+1 и продолжает удалять все слова справа от слова |mxm+1по командам q10|q10#П и q11|q10#П. Если при чтении ленты в соседних ячейках будут символы “#”, то конец и головка возвращается на первый символ слова |mxm+1 по командам: q11#q12#Л, q12#q12#Л, q12|q13|Л, q13|q13|Л, q13#q14#П и q14|qk|C.
T5:= функция предшествования -1(x) = х-1 на правой полуленте:
T5: qí | x+1 # qk | (õ +1) - 1 #.
Протокол T5: 1) qо|q1|П; 5) q3|q3|Л; 2) q1|q1|П; 6) q3#q4#П; 3) q1 #q2#Л; 7) q4|qk|C. 4) q2|q3#Л;
|
Текущее |
Символы vt |
|
состояние |
| |
# |
|
qо |
q1 | П |
- |
|
q1 |
q1 | П |
q2 # Л |
|
q2 |
q3 # Л |
- |
|
q3 |
q3 | Л |
q4 # П |
|
q4 |
qk | C |
- |
T6 копирование m раз слово |x+1 на правой полуленте:
T6: qо|x+1# qk|1x +1#|2x+1 # ..#|mx+1#.
Для того, чтобы выполнить m копий, необходимо занести на информационную ленту счетчик., т.е. изменить начальную конфигурацию машины, определяющий число копий |m:
T6: qо|m #|x+1# qk|1x +1 # |2x+1 # ..#|mx+1#.
При каждом проходе вправо в слове |m удаляется один символ, затем выполняется обычное копирование слова |x +1, маркируя каждый переносимый символ командой q2|q3(П и закрывая слово |x+1 командой q3#q4(П. После переноса всех символов слова |x +1 головка возвращается на самый левый символ слова |m и стирает его.
Пусть Vт.={|, #, (, )}.
-
Текущее
Символы vt
состояние
|
#
(
)
qо
q1 #П
-
-
q8 #П
q1
q1 |П
q2 )П
-
q2 )П
q2
q3 (П
-
q2 )П
q2 )П
q3
q3 |П
q4 )П
-
q4 )П
q4
q4 |П
q5 |Л
-
-
q5
q5 |Л
-
q6 (П
q5 )Л
q6
q3 (П
-
-
q7 )Л
q7
q7 |Л
q7 #П
q7 (Л
q7 )Л
q8
q9 |Л
-
q8 (П
q8 )П
q9
qk |C
q9 #П
q9 |Л
q9 #Л
Процесс продолжается до тех пор, пока не будут удалены все символы в слове 1m. После этого следует удалить все вспомогательные символы "("и")" и поставить головку машины в начало первого слова |x+1 . Множество команд представлены таблицей, а работа машины показана графом на рис. 5.6.
T7:= перестановка слов на правой полуленте:
T7: qо|x+1# |y+1# qk|y +1# |x+1#.
Протокол T7: 1)qо| q1(П; 12)q4)q4)Л; 2)q1| q1|П; 13)q5|q1(П; 3)q1# q2)П; 14)q5)q6)П; 4)q1) q2)П; 15)q6|q6|П; 5)q2| q2|П; 16)q6)q7# Л; 6)q2# q3)П; 17)q7|q7|Л; 7)q2) q3)П; 18)q7(q7#Л; 8)q3| q3|П; 19)q7)q7#Л; 9)q4 # q4|Л; 20)q7#q8#П; 10)q4| q4|Л; 21)q8# q8 #П; 11)q4( q5(П; 22)q8|qk|C. |
Текущее состояние |
Символы vt |
|||
| |
# |
( |
) |
||
qо |
q1 (П |
- |
- |
- |
|
q1 |
q1 |П |
q2 )П |
- |
q2 )П |
|
q2 |
q2 |П |
q3 )П |
- |
q3 )П |
|
q3 |
q3 |П |
q4 |Л |
- |
- |
|
q4 |
q4 |Л |
- |
q5 (П |
q4 )Л |
|
q5 |
q1 (П |
- |
- |
q6 )П |
|
q6 |
q6 |П |
- |
- |
q7 #Л |
|
q7 |
q7 |Л |
q7 #П |
q7 #Л |
q7 #Л |
|
q8 |
qk |C |
q8 #П |
- |
- |
T8:= сравнение длины двух слов на правой полуленте:
-
T 8(1): qo1x+1 #|y+1qk1|(x - y)
при x > y;
T8(2): qo1x+1 #|y+1qk3|
при x = y;
T8(3): qo |x+1 #|y+1 qk2| (y - x)
при x < y.
В таблице приведен набор команд, реализующих поставленную задачу, а ниже - граф, иллюстрирующий работу алгоритма.
таблица |
|
Продолжение таблицы |
||||||
Тек-е сост-е |
Символы vt |
|
Тек-е сост-е |
Символы vt |
||||
| |
# |
) |
|
| |
# |
) |
||
qо |
q1 #П |
|
- |
|
q4 |
q4 |Л |
q5 #П |
q4 )Л |
q1 |
q1 |П |
q2 )П |
q2 )П |
|
q5 |
q1 #П |
- |
q8 #П |
q2 |
q2 |П |
q3 #Л |
- |
|
q6 |
q6 |Л |
q7 #П |
- |
q3 |
q4 #Л |
- |
q6 #Л |
|
q7 |
qk1 |C |
- |
- |
|
|
|
|
|
q8 |
qk2 |C |
qk3 |C |
- |
T9:= устранение пробелов между словами на правой полуленте:
Т9:qo|x1+1##...#|x2+1# qk|x1+1# |x2+1#.
Для реализации алгоритма необходим алфавит Vt = {|, #, )}.
После просмотра символов первого слова ставится “)” для ограничения переноса символов второго слова.
текущее состояние |
Символы алфавита Vt |
Последний символ второго слова также замещается “)” для ограничения движения вправо. После переноса всех символов второго слова устраняются “)”, и считывающая головка возвращается на первый символ первого слова.
|
||
| |
# |
) |
||
qo |
q1 |П |
- |
- |
|
q1 |
q1 |П |
q2 )П |
- |
|
q2 |
q3 |П |
q2 #П |
q7 #Л |
|
q3 |
q3 |П |
q4 #Л |
q4 #Л |
|
q4 |
q5 )Л |
- |
- |
|
q5 |
q5 |Л |
q5 #Л |
q6 )П |
|
q6 |
q6 |П |
q2 |П |
- |
|
q7 |
q7 |Л |
q7 #Л |
q8 #Л |
|
q8 |
q8 |Л |
q9#П |
- |
|
q9 |
qk|С |
- |
- |
T10:= поиск последнего слова на правой полуленте:
T10: qo|x1+1#|x2+1#... # |xm+1 |x1+1#|x2+1#... # qk|xm+1.
Поиск крайнего правого слова на информационной полуленте завершается после нахождения не менее двух рядом стоящих #. Затем считывающая головка возвращается на первый символ последнего слова.
На рис. 5.12 представлен граф алгоритма.
-
Текущее состояние
Символы Vt
|
#
qo
q1|П
-
q1
q1|П
q2#П
q2
q1|П
q3#Л
q3
q4|Л
q3#Л
q4
q4|Л
q5#П
q5
qk|C
-
T11:= вычисление усеченного вычитания.
qk1|x-y#, если xy;
Т11: qo|x+1# |y+1#
qk2|, если xy.
Для вычисления на машине Тьюринга усеченного вычитания можно использовать машины Т8 и Т1, изменив команды машины Т8: q8|qk2|C и q8#qk3|C на команды машины Т1:q8|q8#П, q8#Пq8#П (состояния q1 и q2 машины Т1 есть, соответственно, q8 и q9 машины T11 ).
-
Текущее
Символы vt
состояние
|
#
)
qо
q1 #П
-
q1
q1 |П
q2 )П
q2 )П
q2
q2 |П
q3 #Л
-
q3
q4 #Л
-
q6 #Л
q4
q4 |Л
q5 #П
q4 )Л
q5
q1 #П
-
q8 #П
q6
q6 |Л
q7 #П
-
q7
qk1 |C
-
-
q8
q9#П
q9#П
-
q9
-
qk2|C
-
Т12:= вычисление предиката:
qk||, если Р(x, y):= “истина”,
Т12: qo|x+1# |y+1#...
qk|, если Р(x, y):= “ложь”.
Для этого можно использовать машины Тьюринга Т8 , Т1 и Т2.