1 Теория множеств и отношений

advertisement
СОДЕРЖАНИЕ
ВСТУПЛЕНИЕ ................................................................................ 3
1 ЭЛЕМЕНТЫ ТЕОРИИ МНОЖЕСТВ И ОТНОШЕНИЙ .... 4
1.1 УСЛОВНЫЕ ОБОЗНАЧЕНИЯ, ПРИНЯТЫЕ В ТЕКСТЕ ............................ 4
1.2 МНОЖЕСТВА. СПОСОБЫ ЗАДАНИЯ МНОЖЕСТВ ................................ 4
1.3 ОПЕРАЦИИ НАД МНОЖЕСТВАМИ...................................................... 6
1.4 ДЕЙСТВИЯ С ЦЕПОЧКАМИ ................................................................. 9
1.5 ЧИСЛО ЭЛЕМЕНТОВ МНОЖЕСТВА ................................................... 10
1.6 ОТНОШЕНИЯ .................................................................................... 11
1.7 СВОЙСТВА БИНАРНЫХ ОТНОШЕНИЙ .............................................. 12
1.8 ОПЕРАЦИИ С БИНАРНЫМИ ОТНОШЕНИЯМИ ................................... 13
1.9 УПРАЖНЕНИЯ И ЗАДАЧИ К ГЛАВЕ 1 ................................................ 16
2 ЭЛЕМЕНТЫ АЛГЕБРЫ ЛОГИКИ ....................................... 18
2.1 ПРОСТЫЕ ВЫСКАЗЫВАНИЯ; ЛОГИЧЕСКИЕ СВЯЗКИ ........................ 18
2.2 СОСТАВНЫЕ ВЫСКАЗЫВАНИЯ. ТАБЛИЦЫ ИСТИННОСТИ ............... 19
2.3 ЛОГИЧЕСКИЕ ЗАКОНЫ ..................................................................... 20
2.4 ПОСТРОЕНИЕ ЗАДАННЫХ СОСТАВНЫХ ВЫСКАЗЫВАНИЙ .............. 21
2.5 ОТНОШЕНИЯ МЕЖДУ ВЫСКАЗЫВАНИЯМИ ..................................... 22
2.6 АРГУМЕНТЫ ..................................................................................... 23
2.7 ЗАДАЧИ НА ПОСТРОЕНИЕ ТАБЛИЦ ИСТИННОСТИ ........................... 24
3 ЭЛЕМЕНТЫ ТЕОРИИ ГРАФОВ ........................................... 24
3.1 ОБЩИЕ ПОНЯТИЯ И ОПРЕДЕЛЕНИЯ ................................................. 24
3.2 СПОСОБЫ ЗАДАНИЯ ГРАФОВ ........................................................... 25
3.3 ЭЛЕМЕНТЫ ГРАФОВ ......................................................................... 26
3.4 ОПЕРАЦИИ С ЧАСТЯМИ ГРАФА ........................................................ 27
3.5 ДИАМЕТР, РАДИУС И ЦЕНТР ГРАФА ................................................ 28
3.6 ДИАМЕТР ПРОТЯЖЕННОСТИ, РАДИУС ПРОТЯЖЕННОСТИ И ЦЕНТР
ПРОТЯЖЕННОСТИ ГРАФА ................................................................. 30
3.7 ЗАДАЧИ К ГЛАВЕ 3 ........................................................................... 32
4 ТЕОРИЯ КОНЕЧНЫХ АВТОМАТОВ .................................. 33
4.1 КОНЕЧНЫЕ АВТОМАТЫ – РАСПОЗНАВАТЕЛИ ................................ 33
4.2 ЭКВИВАЛЕНТНЫЕ СОСТОЯНИЯ КА ................................................. 35
4.3 НЕДОСТИЖИМЫЕ СОСТОЯНИЯ КА .................................................. 36
4.4 НЕДЕТЕРМИНИРОВАННЫЙ КОНЕЧНЫЙ АВТОМАТ .......................... 37
4.5 ЗАДАЧИ К ГЛАВЕ 4 ........................................................................... 40
5 АВТОМАТЫ С МАГАЗИННОЙ ПАМЯТЬЮ .................... 43
5.1 АВТОМАТЫ-РАСПОЗНАВАТЕЛИ С МАГАЗИННОЙ ПАМЯТЬЮ .......... 43
5.2 АВТОМАТЫ-ТРАНСЛЯТОРЫ С МАГАЗИННОЙ ПАМЯТЬЮ ................. 47
5.3 ЗАДАЧИ К ГЛАВЕ 5 ........................................................................... 50
6 ГРАММАТИКИ ......................................................................... 52
6.1 ОБЩИЕ СВЕДЕНИЯ ........................................................................... 52
6.2 КЛАССИФИКАЦИЯ ГРАММАТИК ...................................................... 55
6.3 ЭКВИВАЛЕНТНЫЕ ПРЕОБРАЗОВАНИЯ ГРАММАТИК ........................ 56
6.3 1 Удаление или добавление бесполезных................................ 56
(непродуктивных и недостижимых) нетерминалов ...................... 56
6.3.2 Добавление нетерминала ........................................................ 58
6.3.3 Подстановка правил ............................................................... 59
6.3.4 Изменение направления рекурсии ......................................... 59
6.4 ЗАДАЧИ К ГЛАВЕ 6 ........................................................................... 60
7 РАСПОЗНАВАТЕЛИ ДЛЯ ГРАММАТИК .......................... 61
7.1 ПОСТРОЕНИЕ КА–РАСПОЗНАВАТЕЛЕЙ ДЛЯ
АВТОМАТНЫХГРАММАТИК .............................................................. 61
7.2 ПОСТРОЕНИЕ КА–РАСПОЗНАВАТЕЛЕЙ ДЛЯ ПРАВОЛИНЕЙНЫХ
ГРАММАТИК ..................................................................................... 65
7.3 ПОСТРОЕНИЕ МП–РАСПОЗНАВАТЕЛЕЙ ДЛЯ S – ГРАММАТИК....... 66
7.4 ПОСТРОЕНИЕ МП–РАСПОЗНАВАТЕЛЕЙ ДЛЯ Q – ГРАММАТИК ...... 70
7.5 ЗАДАЧИ К ГЛАВЕ 7 ........................................................................... 75
СПИСОК
Л И Т Е Р А Т У Р Ы ............................................. 77
2
Вступление
Любой природный процесс, которым человек пытается
управлять(воздействовать на него с предсказуемыми последствиями),
должен быть сначала представлен в виде модели той или иной степени
сложности. Специалистам в области компьютерных технологий приходится брать такие модели или их фрагменты для последующего
объединения из конкретных предметных областей, общих знаний и
представлений об окружающем мире и создавать свою модель для
решения поставленной задачи. После этого, учитывая особенности
работы вычислительного устройства(компьютера) и выбранного языка
программирования – разрабатывать алгоритм реализации модели,
программировать(кодировать) этот алгоритм. Кроме реализации основной функции, необходимо подумать о вспомогательных функциях(контроль входных данных, проверка адекватности результата,
представление результата, контекстная подсказка, справочная система
и т.п.) и их корректном взаимодействии между собой.
Все перечисленные процессы (как, по глубокому убеждению
автора, и большинство природных процессов в восприятии человека)
имеют дискретную природу (дискретный (лат. diskretus) – разделенный, прерывистый).
Представление и процесс обработки информации в компьютере, независимо от его технических параметров, носят дискретный характер (алфавит машинного языка двухсимвольный, множество состояний процессора конечное), поэтому любая модель, реализованная в
виде машинного кода, дискретна.
Курс лекций ставит своей целью познакомить студента с максимально широким кругом понятий дискретной математики, приобрести навыки в создании и программировании дискретных объектов при
решении практических задач, причем для успешного освоения курса
достаточно школьных знаний по математике. Дискретная математика
– фундаментальная наука и нужна специалисту в области информационных технологий как метод мышления , как средство формулирования и организации понятий.
В конце курса приведен список литературы, в которой можно
найти более подробное изложение этих и других разделов дискретной
математики.
3
1 Элементы теории множеств и отношений
1.1 Условные обозначения, принятые в тексте
N – множество всех натуральных чисел (N = {1,2,3,...});
Nо – множество всех натуральных чисел и ноль
(Nо={0,1,2,3,...});
R – множество действительных чисел;
 – знак принадлежности ( а  А – элемент а принадлежит
множеству А; а  В – элемент а  множеству В);
 – знак пересечения ( А  В – пересечение множеств А и В);
 – знак объединения ( А  В – объединение множеств А и
В);
\ - знак разности (А \ В – из множества А вычесть множество
В);
 – знак включения ( В  А – множество В включено в множество А);
хn или An – элемент х или множество А в степени n (n  No);
W – обозначение универсального множества – такого множества, по отношению к которому все рассматриваемые в примере или задаче множества являются подмножествами
(A,B,C,D...  W).
1.2 Множества. Способы задания множеств
Язык множеств – универсальный язык математики. Любое математическое утверждение можно сформулировать как утверждение о
некотором соотношении между множествами: о равенстве двух множеств, о не пустоте некоторого множества, о не принадлежности элементам множества. Понятие "множество" – одно из базовых понятий в
математике и не может быть определено через другие понятия. Интуитивно множество можно определить как совокупность предметов, понятий, явлений, множеств,..., объединенных одним или несколькими
свойствами. В множестве не может быть одинаковых элементов. Порядок следования элементов в множестве не важен.
4
Множества, подмножества будем обозначать большими буквами латинского алфавита (A, B, C, D...), а элементы множеств – малыми (a, b, c, d...).
Множество B называется подмножеством A, если любой элемент B является элементом A. Этот факт можно записать следующим
образом:
В  А.
Множества могут быть конечными (состоять из конечного
числа элементов) и бесконечными. Примеры бесконечных множеств –
множество натуральных чисел N (N={1,2,3,4...}), множество натуральных чисел с включением нуля No (No={0,1,2,3...}). Примеры конечных
множеств будут приведены ниже.
Число элементов в конечном множестве М называется мощностью множества и обозначается | М | или n (M). Множество мощностью 0 т.е. множество, не содержащее элементов, называется пустым
и обозначается так: М = { } или М = 0. Принято считать, что пустое
множество является подмножеством любого множества, в том числе и
пустого.
1 Списком элементов: A = {a, b, c, d}; S = {Иванов, Петров,
Сидоров}.
2 Порождающей процедурой:
M = {(x, y)| x2 + y2 = 1} (задана окружность радиуса R=1);
K = {(a,b)|, a  А и b  B} (задано произведение двух множеств);
D = A  B = { x |, x А или x В } (задано объединение двух
множеств).
3 Описанием характеристических свойств, которыми должны
обладать элементы множества:



Все студенты ДГМА.
Футбольная команда “Шахтер”.
Жители города Краматорска.
5
1.3 Операции над множествами
1 Объединение множеств
Объединением множеств называется множество, состоящее из
всех элементов, принадлежащих хотя бы одному из объединяемых
множеств:
A  B = { а | а  A или а  B}.
Операция "объединение" n-арная (т.е. применима к n
множествам), коммутативная (при перестановке объединяемых множеств результат выполнения операции не изменится).
: A = {a, ab, ac, c}; B = {ac, ba, b, c}; C = {b, f};
D = A  B  C = C  B  A = {a, ab, ac, c, ba, b, f}.
2 Пересечение множеств
Пересечением множеств называется множество, состоящее из
всех элементов, принадлежащих одновременно каждому из объединяемых множеств:
A  B = { a | a A и a  B }.
Операция "пересечение" n-арная (т.е. применима к n множествам), коммутативная (при перестановке пересекаемых множеств результат выполнения операции не изменится).
A = {a, b, c, f}; B = {b, c, n}; C = {d, f, n};
D = A  B = {b,c}; B  C = { n };
Е = A  B  C = B  C  A = { }.
3 Разность множеств
Разностью двух множеств называется множество, состоящее
из всех элементов, принадлежащих первому множеству и не принадлежащих второму множеству:
A \ B = { а | а  A и а  В }.
Операция "разность" бинарная (т.е. применима к двум множествам), некоммутативная (при перестановке вычитаемых множеств
результат изменяется):
6
A \ B  B \ A.
Пример: A = {a, c, d, e, f}; B = {a, d, m};
D = A \ B = {c, e, f}; C = B \ A = { m }.
4 Дополнение множеств
Дополнением множества А (до универсального множества
W ) называется множество, состоящее из всех элементов множества
W, которые не входят в множество А:
__
А = { a | a  W и  A }.
Операция "дополнение" унарная (т.е. применима к одному
множеству или части формулы, которую можно трактовать как одно
множество). Операцию "разность" в формулах можно заменить:
__
A \ B = A  B.
W = {a, c, d, e, f, k}; B = {c, e, f}; A = {a, c};
__
__
В  B = W; В  B = { } (пусто);
__
D = A \ B = A  B = { c }.
Используя множества, операции 1 – 4 и скобки, которые меняют порядок выполнения операций, можно составлять формулы.
Наибольший приоритет при выполнении имеет операция "дополнение", затем "разность" и затем две операции одного приоритета –
"объединение" и" пересечение"; операции одного приоритета выполняются в формуле по порядку слева направо; если в формуле есть
скобки, то сначала выполняются операции в скобках в соответствии с
их приоритетом; если знак дополнения стоит над частью формулы, то
считают, что та часть взята в скобки (хотя скобки на самом деле могут
отсутствовать). В задачах контрольных работ в формулах используются только три подмножества: А, В, С или P, Q, R универсального
множества W.
Очень удобным является наглядное представление таких формул с помощью диаграмм Венна. Диаграмма в общем виде – это
прямоугольник, представляющий универсальное множество W с тре-
7
мя пересекающимися окружностями внутри; область, заключенная в
каждой окружности, представляет соответственно множества А, В, С.
В результате таких построений площадь прямоугольника разбивается
(в самом общем случае) на восемь связных областей, каждая из которых или произвольная их комбинация может быть описана бесконечным множеством формул. Одним из способов упрощения формул при
выполнении упражнений и задач контрольных работ является последовательное построение диаграмм Венна, соответствующих выполнению каждой операции в формуле, с целью определения того набора
областей, которым соответствует формула, а затем их описания более
простой формулой, если это возможно.
5 Прямое произведение множеств
Прямым или декартовым произведением множеств называется
множество, элементами которого являются векторы, составленные
из элементов перемножаемых множеств: первые компоненты векторов – элементы первого множества, вторые – второго и т.д. Для двух
множеств процедура имеет вид:
A  В = {(а,b) | a  A и b  B}.
A = {a,b,c,.....,h}; B = {1, 2, 3,....., 8};
D = A  B = {(a,1); (a,2); (a,3);... (h,8)}.
Допускается запись D = A  B = {a1; a2; a3;... h8}.
Вектор – упорядоченный набор элементов. Элементы, образующие вектор называются координатами или компонентами вектора.
Число координат называется длиной или размерностью вектора. В отличие от элементов множества координаты вектора могут быть одинаковыми.
:
B = (0,3,5,3) – вектор размерности 4;
С = (0,3,3,5) – вектор размерности 4.
Векторы В и С различны, т.к. порядок следования координат
разный.
8
Операция 5 многоместна (перемножить можно несколько
множеств) и некоммутативная. В качестве сомножителей может выступать одно и то же множество, т.е. множество можно возводить в
n–ю степень.
В качестве примера рассмотрим случай, когда элементами
множества являются символы, например: V = {a, b, c}. Такое множество будем называть алфавитом. При возведении этого множества в
квадрат получим новое множество, состоящее из двухсимвольных цепочек или слов (элементы – векторы записываются без скобок и
разделяющих запятых) V2 = V  V = {aa, ab, ac, ba,..., cc}. При
возведении алфавита в куб (последнее множество умножаем на V)
получаем трехсимвольные слова–цепочки и т.д. Алфавит в нулевой
степени представляет собой множество, состоящее из одного элемента
– пустой цепочки (обозначение  – эпсилон): V0 = {  }.
Длина цепочки равна количеству элементов, образующих эту
цепочку. Пустую цепочку  можно вставить в любое место других цепочек, не изменяя их:
 а = 1;  aba  = 3;
 aba  = 3;    = 0.
1.4 Действия с цепочками
Для цепочек допустимы следующие действия:

конкатенация (сцепление) цепочек:
x = aba , y = cab; xy = abacab;

возведение цепочек в степень:
x = ab; x1 = ab; x2 = abab ; x3 = ( ab)3 = ababab;
любая цепочка в нулевой степени равна : x0 = 
Нельзя отождествлять пустое множество C = { } и множество,
содержащее один элемент - пустую цепочку В = {  }.
9
Все множество цепочек, которые могут быть созданы в заданном алфавите, можно представить таким понятием как, итерация алфавита.
Итерация – множество, полученное в результате объединения
всех степеней алфавита, включая и нулевую:
V* =  Vi.
(i  N0)
Усеченная итерация (обозначается V+) не включает нулевую
степень алфавита т.е. пустую цепочку:
V+ =  Vi .
(i N)
Итерацию и усеченную итерацию связывает следующая формула:
V+=V  V* = V*  V .
1.5 Число элементов множества
Для любого конечного множества М число элементов (мощность множества) будем обозначать n (M).
Пусть задано несколько множеств (подмножеств одного универсального множества W): А,В,С,... с числом элементов в каждом
соответственно: n (A), n (B), n (C),.... Решим задачу о количестве элементов в множестве, записанном в виде формулы, т.е. состоящем из
нескольких множеств, связанных операциями пересечения, объединения и дополнения.
Дано: A, B, n (A), n (B).
Определить: число элементов в объединении n (A  B).
Для непересекающихся множеств число элементов объединения равно сумме элементов в каждом из объединяемых множеств:
n (A  B) = n (A) + n (B).
Общий случай (два множества имеют общие элементы):
n (A  B) = n (A) + n (B) – n (A  B) .
10
Общий случай (три множества имеют общую область):
n (A  B  C) = n (A) + n (B) + n (C) – n (A  B) –
n (A  C) – n (C  B) + n (A  B  C).
1.6 Отношения
Подмножество R Mn называется n-местным (n-арным) отношением на несущем множестве M. Множество M является несущим для отношений любой арности, которые на нем построены. Говорят, что элементы вектора (a1,a2,a3,…an) находятся в отношении R ,
если этот вектор принадлежит множеству R. Для n = 1 отношение
называют унарным (по сути, такое отношение выделяет из множества M подмножество R по признаку); для n=2 – бинарным (т.е. отношением между двумя элементами множества M) и т.д. Отношение
– то же множество, элементами которого являются векторы размерности n или, при другой записи, цепочки длины n, составленные в алфавите M и отобранные в соответствии с отношением R.
Пример: Построить бинарное отношение R, которое определяется словами как "в латинском алфавите встречается раньше" на
несущем множестве M={a,b,c,d}.
Решение
Примерами элементов отношения R могут быть векторы (a,c),
(c,d)... или цепочки ac, cd, bd..., такие, в которых на первом месте стоит буква, встречающаяся в латинском алфавите раньше по сравнению
с буквой, стоящей на втором месте.
Отношение R является подмножеством множества M2:
M2 = {aa, ab, ac,...,dd}, из которого элементы отбираются в соответствии со следующей процедурой R = {xy | x "меньше" y}.
R = {ab, ac, ad, bc, bd, cd}.
Отношения любой арности можно задать одним из способов
задания множеств (перечисление элементов, порождающая процедура,
11
характеристические признаки). Кроме этого, бинарные отношения
можно задавать:
 с помощью матрицы смежности – квадратной матрицы, столбцы и строки которой обозначены элементами несущего множества, а
элементы имеют следующие значения:
1, если...ai ..R..a j

Cij  
;
 0,..в.противном...случае
 с помощью ориентированного графа – элементы несущего
множества M изображаются на плоскости в виде вершин графа (точки
с обозначением рядом элементов несущего множества), а затем вершины, пары которых входят в множество R, соединяются с помощью
стрелок(дуг) (начинается стрелка в первом элементе пары, заканчивается – во втором); число таких стрелок равно числу элементов в множестве R.
Для каждого бинарного отношения R можно построить обратное отношение R-1 (читается: R в степени минус один), поменяв местами в каждом элементе R проекции векторов.
Отношение Q обратно отношению R тогда и только тогда, когда для каждой пары из R выполняется условие:
x R y следует y Q x
1.7 Свойства бинарных отношений
1 Рефлексивность
Отношение R рефлексивно (обладает свойством рефлексивности), если для любого элемента х  М установлено отношение х R х
(на главной диагонали матрицы смежности – единицы); отношение R
антирефлексивно, если ни для одного элемента х не установлено такого отношения (на главной диагонали матрицы смежности – нули); в
других случаях (на главной диагонали есть и нули и единицы) говорят
"отношение R не рефлексивно".
12
Таким образом, при установлении этого свойства отношения
возможны следующие варианты: рефлексивно, не рефлексивно, антирефлексивно.
2 Симметричность
Отношение R называется симметричным, если для любого
элемента этого отношения вида (х, y) в множестве R есть соответствующая пара – (y, x). Другими словами, если отношение R симметрично, то для каждой пары элементов несущего множества это отношение или установлено в обе стороны или не установлено вообще;
отношение R называется антисимметричным, если приведенное выше
условие выполняется только для случаев, когда x = y; отношение R
называют несимметричным в остальных случаях. Таким образом, при
установлении этого свойства отношения возможны следующие варианты: симметрично, несимметрично, антисимметрично.
Матрица смежности симметричного отношения симметрична
относительно главной диагонали. Для симметричного отношения всегда выполняется равенствоR = R-1 (симметричное отношение и обратное ему отношение совпадают).
3 Транзитивность
Отношение R называется транзитивным, если среди множества его элементов для пары элементов вида (x, y), (y, z) всегда можно найти элемент (x, z). Другими словами, если на графе отношения
из вершины x в вершину z, двигаясь по стрелкам, можно прийти через
промежуточную вершину y, то для отношения, обладающего свойством транзитивности обязательно должен быть и прямой путь.
Если для рассматриваемого отношения имеется нарушение
приведенного выше условия хотя бы в одном случае, то такое отношение не транзитивно.
Таким образом, при установлении этого свойства отношения
возможны следующие варианты: транзитивно, не транзитивно.
1.8 Операции с бинарными отношениями
13
Поскольку бинарные отношения – это множества, для них
определены рассмотренные выше операции над множествами (объединение, пересечение, разность, дополнение). Необходимо заметить:
 для бинарного отношения R универсальным множеством W
всегда будет квадрат несущего множества М, т.е операция "дополнение R " всегда определена;
 при выполнении других операций результат будет корректным
в том случае, если отношения построены на общем несущем множестве.
Операция прямое произведение при ее формальном применении к двум отношениям в результате даст отношение арности 4. Естественно потребовать, чтобы при выполнении этой операции арность
результата не изменялась. Это достигается применением свойства
транзитивности при выполнении операции перемножения отношений.
Пример: Пусть на несущем множестве M={a,b,c,d} заданы
два бинарных отношения: R = {ab,ac,ad} и Q = {ac,ad,cd}. Произведением этих отношений будет также бинарное отношение S, элементы
которого являются подмножеством элементов, полученных в результате формального перемножения множеств R и Q (из всего множества
четырехсимвольных цепочек необходимо отобрать только те, у которых средние элементы одинаковы (при записи средние элементы
опускаются):
S = R  Q = {accd, dccd} = {ad, dd}.
Примечание. Для более эффективного выполнения операции
аналитического перемножения отношений нет необходимости перечислять все четырехсимвольные цепочки; нужно выбирать только те
комбинации, у которых второй символ элемента первого отношения
совпадает с первым символом элемента второго отношения.
Операцию прямое произведение отношений для двух отношений можно выполнить графически (на графах перемножаемых отношений) по следующему алгоритму:
 если на графе первого отношения есть дуга, соединяющая пару
вершин (x,y), а на графе второго – дуга, соединяющая вершины (y,z),
то на графе результирующего отношения изобразить дугу, соединяющую вершины (x,z);
14
 продолжать до исчерпания всех возможных вариантов.
Конечный результат перемножения не зависит от способа выполнения операции (аналитический или графический).
Через прямое произведение отношений можно определить
степени одного отношения:
Q  Q = Q 2; Q  Q  Q = Q 3 и т.д.
Транзитивным замыканием отношения (обозначается Q+)
называют объединение всех целых степеней отношения Q. Такое
определение транзитивного замыкания отношения не дает эффективного алгоритма его построения для заданного отношения (по определению – это бесконечный процесс).
Аналитически это можно записать как объединение степеней
множества: Q+ = Q  Q2  Q3  Q 4 .. Qn... или
Q+ =  Qi.
(i  N)
Для практического построения транзитивного замыкания заданного отношения используют следующий алгоритм:
 на графе заданного отношения добавить дуги с использованием свойства транзитивности;
 процесс добавления дуг закончить, если на построенном таким
образом графе нельзя уже добавить ни одной дуги (добавленные на
предыдущем шаге дуги также участвуют в построении).
Транзитивно–рефлексивное замыкание отношения Q (обозначается Q* ) – это объединение нулевой степени отношения и транзитивного замыкания отношения : Q* = Q0 .Q+ или
Q* =  Qi.
(i  N0)
Нулевая степень любого отношения, построенного на несущем
множестве М = {a,b,c,d}, имеет вид: {aa, bb, cc, dd}.
Граф транзитивно – рефлексивного замыкания отношения легко получить из графа транзитивного замыкания отношения добавлением в каждой вершине дуги – петли, которая связывает вершину саму с собой.
15
1.9 Упражнения и задачи к главе 1
1 Даны два множества: A = {a, ab, ac} и B = {b, bc, ab}.
Найти объединение этих множеств A  B.
2 Дано универсальное множество – множество натуральных
чисел W= {1,2,3,...,10} и его подмножества A и B. Найти объединение
A  B, если элементы множества A – четные числа, а элементы множества B – нечетные.
3 Даны множества A = {a, b, c}, B = {b, c, d}, C = {d, e, f}.
Определить: (A  B) и (A  B  C).
4 Множество В содержит два элемента, а множество А содержит три элемента, такие которые не входят в В, но один элемент
множества А входит в множество С. Определить:
(В  А), (А  В  С), (А  С). Выбор элементов произвольный.
5 Даны два множества A = {a, c, b, d, e} и B = {a, b, k}. Определить разность: (A \ B) и (B \ A).
6 Даны универсальное множество – множество натуральных
чисел W = {1,2,3,...,10} и его подмножество A = {1, 2, 3}. Определить
разность (A \ W) и (W \ A).
7 Заданы универсальное множество – множество натуральных чисел W = {1,2,3,...,14}, где n = 14 и его подмножества A = {2, 4,
6, 8} и B = {1, 3, 5, 7}. Найти дополнения A и B.
8 Заданы универсальное множество – множество натуральных чисел W = {1, 2, 3,..., 12} и его подмножество A = {2, 4, 6, 8}.
Найти объединение дополнения A и множества A.
9 Заданы множества B = {a, b, c,..., k}, A = {a} и C = {b,
m, z, x, k}. Определить: (B \ A), (A \ B), (B \ A  C).
10 Заданы универсальное множество W = {1,2,3,...,20} и его
подмножества: A = {i}, B = {3·i} и C = {4·i}, где i =1,2,3... Найти мно-
16
жество (A  B) \ C.
11 Даны два множества A = {a, ab, ac} и B = {b, bc, ab}.
Найти объединение этих множеств A  B и определить количество
элементов полученного множества.
12 Даны множество A = {abc, d} и множество B = {ad, a}.
Определить: A  B (прямое произведение этих множеств).
13 Даны множества C = {d, e, f} и A = {d, f, m}. Определить
множества: Z = C  B и D = Z  A.
14 Дано множество Y = {a, cb}. Возвести это множество во
вторую и в третью степень.
15 Упростить выражения:
а) Ф = А  В \ С  В (с помощью диаграмм Венна);
__
б) Ф = (А  В) \ (С  В) (с помощью диаграмм Венна);
в) Ф = А  В \ С  В (с помощью диаграмм Венна);
_____________
г) Ф = (А \ В)  (В \ А) (с помощью диаграмм Венна).
16 Даны бинарные отношения P = {ab, ac, bc} и Q = {cb, ac,
bc}. Найти (обратное отношение) и пересечение P-1  Q.
17 Даны бинарные отношения P = {ab, ac, bc, bd, da} и
Q ={cb, ac, bc, dc}. Определить свойства этих отношений и получить
P  Q.
18 Для заданного бинарного отношения P = {ab, ac, сc, bd,
da} построить P 2,P 3 и P +.
17
2 Элементы алгебры логики
2.1 Простые высказывания; логические связки
Простые высказывания будем обозначать p, q, r ... Основное
свойство простого высказывания: высказывание может быть или ложно(False, 0, "Hет") или истинно(True,1, "Да"). В дальнейшем примем
обозначения "0" и "1". Для построения составных высказываний будем использовать пять логических связок:
1 Конъюнкция ( логическое " И " )
– p /\ q.
2 Дизъюнкция ( логическое " ИЛИ " )
– p \/ q.
3 Отрицание ( логическое " Hе " )
– ~ p.
4 Эквивалентность ( тогда и только тогда) – p  q
– p  q.
5 Импликация ( если ... то )
p – " жарко ";
q – " идет дождь ";
r – " очень сыро ".
Жарко И идет дождь
– p/\q.
Если идет дождь ,то очень сыро – p  q.
Таблицы истинности для логических связок
Конъюнкция
Дизъюнкция
Отрицание
p
q
p/\q
p
q
p\/q
p
1
1
0
0
1
0
1
0
1
0
0
0
1
1
0
0
1
0
1
0
1
1
1
0
1
1
18
0
0
~p
0
0
1
1
Эквивалентность
Импликация
p
q
pq
p
q
pq
1
1
0
0
1
0
1
0
1
0
0
1
1
1
0
0
1
0
1
0
1
0
1
1
2.2 Составные высказывания. Таблицы истинности
Используя простые высказывания, логические связки(операции) и скобки, которые меняют порядок выполнения действий, можно строить составные высказывания. Наибольший приоритет при выполнении имеет логическая связка "отрицание", затем
"конъюнкция" и "дизъюнкция", после этого две остальные логические
связки; логические связки одного приоритета выполняются в составном высказывании по порядку слева направо; если в высказывании
есть скобки, то сначала выполняются операции в скобках в соответствии с их приоритетом; если знак отрицания стоит над частью высказывания, то считают, что эта часть взята в скобки (хотя скобки на самом деле отсутствуют).
В задачах контрольных работ в составных высказываниях
используются только три простых высказывания: p,q,r. В принципе,
их можно трактовать, как аргументы, которые могут принимать
только два значения: "0" и "1", а составное высказывание – как
функцию, которая в зависимости от конкретных значений аргументов принимает значения "0" или "1". Значения этой функции задаются табличным способом (таблицей истинности составного высказывания).
При построении таблиц истинности для составных высказываний в случае трех аргументов достаточно заполнить восемь строк,
так как они исчерпывают все возможные комбинации значений аргументов.
19
Пример: Построить таблицу истинности для A=(~p\/q) /\~r.
Таблица истинности А и ее пошаговое построение
p
q
r
~p
~p\/q
~r
A
1
1
1
1
0
0
0
0
1
1
0
0
1
1
0
0
Шаг
1
0
1
0
1
0
1
0
0
0
0
0
1
1
1
1
1
1
1
0
0
1
1
1
1
2
0
1
0
1
0
1
0
1
3
0
1
0
0
0
1
0
1
4
Для однозначности в дальнейшем комбинации значений аргументов будем принимать такими, как в предыдущей таблице: 1-я
строка –111, 2-я строка – 110 ... 8-я строка – 000.
2.3 Логические законы
Пример: Построить таблицу истинности для B = ~(pq)/\q.
Таблица истинности
p
q
pq
~(p  q)
B
1
1
0
0
1
0
1
0
1
0
1
1
1
0
1
0
0
2
0
0
0
0
3
Шаг
Если при построении таблицы истинности составного высказывания результат во всех строках оказался однозначным, то такое
составное высказывание называют логическим законом.
20
Примеры логических законов:
1 Логические законы для дизъюнкции:
(p \/ q) = (q \/ p);
(p \/ 0) = p;
(p \/ p) = p;
(p \/ 1) = 1.
2 Логические законы для конъюнкции:
(p /\ q) = (q /\ p);
(p /\ 0) = 0;
(p /\ p) = p;
(p /\ 1) = p.
3 Закон двойного отрицания:
~ (~p) = p.
4 Законы де-Моргана
~(p \/ q) = (~p /\ ~q);
~(p /\ q) = (~p \/ ~q).
5 Закон контрапозиции
(p  q) = (~q  ~p).
2.4 Построение заданных составных высказываний
В ряде практических случаев возникает необходимость построения составных высказываний с заданной таблицей истинности.
Один из методов построения дает следующая теорема.
Теорема. Всякая логическая функция, кроме const "0", может
быть представлена в виде дизъюнкции основных конъюнкций. Такое
представление называется "совершенной дизъюнктивной нормальной
формой" представляемой функции (СДHФ); const "0" можно представить как p /\ ~p.
Таблица основных конъюнкций для трех аргументов
p
q
r
Осн. конъюнкции
Строка ист.
1
1
1
1
1
0
1
0
1
p /\ q /\r
p /\ q /\~r
p /\ ~q /\r
1
2
3
21
Продолжение таблицы
p
q
r
Осн. конъюнкции
Строка ист.
1
0
0
0
0
0
1
1
0
0
0
1
0
1
0
p /\ ~q /\~r
~p /\ q /\r
~p /\ q /\~r
~p /\ ~q /\r
~p /\ ~q /\~r
4
5
6
7
8
Основная конъюнкция истинна только в той строке, в которой
она находится. Для того, чтобы получить функцию с заданной таблицей истинности, достаточно выбрать в таблице основные конъюнкции
из строк, в которых значения функции равны 1, и связать их знаками
дизъюнкции.
Пример: Построить составное высказывание, которое истинно
в строках 2 и 6 (т.е. с таблицей истинности 01000100).
A = (p /\ q /\ ~r) \/ (~p /\ q /\~r) – выбираем из таблицы основные конъюнкции из строк 2 и 6 и связываем их дизъюнкцией.
Полученное высказывание можно упростить, используя теоретико–множественное преобразование высказывания (будет рассмотрено ниже).
2.5 Отношения между высказываниями
Как было сказано выше, высказывание (простое или составное) полностью характеризуется таблицей истинности (число строк в
этой таблице определяется по формуле 2n, где n – количество простых
высказываний в составном высказывании). Значение в каждой строке
– "0" или "1". Если возникает необходимость сравнить между собой
два составных высказывания, то, естественно, сравниваются между
собой таблицы истинности. Результатом этого сравнения будет установление вида бинарного отношения, которое связывает эти высказывания.
Так как в таблицах истинности только 0 и 1, то при построковом сравнении двух таких таблиц возможны следующие варианты:
22
Номер варианта
Вариант
1
2
3
4
1–1
1–0
0–1
0–0
Отсутствие всех вариантов просто невозможно. Отсутствие
трех любых вариантов возможно, если сравниваются логические законы (частный случай). Из всех шести комбинаций отсутствия двух вариантов рассмотрим два: отсутствие вариантов 1 и 4; отсутствие вариантов 2 и 3. Общее название этих отношений – "2-отношения"; в первом случае название "противоположность", во втором – "эквивалентность". Оставшиеся четыре комбинации будем называть "2отношения".
При отсутствии одного варианта (четыре случая) – общее
название "простые отношения":
отсутствие варианта 1 – "Т-несовместимость";
отсутствие варианта 2 – "из А следует В";
отсутствие варианта 3 – "из В следует А";
отсутствие варианта 4 – "F-несовместимость",
где А – первое сравниваемое высказывание, В – второе.
Если при сравнении двух высказываний присутствуют все четыре варианта, то такие высказывания независимы (отношение – "независимы").
2.6 Аргументы
Под аргументом будем понимать утверждение того, что некоторое высказывание (заключение) следует из других высказываний
(посылок).
Одной из задач логики является проверка правильности аргументов.
Аргумент называется правильным, если конъюнкция посылок
связана с заключением отношением "следует".
А /\ В /\ С "следует" D,
где А,В,С – посылки (составные высказывания);
D – заключение (составное высказывание).
23
Практически проверка правильности аргумента выполняется
следующим образом: построить таблицы истинности для каждой посылки и заключения; для правильного аргумента каждой строке истинности посылок (строка, в которой каждая посылка имеет значение
"1") должна соответствовать истинность заключения.
Примечание. Если набор посылок таков, что нет ни одной
строки, в которой все посылки истинны, то аргумент с любым заключением будет неправильным.
2.7 Задачи на построение таблиц истинности
Построить таблицы истинности для следующих составных высказываний:
1
(p /\ q \/ ~r)
6
~(p /\ q /\ r)
2
~(p \/ q /\ r)
7
r /\ p \/ ~r
3
4
(~p \/ r) /\ ~q)
~(p /\ ~q ) \/ r)
8
9
~p /\ ~q \/ ~r)
(p /\ r) \/ (q \/~p)
5
p /\ ~(q \/ r)
10
(q /\ ~(r /\ ~p)
3 Элементы теории графов
3.1 Общие понятия и определения
Граф G как математический объект – это совокупность двух
множеств: непустого множества вершин V и множества ребер E, элементы которого представляет собой неупорядоченные (для ориентированного графа – упорядоченные) пары элементов из множества V.
G (V,E) = V; E, n(V) > 0, E  V  V,
где для неориентированного графа E = E–1 (бинарное отношение E
симметрично).
24
Минимальный граф состоит из одной вершины.
Каждому неориентированному графу можно поставить в соответствие ориентированный граф, в котором каждое ребро заменено
двумя противоположно ориентированными ребрами, инцидентными
тем же вершинам.
Пусть v1 и v2 – вершины, e1 = (v1 , v2 ) – соединяющее их ребро.
Тогда вершина v1 и ребро e1 инцидентны, вершина v2 и ребро e1 также
инцидентны. Два ребра, инцидентные одной вершине, называются
смежными; две вершины, инцидентные одному ребру, также называются смежными.
Обычно граф изображают на плоскости в виде диаграммы:
вершины – точками, ребра – линиями, соединяющими инцидентные
вершины.
3.2 Способы задания графов
Множество вершин и множество рёбер для конечных графов
задаются, как правило, перечислением. Возможно задание графа описанием отношения инцидентности.
1 Отношение инцидентности задано матрицей смежности:
– столбцы и строки матрицы – вершины графа;
– для смежных вершин элемент матрицы равен1, для остальных – 0;
– для неориентированного графа эта матрица всегда симметрична;
– число рёбер равно числу единиц выше или ниже главной
диагонали матрицы ( включая элементы на диагонали).
2 Отношение инцидентности задано матрицей инцидентности:
– столбцы матрицы соответствуют вершинам графа, а строки
– рёбрам;
– если ребро ei инцидентно вершине vj, то элемент матрицы
ij=1, в противном случае – ij = 0.
Таким образом, в каждой строке одна или две единицы,
остальные нули (для петли две единицы).
Для ориентированного графа при заполнении матрицы:
25
ij = –1,если vj – начало ребра;
ij =1,если vj –конец ребра;
ij =  (где  – любое число, кроме –1,1,0),если ребро – петля
в вершине vj;
в остальных случаях ij = 0.
3 Граф задан списком ребер.
ei
vi, vj
a, b
b, d
1
2
…
Примечание. Здесь ei –ребро, vi, vj – пара вершин, соединяемых этим ребром.
3.3 Элементы графов
Граф без кратных ребер называют полным, если каждая пара
вершин соединена ребром.
Граф H называют частью графа G, если множество вершин
графа H принадлежит множеству вершин графа G и множество рёбер
графа H принадлежит множеству рёбер графа G, т.е.:
V(H)  V(G);
E(H)  E(G).
Часть графа H называется суграфом, если она содержит все
вершины графа G.
Суграф H для неориентированного графа G называется покрывающим суграфом, если любая вершина последнего инцидентна
хотя бы одному ребру из H.
Подграф G(U) графа G на множестве вершин U ( U  V ) – это
часть графа, которой принадлежат все ребра с обоими концами из U.
26
Звёздный граф для вершины v (v  G) состоит из всех рёбер с
началом и концом в вершине v. Множество вершин звёздного графа
состоит из вершины v и других смежных с ней вершин.
3.4 Операции с частями графа
1 Дополнение
Если задан граф G и его часть H , то дополнение части H
содержит ту часть ребер графа G (и инцидентных им вершин), которая
не принадлежат H.
2 Объединение
H1  H2 = H;
V(H) = V(H1)  V(H2), E(H) = E(H1)  E(H2),
где V(H), V(H1), V(H2), – множества вершин соответствующих
графов;
E(H), E(H1), E(H2), – множества рёбер этих же графов.
__
H  H = G (объединение части графа и его дополнения).
3 Пересечение
H1  H2 = H;
V(H) = V(H1)  V(H2), E(H) = E(H1)  E(H2) (если H1 и H2
не имеют общих вершин, то эта операция не определена).
Маршрутом в единичном связном графе G называется такая
конечная последовательность ребер (e1,e2….en), в которой каждые два
соседних ребра имеют общую инцидентную вершину.
Вершина vо, инцидентная ребру e1 и не инцидентная ребру e2,
называется началом маршрута в графе G.
Вершина vn, инцидентная ребру en и не инцидентная ребру
en-1, называется концом маршрута.
Число ребер маршрута называется его длиной.
Если вершины vо и vn совпадают, то маршрут называется
циклическим (или просто циклом).
Отрезок конечного или бесконечного маршрута сам является
маршрутом.
27
Маршрут в графе G называется цепью, если все ребра в последовательности различны, и простой цепью, если все вершины, через которые проходит маршрут (а значит и ребра) различны.
Другими словами, в цепи ребро может встретиться не более
одного раза, а в простой цепи вершина – не более одного раза.
Говорят, что две вершины в графе связаны, если существует
соединяющая их цепь. Граф, в котором все вершины связаны, называется связным.
Расстоянием между двумя вершинами графа называется минимальная длина простой цепи, связывающей эти вершины (обозначение d(v,v)).
Протяженностью между двумя вершинами графа называется
максимальная длина простой цепи, связывающей эти вершины (обозначение g(v,v)).
В частном случае расстояние и протяженность между вершинами могут быть одинаковыми.
3.5 Диаметр, радиус и центр графа
Рассмотрим единичный связный неориентированный граф G.
Минимальная длина простой цепи с началом в v, и концом в
vназывается расстоянием между этими вершинами.
Диаметр графа – максимальное из расстояний между любыми
парами вершин графа:
D(G) = max d(v,v).
v',v"  G
Если принять за точку отсчёта расстояний одну из вершин
графа G (например vi ),то максимальное из расстояний от vi до любой
из вершин графа G называется удалением от этой вершины:
r(vi) = max d(vj).
vj  G
Вершина vi называется центром графа, если удаление от неё
принимает минимальное значение(таких вершин в графе может быть
несколько). Удаление от центра называется радиусом графа:
28
r(G) = min r(vi).
vi  G
Любая простая цепь связывающая центр с максимально удаленной от него вершиной называется радиальной цепью.
Рассмотрим на примере определение этих параметров графа
(анализ графа на минимум).
Задан единичный неориентированный граф G:
V = {a, b, c, d, e, f}; E = {ab, ac, bc, cd, ce, de, ef}. Определить диаметр, центр (центры) и радиус этого графа.
Решение
Для определения этих параметров изобразим граф и составим
матрицу расстояний: (на пересечении столбца и строки (вершины
графа) матрицы указывается расстояние между этими вершинами; такая матрица (выделена на рисунке) симметрична относительно главной диагонали).
Вершины
a
b
c
d
e
f
r(vi)
Центр
a
0
1
1
2
2
3
3
Нет
b
1
0
1
2
2
3
3
Нет
c
1
1
0
1
1
2
2
Да
d
2
2
1
0
1
2
2
Да
e
2
2
1
1
0
1
2
Да
f
3
3
2
2
1
0
3
Нет
В столбце с заголовком r(vi) укажем удаления от соответствующих вершин (максимальное значение расстояния каждой строки). Максимальное из удалений и будет диаметром графа (т.е. макси-
29
мально возможным расстоянием между вершинами в исследуемом
графе): D(G)= 3.
Вершины, для которых удаление r(vi) принимает минимальное значение (помечены в последнем столбце «Да» ), являются центрами графа G, а значение удаления – радиусом графа: r(G) = 2.
Если ребра графа нагружены (каждому ребру поставлено в соответствие определенное числовое значение), то процедура исследования аналогична описанной выше, но при заполнении матрицы нужно определять расстояние между вершинами не по числу ребер, а по
суммарной их длине.
3.6 Диаметр протяженности, радиус протяженности и
центр протяженности графа
Рассмотрим единичный связный неориентированный граф G.
Максимальная длина простой цепи с началом в v, и концом в
v называется протяженностью между этими вершинами (обозначается g(v,v)).
Диаметр протяженности графа – максимальная из протяженностей между любыми парами вершин:
L(G) = max g(v,v).
v',v"  G
Для каждой вершины vi существуют самые длинные простые
цепи, связывающие ее с другими вершинами графа; их длина называется числом протяжённости для вершины vi
l(vi) = max g(vj).
vj  G
Центр(центры) протяжённости – вершина с минимальным
числом протяженности. Самые длинные простые цепи с началом в
центре протяжeнности называются радиальными, а их длина – радиусом протяжённости графа.
30
l(G) = min l(vi).
vi  G
Параметры протяженности(центр, диаметр и радиус) при анализе графа на максимум определяются аналогично параметрам при
анализе графа на минимум.
Пример. Для анализа на максимум возьмем граф G из предыдущего примера: V={a, b, c, d, e, f}; E={ab, ac, bc, cd, ce, de, ef}.
Определить диаметр протяженности, центр(центры)протяженности и
радиус протяженности этого графа.
Для определения этих параметров изобразим граф G и составим матрицу протяженностей: (на пересечении столбца и строки(вершины графа) матрицы указывается протяженность между этими
вершинами; такая матрица(выделена на рисунке) симметрична относительно главной диагонали).
Вершины
a
b
c
d
e
f
l(vi)
Центр
a
0
2
2
4
4
5
5
Нет
b
2
0
2
4
4
5
5
Нет
c
2
2
0
2
2
3
3
Да
d
4
4
2
0
2
3
4
Нет
e
4
4
2
2
0
3
4
Нет
f
5
5
3
3
3
0
5
Нет
В столбце с заголовком l(vi) приводятся числа протяженностей
для вершин, указанных в начале каждой строки (максимальное из значений протяженностей каждой строки). Максимальное из чисел про-
31
тяженностей и будет диаметром протяженности графа (т.е. максимально возможной протяженностью между вершинами в исследуемом
графе): L(G) = 5.
Вершина с, для которой число протяженности принимает минимальное значение, является центром протяженности графа G, а значение числа протяженности вершины с – радиусом протяженности
графа: l(G) = 3.
Если ребра графа нагружены (каждому ребру поставлено в соответствие определенное числовое значение), то процедура исследования графа на максимум аналогична описанной выше, но при заполнении матрицы нужно определять протяженность между вершинами
не по числу ребер, а по суммарной их длине.
3.7 Задачи к главе 3
1 Задан граф G: V ={A, B, C, D, E, F}; E ={AB, AD, BC, DЕ,
CE, EF}.
Привести графическое изображение этого графа, привести
примеры суграфа, покрывающего суграфа, подграфа G(U) для вершин
U={C,D,E}(с пояснениями) и звездного графа для вершины D. Определить диаметр, центр и радиус графа G.
2 Задан граф G: V ={A, B, C, D, E, F}; E ={AB, CB, BE, BD,
EF, FD}.
Привести графическое изображение этого графа, привести
примеры для него суграфа, покрывающего суграфа, подграфа G(U)
для вершин U={А,D,E}(с пояснениями) и звездного графа для вершины В. Определить параметры протяженности (диаметр, центр и радиус) этого графа.
3 Задан граф G: V ={A, B, C, D, E, F}; E ={AB, CB, BE, BD,
EF, DЕ}.
Привести графическое изображение этого графа, привести
примеры для него суграфа, покрывающего суграфа, подграфа G(U)
для вершин U={А,B,E}(с пояснениями) и звездного графа для верши-
32
ны F. Определить параметры протяженности (диаметр, центр и радиус) этого графа.
4 Задан граф G: V ={A, B, C, D, E, F}; E ={AB, AF, BE, BD,
BC, FC, EF}.
Привести графическое изображение этого графа, привести
примеры суграфа, покрывающего суграфа, подграфа G(U) для вершин
U={F,D,E}(с пояснениями) и звездного графа для вершины A. Определить диаметр, центр и радиус графа G.
4 Теория конечных автоматов
4.1 Конечные автоматы – распознаватели
Конечный автомат (в дальнейшем КА) – абстрактное вычислительное устройство с фиксированным и конечным объемом памяти,
которое на входе читает цепочки (последовательности символов некоторого алфавита), а на выходе сообщает об их принадлежности к некоторому множеству, для распознания которого он построен.
Принцип работы конечных автоматов различных уровней широко применяется в вычислительных устройствах как на аппаратном,
так и на программном уровнях: это компиляторы, трансляторы программ, различные кодировщики, антивирусные программы и т.п. В
принципе работу любой программы можно представить как работу
цепочки конечных автоматов различной сложности. Рассмотрим построение простейших КА – распознавателей. В процессе построения
такого конечного автомата должны быть определены следующие параметры:
а) входной алфавит V конечного автомата (конечное множество входных символов, которые будет распознавать КА);
б) конечное множество состояний S;
в) начальное состояние КА – s0 (состояние, с которого начинает работу КА при обработке новой цепочки);
г) множество допускающих состояний – Sдоп (подмножество
состояний, с элементами которого сравнивается достигнутое КА состояние после прихода символа "конец цепочки");
33
д) таблица переходов (управляющая таблица), которая паре
"текущее состояние – входной символ" ставит в соответствие новое
состояние КА из множества состояний S).
Примечания:
1 В множество входных символов обязательно включают особый символ "конец цепочки", который сообщает КА о том, что нужно
достигнутое состояние si сравнить с элементами множества Sдоп и,
если si  Sдоп , пропустить цепочку; в противном случае цепочка
отвергается. В тексте этот символ будет иметь вид –|.
2 Часто при распознании цепочек возникает ситуация, когда
невозможно текущей паре "состояние – входной символ" поставить в
соответствие новое состояние. По сути это означает, что цепочка не
принадлежит распознаваемому множеству, хотя она и не просмотрена
до символа "конец цепочки". Такие ситуации в таблице переходов помечаются символом "Е" ("error"); попав в такое состояние, КА отвергает проверяемую цепочку и переходит в начальное состояние. В конкретных программных реализациях может вызываться обработчик
ошибок, выдаваться сообщение о характере ошибки и т.п.
КА всегда начинает работать из начального состояния s0. Символы распознаваемой цепочки поступают посимвольно, начиная с
первого, и изменяют состояния КА в соответствии с таблицей переходов. После поступления символа "конец цепочки" достигнутое автоматом состояние фиксируется и сравнивается с множеством допускающих состояний. На основании этого сравнения цепочка допускается
или отвергается. По сути КА работает как фильтр, который пропускает "правильные" цепочки. Другая трактовка КА – компактный алгоритм распознания регулярных, в том числе и бесконечных множеств,
который строит программист перед началом кодирования (реализацией алгоритма на конкретном языке программирования).
Построение КА для распознания заданного множества цепочек
– процесс творческий и неоднозначный. Теоретически для распознания одного и того же множества цепочек можно построить бесконечное множество КА. Описанный выше принцип распознания применим
далеко не ко всякому регулярному множеству. Он эффективен в следующих случаях:
– распознаваемые цепочки содержат определенные сочетания
символов в начале, конце или (и) середине цепочки;
34
– распознаваемые цепочки содержат ограниченное число повторений определенных символов или их сочетаний (не больше n;
точно n; не меньше n, причем n = 1,2,3);
– распознаваемые цепочки содержат запрет на определенные
сочетания символов в начале, конце или (и) во всей цепочке;
– распознаваемые цепочки содержат комбинации названных
выше ограничений.
4.2 Эквивалентные состояния КА
Состояния s и t двух различных конечных автоматов эквивалентны тогда и только тогда, когда первый КА, начав работу из состояния s, будет допускать те же цепочки, что и второй КА, начав работу
из состояния t. Если эти состояния начальные, то эти автоматы эквивалентны (т.е. будут распознавать одни и те же множества).
Два состояния конечного автомата эквивалентны тогда и только тогда, когда, начав работу из этих состояний, конечный автомат
будет допускать одни и те же цепочки.
Другими словами, если для двух состояний КА нет различающей цепочки, то такие состояния эквивалентны (различающая – такая
цепочка символов, которая приводит КА из сравниваемых состояний
к различным конечным результатам).
Эквивалентные состояния, принадлежащие одному КА, не
нарушая эквивалентности, можно заменить одним (в таблице переходов оставить одну из строк эквивалентных состояний, удалив остальные, при этом заменить имена удаленных состояний на оставленное).
Приведенное выше определение эквивалентных состояний не
дает эффективного алгоритма поиска таких состояний.
Поиск эквивалентных состояний производится в процессе
многократного разбиения множества состояний КА в зависимости от
характера воздействия входных символов. Эта операция производится
пошагово.
Шаг 1: множество состояний КА разбить на две подгруппы по
воздействию символа "конец цепочки" (допускающие и отвергающие)
и записать их в виде двух подмножеств; в каждом из полученных
35
подмножеств все состояния по воздействию символа "конец цепочки"
эквивалентны.
Шаг 2: повторить запись подмножеств, полученных на момент
выполнения этого шага, в виде новой строки и стрелками показать
переходы для каждого состояния из предыдущей в новую строку по
воздействию другого входного символа.
Шаг 3: выполнить разбиение подмножеств состояний на новые
эквивалентные по входному символу подмножества, руководствуясь
правилом – "оснований для разбиения подмножества нет, если все его
элементы (состояния) переходят в одно подмножество".
Шаг 4: если в образованных подмножествах больше одного
состояния, повторять шаг 2 до полного перебора всех входных символов; после завершения процесса два и больше состояния, входящие в
полученные в конце подмножества эквивалентны между собой.
4.3 Недостижимые состояния КА
Недостижимыми называются такие состояния КА, которые
не могут быть достигнуты из начального состояния воздействием любых входных символов.
Не нарушая эквивалентности, такие состояния можно исключить из таблицы переходов КА. Процедура поиска недостижимых состояний следующая:
Шаг 1: записать одноэлементное множество, в которое входит
начальное состояние.
Шаг 2: дополнить это множество состояниями, в которые переходит КА из состояний, уже присутствующих в множестве при воздействии любых входных символов.
Шаг 3: если на шаге 2 множество не пополняется новыми элементами, то получен исчерпывающий список достижимых состояний;
остальные состояния КА недостижимы
Конечный автомат, в котором исключены недостижимые и эквивалентные состояния называется минимальным КА.
36
Для каждого КА существует бесконечное множество других
эквивалентных ему КА (распознают то же множество цепочек), однако существует единственный минимальный КА (автомат с минимальным числом состояний).
4.4 Недетерминированный конечный автомат
Недетерминированный конечный автомат (в дальнейшем
НКА) представляет собой обычный КА с той разницей, что в таблице
переходов паре "входной символ – состояние" ставится в соответствие
множество состояний (а не единственное, как в КА) и начальных состояний может быть несколько. Такой автомат может получиться при
решении конкретной задачи – построении распознавателя для регулярного множества. Единственный недостаток такого НКА, по сравнению с КА, невозможность простой программной реализации.
В процессе построения такого недетерминированного конечного автомата должны быть определены следующие параметры:
а) входной алфавит V (конечное множество входных символов и символ "конец цепочки");
б) конечное множество состояний S;
в) множество начальных состояний Sнач (подмножество состояний, с которых может начинать работу НКА при обработке новой
цепочки);
г) множество допускающих состояний Sдоп (подмножество
множества состояний S, с которым сравнивается достигнутое НКА
состояние после прихода символа "конец цепочки");
д) таблица переходов (управляющая таблица), которая паре
"текущее состояние – входной символ" ставит в соответствие несколько новых состояний; если паре "текущее состояние – входной
символ" нельзя поставить в соответствие ни одно состояние из множества S, то клетку таблицы переходов оставляют пустой.
Работу НКА можно интерпретировать двумя способами:
1 На некоторых шагах при распознании цепочки с помощью
НКА есть множество выборов. Если имеется хотя бы одна последовательность состояний, при которой НКА заканчивает работу в допускающем состоянии, то такая цепочка будет допущена этим НКА.
2 При возникновении альтернативы во время работы НКА (в
выборе начального состояния или перехода) автомат распадается на
37
конечные автоматы по количеству альтернатив, которые работают параллельно. Если при поступлении символа "конец цепочки" хотя бы
один из параллельно работающих КА находится в допускающем состоянии, то такая цепочка будет допущена этим НКА.
Существует процедура эквивалентного преобразования НКА в
КА по следующему алгоритму (преобразуется таблица переходов
НКА):
1 Для будущей управляющей таблицы эквивалентного КА
изобразить столбцы по количеству входных символов и обозначить их
входными символами.
2 В первую клетку первой строки занести как множество все
начальные состояния НКА.
3 Заполнить остальные клетки этой строки (кроме последней):
по таблице переходов НКА выписать в виде множеств все состояния,
в которые переходят состояния, записанные в первой клетке через соответствующие входные символы.
4 В первой клетке очередной строки записать одно из новых
множеств состояний, которые получены в п.3 при заполнении клеток
таблицы переходов, и выполнить п.3.
5 Закончить процесс построения таблицы переходов после того, как будут исчерпаны все варианты множеств, которые появились в
таблице.
6 При заполнении столбца с символом "конец цепочки" ставить "допустить", если в множество состояний первой клетки строки
входит хотя бы одно допускающее состояние НКА, и "отвергнуть" – в
противном случае.
7. Переобозначить множества состояний как новые состояния
и заново заполнить таблицу переходов (получена таблица переходов
эквивалентного КА).
8. Определить остальные параметры КА по полученной таблице переходов.
Описанную выше процедуру проиллюстрируем на конкретном
примере.
38
Пример. НКА задан таблицей переходов:
S
k
n
–|
A
A
B,C
0
B
B
C
1
A,C
1
C
Примечание. Для упрощения записи в последнем столбце таблицы
символом "0" обозначено действие "отвергнуть", символом "1" – "допустить".
V = { k, n, –| }; S нач = { A, B };
S = { A, B, C }; S доп = { B, C }.
Преобразовать заданный НКА в КА и минимизировать полученный КА.
Решение
1 Выполним процедуру преобразования НКА в КА по описанному
выше алгоритму:
S
k
n
–|
S
k
n
–|
A,B
A,B
B,C
1
a
a
b
1
B,C
B
A,C
1
b
c
d
1
B
B
C
1
c
c
e
1
A,C
A
A,B,C
1
d
f
g
1
A,C
1
e
d
1
C
A
A
B,C
0
f
f
b
0
A,B,C
A,B
A,B,C
1
g
a
g
1
39
2 Переобозначим состояния следующим образом:
a = { A, B }; b = { B, C }; c = { B }; d = { A, C }; e = { C };
f = { A }; g = { A, B, C }.
3 Проверим состояния полученного КА на достижимость:
{a} {a,b}  {a, b, c, d}  {a, b, c, d, e,f, g}
Все состояния КА достижимы.
4 Проверим состояния полученного КА на эквивалентность:
Первое разбиение множества состояний на подмножества по входному символу "конец цепочки": {f}; {a,b,c,d,e,g}.
Проанализируем воздействие входного символа "k" на второе
подмножество:
d  f; e  { }; остальные остаются в этом же подмножестве. Есть основания выделить d и e в отдельные подмножества.
Теперь разбиение будет иметь вид: {f}; {d}; {e}; {a,b,c,g}.
Проанализируем воздействие входного символа "n" на последнее подмножество:
b  d; c  e; a  b; g  g.
Состояния b и c переходят в другие группы и их нужно выделить; состояние а – в выделенное на этом шаге состояние b и на этом
основании его тоже нужно выделить. В результате:
{f}; {d}; {e}; {a}; {b}; {c}; {g}.
Вывод: эквивалентных состояний нет; полученный КА является минимальным.
5 По таблице переходов КА определим остальные его параметры:
V = { k, n, –| }; S нач ={a}; S доп = {a, b, c, d, e, g};
S = {a, b, c, d, e, f, g}.
4.5 Задачи к главе 4
1 Построить с полным описанием конечный автомат для распознания цепочек в алфавите V={0,1,2}, которые начинаются на 0 и в
цепочке встречается ровно два символа 2.
2 Построить с полным описанием конечный автомат для распознания цепочек в алфавите V={a, b, c},которые содержат символ b
только парами и заканчиваются на c.
40
3 Построить с полным описанием конечный автомат для распознания цепочек в алфавите V={а, b, c},которые начинаются с b и в
цепочке встречается только один раз ac.
4 Построить с полным описанием конечный автомат для распознания цепочек в алфавите V={0,1}, которые начинаются с 11 и в
цепочке нули стоят только по два.
5 Определить эквивалентные и недостижимые состояния КА.
Построить минимальный КА и диаграмму переходов для полученного
минимального КА.
б
a
a
b
–|
A
F
B
0
B
E
F
C
F
D
в
a
b
–|
A
C
E
1
0
B
D
A
A
1
C
A
B
B
1
D
E
B
D
0
F
E
E
1
г
a
b
–|
A
A
D
0
0
B
C
F
0
F
1
C
B
F
0
C
E
1
D
B
A
1
E
F
D
0
E
D
F
1
F
E
D
0
F
A
C
1
a
b
-|
д
a
b
-|
A
F
B
0
B
B
F
C
F
D
е
a
b
-|
A
B
D
0
A
C
D
1
0
B
A
F
0
B
D
A
0
A
1
C
B
D
0
C
D
F
1
E
B
1
D
C
A
1
D
C
E
1
E
E
F
0
E
D
F
1
E
F
C
0
F
E
B
1
F
B
A
1
F
E
D
0
41
6 Преобразовать заданный НКА в КА и выполнить процедуру
минимизации КА.
а
б
A
0
1
-|
B
A,C
1
A
A
B
C
C
0
1
-|
A
B
C
0
0
B
B
A,B
1
1
C
A
C
0
a
b
-|
в
г
0
1
-|
A
B
C
1
A
A
B,C
1
B
A,B
C
0
B
C
A
0
C
B
A
0
C
A,C
д
0
е
0
1
2
–|
A,B
B
A,C
1
B
A
B
A
0
C
A
C
C
0
a
b
-|
A
A
C
1
A
B
A
A,B
0
C
B
A,C
0
ж
з
0
1
-|
0
1
-|
A
A
B,C
0
A
A,C
B,C
0
B
B
C
1
B
A
C
0
A,C
0
C
B
B
1
C
42
и
к
а
b
-|
A
A
D
0
B
B
C
C
C
D
A,D
0
1
-|
A
B
A,C
0
0
B
B
C
1
D
0
C
C
A,C
0
D
1
5 Автоматы с магазинной памятью
5.1 Автоматы-распознаватели с магазинной памятью
Далеко не для всех регулярных множеств можно построить
КА–распознаватель, так как КА не имеет возможности считать и запоминать количество символов обрабатываемой цепочки. Для этой
цели используется специальное устройство – магазин, в который можно помещать символы или удалять их, запоминая или сравнивая количество символов входной цепочки. Такой автомат называется автоматом – распознавателем с магазинной памятью (сокращенно – МП–
автомат).
МП – автомат задается:
1 конечным множеством входных символов (включая символ конца
цепочки "–|");
2 конечным множеством магазинных символов (включая маркер
дна магазина – #);
3 конечным множеством состояний;
4 управляющей таблицей, которая каждой комбинации трех параметров: входной символ, магазинный символ(верхний символ магазина), состояние – ставит в соответствие действие с магазином, входным
символом, и состоянием;
5 начальной конфигурацией (начальное состояние и начальное содержимое магазина);
6 множеством допускающих конфигураций (комбинаций – состояние МП–автомата и верхний символ магазина в момент, когда приходит символ "конец цепочки").
43
Большинство ячеек управляющей таблицы имеют вид, показанный на рисунке: ячейка разбита на три поля. В левом поле указывается новое состояние МП – автомата, в центральном – действия с
магазином, в правом – действия с входным символом.
Ряд ячеек управляющей таблицы может без деления на поля
заполняться символом Е(состояние ошибки). Если МП –распознаватель попал в такое состояние, то обработка цепочки прекращается и такая цепочка отвергается.
Действия с магазином
Вт. О
Выт.
Состояния
автомата
Si
П
Д
Действия с вх.
символом
Допускаемые операции с входными символами
1 Держать текущий входной символ обрабатываемой цепочки (Д).
2 Перейти к следующему символу обрабатываемой цепочки (П).
Примечание. Запрещен переход к следующему символу, если текущий символ –| ("конец цепочки").
Допускаемые операции над магазином
Магазин можно представить в виде одностороннего стека или
упорядоченного списка, в котором виден только первый символ. При
вталкивании нового символа в магазин все, находящиеся до этого в
магазине символы, смещаются на одну позицию (для определенности
вправо). Доступ возможен только к символу, помещенному в магазин
44
последним. С ним и выполняются операции, указанные в управляющей таблице:
1 Втолкнуть в магазин магазинный символ, к примеру А (Вт.А).
2 Вытолкнуть из магазина верхний символ, к примеру А (Выт.А).
3 Оставить магазин без изменений (О).
Примечания:
1 Запрещено выталкивание символа дна магазина #.
2 Допускается выполнять действие "втолкнуть" с несколькими
символами ( Вт.АА ).
3 В ряде случаев допускается действие "заменить", т.е. верхний символ магазина заменяется некоторой указанной цепочкой (Зам.
Аав) Для определенности при записи содержимого магазина будем
полагать, что символ дна # занимает самое правое положение в списке. К примеру, содержимое магазина до выполнения операции "Зам.
Аав" – ВВА#; после – АавВА#.
Результатом работы для МП – распознавателя будет сообщение "допустить" или "отвергнуть" цепочку, просмотренную посимвольно после, поступления символа "конец цепочки".
Входная цепочка допускается МП–распознавателем, если
под воздействием этой цепочки автомат, начавший работу в начальной конфигурации (в начальном состоянии и с начальным содержимым магазина), находится в допускающей конфигурации после поступления символа "конец цепочки", иначе цепочка отвергается.
Пример: Построить МП–распознаватель для распознания
множества цепочек следующего вида : { 0(n)1(n)| n>0} (правильная
цепочка состоит из нулей, после которых следует такое же количество
единиц).
Решение
Разработаем логическую последовательность действий (алгоритм работы) МП–автомата для распознания заданного множества
цепочек:
1 При обработке правильной цепочки первыми символами, которые нужно обработать МП–автомату, будет серия из n "0". Их количество нужно запомнить для сравнения с количеством "1".
2 Поступление каждого символа "0" будем сопровождать
вталкиванием в магазин символа А для того, чтобы запомнить количество нулей и сравнить потом с количеством единиц (в начальном состоянии магазин пуст).
45
3 После прихода первого символа "1", нули не должны поступать (поступление "0" должно переводить автомат в состояние ошибки "Е").
4 Поступление каждого символа "1" должно сопровождаться
выталкиванием из магазина символа А. Таким образом будет контролироваться равенство количества "0" и "1".Цепочка будет допускаться
МП–автоматом, если при поступлении символа"–|" магазин окажется
пустым.
Реализуем описанную стратегию в конкретном МП–автомате:
1 Множество входных символов V = {0,1,–|}.
2 Множество магазинных символов {#,А}.
3 Множество состояний S = {s1, s2}.
4 Hачальная конфигурация МП–автомата – состояние s1, магазин
пуст(верхний символ магазина # ).
5 Допускающая конфигурация МП–автомата – состояние s2, магазин
пуст(верхний символ магазина # ).
6 Таблица переходов имеет вид представленный на рисунке (Е – состояние ошибки):
#
s1
A
0
1
––|
Вт.А
s1
П
E
Отв.
Вт.А
Выт.А
Отв.
П.
П s2
s1
Доп.
#
s2
E
А
E
Выт.А .
s2
П
Е
46
Отв.
Проверим работу построенного МП–автомата. Разберем цепочку 0011–| , которая должна быть допущена. Результаты разбора
сведены в таблицу.
Необработанная цепочка
Состояние
автомата
Действия с
магазином
Содержимое
магазина
0011–|
011–|
11–|
1–|
–|
s1
s1
s1
s2
s2
–
Вт. А
Вт. А
Выт. А
Выт. А
#
A#
AA#
A#
#
Цепочка допущена, т.к. конечная конфигурация МП–автомата
допускающая (состояние s2, в магазине пусто).
5.2 Автоматы–трансляторы с магазинной памятью
В ряде случаев при обработке регулярного множества кроме
распознания необходимо его преобразование в другое множество. Такие действия может выполнять МП–транслятор, на выходе которого
будет формироваться выходная цепочка.
МП – транслятор задается:
1 конечным множеством входных символов (включая символ конца
цепочки "–|");
2 конечным множеством выходных символов ;
3 конечным множеством магазинных символов (включая маркер
дна магазина – #);
4 конечным множеством состояний;
5 управляющей таблицей, которая каждой комбинации трех параметров: входной символ, магазинный символ(верхний символ магазина), состояние – ставит в соответствие четыре параметра (действие с
магазином, входным символом, состоянием и выходными символами);
6 начальной конфигурацией (начальное состояние и начальное содержимое магазина);
47
7 множеством допускающих конфигураций (комбинаций – состояние МП–транслятора и верхний символ магазина в момент, когда
приходит символ "конец цепочки").
Строение ячейки в таблице переходов МП–транслятора (см.
рисунок) аналогично строению ячейки МП–распознавателя, в которую добавлено внизу четвертое поле (в нем указываются выходные
символы, выдаваемые на этом шаге на выходе МП–транслятора).
Действия с магазином
Состоян.
автомата
Вт. О
Выт. Д Действия с входн.
Si
П
символом
Переч. симв.
Выдать на выход симв.
Ряд ячеек управляющей таблицы может без деления на поля
заполняться символом Е (состояние ошибки). Если МП–транслятор
попал в такое состояние, то трансляция входной цепочки прекращается и такая цепочка отвергается.
Пример: Построить МП–транслятор для распознания множества {W 2 V} и преобразования его в множество {1(n) 0(m)}, где W –
произвольная цепочка из "0" и "1" ,V-цепочка обратная W, m – число
"0" до символа "2", n – число "1" до символа "2" (конкретный пример
цепочки и ее преобразования 0010112110100  111000).
Решен ие
Разработаем логическую последовательность действий МП–
транслятора для распознания и трансляции заданного в условии множества цепочек:
1 В процессе разбора входной цепочки МП–транслятору необходимо запоминать не только количество единиц и нулей части цепочки
W, но и порядок их следования для последующей проверки цепочки
V. Запоминание можно реализовать, вталкивая в магазин символ В
при приходе единицы и символ А – при приходе нуля. Этот процесс
продолжать до прихода символа "2" (т.е. до момента окончания це-
48
почки W); в результате таких действий в магазине окажется копия цепочки W, записанная в обратном порядке (верхним в магазине будет
символ, соответствующий последнему символу в цепочке W).
2 При разборе W на выход при приходе "1" нужно выдавать
тоже "1", а при приходе "0" на выход не выдавать ничего. Приход "2"
нужно зафиксировать сменой состояния транслятора; с магазином
действий не выполнять.
3 Во втором состоянии идет обработка части цепочки V и действия транслятора следующие:
а) если в магазине верхний символ В и пришла единица – вытолкнуть В, на выход ничего не выдавать и перейти к обработке следующего символа входной цепочки;
б) если в магазине верхний символ А и пришел ноль – вытолк-
0
#
1
Вт.А
Вт.В
П
s1
s1
s1
Вт.В
П s1
Отв.
П
––
Вт.В
П s1
О
П s2
––
Е
#
О
1
Вт.А
s1
Отв.
П s2
–В
Е
1
Вт.А
А
––|
П
––
s1
2
1
Е
Отв.
П
––
Е
Доп.
Е
Отв.
Е
Отв.
Выт.А
А
s2
П
s2
Е
0
Выт.В
В
Е
П
s2
0
49
нуть А, на выход выдать "0" и перейти к обработке следующего символа входной цепочки;
в) оставшиеся два варианта – состояние ошибки Е (входная
цепочка не соответствует виду {W 2 V}.
Полное описание МП-транслятора:
1 Множество состояний S = {s1,s2}.
2 Множество входных символов :{0,1,2,–|}.
3 Множество магазинных символов :{А,В,#}.
4 Множество выходных символов :{0,1}.
5 Управляющая таблица МП–транслятора (приведена на предыдущей
странице).
Для примера разберем цепочку 0112110:
Входная
цепочка
0112110–|
Состояние
Выходная
S1
Содержимое
магазина
#
112110–|
12110–|
2110–|
110–|
10–|
0–|
–|
S1
S1
S1
S2
S2
S2
S2
A#
BA#
BBA#
BBA#
BA#
A#
#
–
1
11
11
11
11
110
цепочка
–
Входная цепочка допущена и преобразована к заданному виду.
5.3 Задачи к главе 5
Задача 1 Для приведенных в таблице (см.ниже) вариантов
множеств цепочек построить МП–распознаватели с полным описанием процесса построения.
Таблица к задаче 1
N п/п
Вид регулярного множества
1
A = { 0(2n) 1 0(n) | n >0}
2
A = { 0(n) 1(m+n) 0(m) | n,m >0}
50
Продолжение таблицы к задаче1
№ п/п
Вид регулярного множества
3
4
5
6
7
8
9
10
A = { a(n) b(m) a(n-m) | n,m >0, n>m}
A = { 1(2n) 2 0(n) | n >0}
A = { 1(n) 0(m) 1(m+1) 0(2n) | n, m >0}
A = {цепочка из 0 и 1, причем нулей на два больше}
A = { 1(n) 0(m) 1(m+n)) | n, m >0}
A = {цепочка из 0 и 1, причем нулей на два меньше}
A = { 1(n) 0(m) 1(m-n-1) | n, m >0, m>n}
A = {цепочка из одинакового числа 0 и 1, причем
начинается с нуля }
Задача 2 Для приведенных в таблице (см.ниже) вариантов построить МП–трансляторы для преобразования множества цепочек А в
множество цепочек В с полным описанием процесса построения.
Таблица к задаче 2
№ п\п
Вид цепочек А, В
1
A = { a(n+m) b(m) a(n)}  B = {1(m) 0(2n)}
2
A = { 1(n) 0(2m) }  B = { 0(n+1) 1(m) 0(n)}
3
A = { 1(n-1) 0(2n) }  B = { a(n+1) b(n-1) }
4
A = { 1(n) 0(m) }  B = { b(n+m) a(m+2) }
5
A = { a(n) b(m-n) a(n) }  B = { 0(n+m) 1(n) }
6
A = {произвольная цепочка из 0 и 1, причем нулей на
два меньше}  B = { b(n) a(n+2) | n – количество 0 в
А}
7
A = {произвольная цепочка из 0 и 1, причем нулей на
два больше}  B = { 0(n+m) 1(n), | n и m число 0 и 1
соответственно}
8
A = {произвольная цепочка из одинакового числа 0 и
1, начинается с 0 и в голове цепочки число символов
0 >= числа символов 1}  B = { (ab) n | n – число одинаковых символов в А}
9
A = {произвольная цепочка из одинакового числа 0 и
1, причем начинается с 1 }  B = {0(n) 1(n)}
51
6 Грамматики
6.1 Общие сведения
В расширенном представлении под термином "язык" понимают всякое средство общения, состоящее из:
– знаковой системы, т.е. множества допустимых последовательностей знаков;
– множества смыслов этой системы;
– соответствия между последовательностями знаков и смыслами, делающими осмысленными допустимые последовательности
знаков.
Знаками могут быть буквы алфавита, математические обозначения, звуки, ритуальные действия и т.д. Hаука об осмысленных знаковых системах называется семиотикой. Hаиболее исследованными
являются знаковые системы, у которых знаками являются символы
алфавита. Правила, определяющие множество текстов (допустимых
последовательностей знаков), образуют синтаксис языка; описание
множества смыслов и соответствия между текстами и смыслами – семантику языка. К таким знаковым системам относятся естественные
языки, языки различных областей науки, языки программирования.
Семантика языка существенно зависит от назначения языка, в
то время, как для синтаксиса можно сформулировать понятия и методы, не зависящие от назначения и целей языка. Для исследования синтаксиса сложился специальный математический аппарат – теория
формальных грамматик, в котором язык понимается уже не как средство общения, а как множество формальных объектов – последовательностей символов алфавита. Эти последовательности называют
цепочками и язык понимают как множество цепочек.
Пусть задан алфавит V, в котором можно построить множество V*(читается – итерация алфавита V) цепочек. Формальный язык
L в алфавите V – это подмножество цепочек из V* (L  V*). Описание
формальных языков осуществляется с помощью формальных порождающих грамматик (формальных грамматик).
Формальная порождающая грамматика G (в дальнейшем –
грамматика G) – это формальная система, определяемая четверкой
объектов:
52
G[Z] = ( VN, VT, Z, P ),
где VN - алфавит нетерминалов (вспомогательных символов);
VT – алфавит терминалов (основных символов);
Z – начальный символ (аксиома) грамматики;
P – конечное множество правил.
Hетерминалы принято обозначать большими буквами латинского алфавита, терминалы – малыми буквами. В алфавит нетерминалов обязательно входит начальный символ грамматики.
Каждое правило из множества P имеет вид x  y, – где x, y
цепочки, состоящие из терминальных и нетерминальных символов. В
дальнейшем будем рассматривать грамматики, содержащие только
правила, левые части которых состоят из одного нетерминального
символа (контекстно–свободные грамматики). При этом должно быть
хотя бы одно правило, левая часть которого – начальный символ
грамматики.
Грамматика описывает бесконечный язык, если хотя бы одно
из правил рекурсивно, т. е. в правой части содержится его левая часть
в явном или неявном виде.
Пример: Задана грамматика G[Z]: VN = {Z,A,B}; VT = {a,b,c}; Z–
начальный символ. P = { Z  ABc;
(1)
A 
aB;
(2)
B 
b }.
(3)
С помощью грамматики G можно продуцировать (получать)
цепочки в алфавите терминалов. Дерево вывода для одной из цепочек
(abbc) имеет вид:
Z
/ | \
/ | \
A B c
/| |
/ | |
a B b
|
|
b
Порядок вывода можно записать в следующем виде:
53
(1)
(2)
(3)
(3) (номера примененных правил)
Z  AВc  aBВc  aBbc  abbc.
Вывод продолжается до тех пор, пока на очередном шаге не
получится цепочка, состоящая только из терминальных символов (т.е.
нельзя применить ни одно из правил вывода).
Сокращенно вывод можно записать, пропустив промежуточные результаты, так Z+  abbc (цепочка abbc выводима из начального символа Z в заданной грамматике ).
Сентенциальная форма – любая цепочка терминальных и нетерминальных символов, которая получается на любом шаге процесса
вывода. Множество сентенциальных форм можно получить из дерева
вывода, обходя его по узлам и соблюдая следующие правила:
– начинать обход с самого левого узла;
– обход надо совершать так, чтобы при переходе к следующему узлу образованное поддерево не включало, как элемент, предыдущее поддерево.
Фраза – часть сентенциальной формы, выводимая из одного
нетерминала за несколько шагов. Для простой фразы шаг вывода равен 1.
Одну и ту же цепочку можно получить, применяя правила в
различных последовательностях (деревья выводов различны). Если
для однозначности в процессе вывода на каждом шаге применять правило к самому левому(правому) нетерминалу в сентенциальной форме, то получим левосторонний(правосторонний) вывод. Таким образом:
1 Каждой цепочке выводимой в заданной грамматике соответствует одно или несколько деревьев вывода.
2 Каждому дереву соответствует один или больше выводов.
3 Каждому дереву соответствует единственный правый и
единственный левый выводы.
4 Если каждой цепочке, выводимой в данной грамматике, соответствует единственное дерево вывода, то такая грамматика называется однозначной ( в правой части каждого правила такой грамматики
содержится не более одного нетерминала).
54
Языком L(G), порождаемым грамматикой G, называется множество всех цепочек в алфавите терминальных символов VT, выводимых из начального символа грамматики.
В процессе функционирования грамматики возможны два варианта:
1 Проверять цепочки на принадлежность их к языку, порождаемому заданной грамматикой. Варианты этого процесса могут быть
следующими:
а) вывод цепочки из начального символа грамматики (построить дерево вывода или вывод начиная с корня) – нисходящий
вывод;
б) вывод можно также делать начиная с кроны дерева (готового предложения); если удается прийти к начальному символу,
то предложение принадлежит заданной грамматике – восходящий вывод.
В обоих вариантах строится дерево вывода.
2 Получать цепочки, которые принадлежат к языку, порождаемому заданной грамматикой .
6.2 Классификация грамматик
Общепринятой классификацией грамматик и порождаемых
ими языков является иерархия Хомского, содержащая четыре типа
грамматик (см. рис. на следующей странице):
Каждый тип грамматик включает грамматики более высоких типов, как частные случаи.
Для построения распознавателей грамматик, других целей
очень часто необходимо преобразовать правила исходной грамматики
к соответствующему виду. При этих преобразованиях язык, порождаемый исходной и полученными после преобразования грамматиками
не должен меняться.
Две грамматики эквивалентны если они порождают один и
тот же язык (одни и те же цепочки терминальных символов).
Рассмотрим ряд процедур, которые всегда приводят к эквивалентным преобразованиям.
55
0-й тип – грамматики с фразовой структурой. Правила имеют
вид: x  y, где x и y – любые цепочки терминалов и нетерминалов.
1-й тип – контекстно–зависимые (КЗ) грамматики. Правила имеют вид x  y, где | x | <= | y | (правая цепочка
не короче левой).
2-й тип – контекстно– свободные (КС) грамматики (вид правил A  y, где A – нетерминал, y –
любая цепочка).
3-й тип – автоматные грамматики (вид
правил A  aB или A  b, где a,b –
терминалы; A,B – нетерминалы).
6.3 Эквивалентные преобразования грамматик
Для построения распознавателей грамматик, других целей часто необходимо преобразовывать правила исходной грамматики к соответствующему виду. При этом язык, порождаемый исходной и полученными после преобразования грамматиками, не должен меняться.
Две грамматики эквивалентны, если они порождают один и
тот же язык(одни и те же цепочки терминальных символов).Рассмотрим ряд процедур, которые всегда приводят к эквивалентным преобразованиям.
6.3 1 Удаление или добавление бесполезных
(непродуктивных и недостижимых) нетерминалов
В множестве Р правил грамматики G непродуктивным называют нетерминал, из которого нельзя получить цепочку терминалов.
56
Для поиска в множестве правил непродуктивных нетерминалов используется следующее свойство.
Свойство А: Если все символы правой части правила продуктивны, то продуктивен и символ, стоящий в его левой части.
Алгоритм поиска непродуктивных нетерминалов в множестве
правил P грамматики G:
– составить список нетерминалов для которых найдется хотя
бы одно правило, правая часть которого состоит только из терминалов;
– если найдется такое правило, что все нетерминалы, стоящие
в его правой части уже занесены в список, то добавить в список нетерминал стоящий в его левой части;
– если на предыдущем шаге список не пополняется, то получен исчерпывающий список всех продуктивных нетерминалов.
Hетерминалы грамматики не попавшие в список, построенный
по приведенному выше алгоритму, являются непродуктивными и, не
нарушая эквивалентности, из множества правил Р можно удалить все
правила, содержащие такие нетерминалы.
В множестве правил грамматики недостижимым называют
нетерминал, который не участвует в процессе вывода. цепочек. Для
поиска недостижимых нетерминалов используется следующее свойство.
Свойство Б Если нетерминал в левой части правила является
достижимым, то достижимы все нетерминалы, стоящие в правой части этого правила.
Алгоритм поиска недостижимых нетерминалов в множестве
правил P грамматики G:
– образовать одноэлементный список из начального нетерминала грамматики;
– если в множестве Р найдено правило, левая часть которого
уже в списке, то включить в список все нетерминалы из его правой
части;
– если на предыдущем шаге список не пополняется, то получен исчерпывающий список всех достижимых нетерминалов.
Hетерминалы грамматики не попавшие в список, построенный
по приведенному выше алгоритму, являются недостижимыми и, не
нарушая эквивалентности, из множества правил Р можно удалить все
правила, содержащие такие нетерминалы.
57
Не нарушая эквивалентности, можно также исключить правила такого вида:
A  A или A  B, B  C, C  A (циклический блок правил).
Пример: Задана грамматика G[S]: VN = {S, A, B, C, D};
VT = {a, b, c, d}; P = {S  aS (1), S  aA (2), A  bB (3),
A  bC (4), B  d (5) D  c (6) }.
Упростить заданную грамматику.
Решение
1 Проверка нетерминалов на продуктивность.
В правых частях правил (5) и (6) только терминалы. Внесем в
создаваемый список продуктивных нетерминалы B и, D. Затем в соответствии с правилом (3) – A (в правой части терминал и продуктивный
нетерминал); в соответствии с правилом (2) – S; анализ других правил
список не пополняет. Получен исчерпывающий список продуктивных
нетерминалов – { B, D, A, S}. В списке отсутствует нетерминал С (непродуктивный, правило (4) для минимизации исходной грамматики
исключим из множества P).
2 Проверка нетерминалов на достижимость.
Внесем на первом шаге в создаваемый список достижимых нетерминалов начальный символ грамматики S, затем на основании правила (2) дополним список нетерминалом A; правило(3) дает основания
внести в список нетерминал В. Дальнейший анализ правил в соответствии с алгоритмом поиска достижимых нетерминалов список не пополняет. Получен исчерпывающий список продуктивных нетерминалов – {S,A,B}. В списке отсутствует нетерминал D (недостижимый,
правило (6) для минимизации исходной грамматики исключим из
множества P).
В результате этих преобразований получили минимальную
грамматику G1[S], эквивалентную исходной.
G1[S]: VN = {S, A, B}; VT = {a, b, d}; начальный символ S;
P = { S  aS (1),
S  aA (2), A  bB (3),
B  d (4) }.
6.3.2 Добавление нетерминала
Не нарушая эквивалентности часть цепочки, составляющей
правую часть любого правила исходной грамматики, можно обозна-
58
чить новым нетерминалом (добавить нетерминал в множество VN) и
дополнить множество правил P правилом, определяющим новый нетерминал.
Пример:
Пусть в исходной грамматике G одно из правил
имеет вид A  abВc. Обозначив bB через новый нетерминал N, заменим это правило двумя: A  aNc; N  bB.
Не нарушая эквивалентности процедуру добавления нетерминала можно применять многократно.
6.3.3 Подстановка правил
В множество правил P исходной грамматики, не нарушая эквивалентности, можно добавить новые правила, которые получаются в
результате подстановки в любое правило, содержащее в правой части
нетерминалы, их значений из других правил. При этом правила,
участвовавшие в подстановках, можно исключить из множества Р.
Другими словами, в множество Р можно добавить правило
A  х, если A+ х (т.е. цепочка х выводима из А в исходной грамматике).
6.3.4 Изменение направления рекурсии
При построении автоматов – распознавателей грамматик к виду правил предъявляются определенные требования. Одно из них –
отсутствие в правилах грамматики левосторонней рекурсии(правил
вида A  Ax ). Для устранения левосторонней рекурсии применяется
приведенная ниже процедура.
Пусть в исходной грамматике есть следующее правило:
A  Ax1| Ax2|...|Axk| y1 | y2 |....| ys (здесь знак "|" означает "или", т.е. в
этом правиле объединено несколько правил с одинаковыми левыми
частями; xi, yi – цепочки терминалов и нетерминалов, причем цепочки
yi не начинаются с А). Для определенности в исходной грамматике не
содержится нетерминала В. Тогда возможна эквивалентная замена
такого составного правила двумя другими, не содержащих левосторонней рекурсии:
A  y1|y2 |....| ys | y1B | y2B |....| ysB
B  x1 | x2 |....| xk | x1B | x2B |....| xkB
59
Пример: Пусть в исходной грамматике имеется правило с левосторонней рекурсией A  Abc | b. Устраним левостороннюю рекурсию.
Введем обозначения: х1= bc; y1= b. После замены получим:
A  b | bB;
B  bc | bcB.
6.4 Задачи к главе 6
Грамматика задана множеством правил Р(начальный символ
грамматики – левая часть первого правила). В каждом из вариантов
определить тип грамматики, выполнить проверку на достижимость и
продуктивность, если возможно, упростить грамматику, выполнив
эквивалентные преобразования. Выполнить полное описание новой
грамматики. В новой грамматике получить 2 цепочки длиной не менее
5 символов, построив для них право– и левосторонний выводы.
1 P = { S  bA
S  bC
C  cb
AA
B  a }.
4 P = {A  dQ
AS
Q  Qde
Qd
S  A }.
7 P = { D  Dbc
Db
D  aS
S  bc
S  A }.
2 P = { S  abC
S  acC
S  adC
C  bB
A  cA
B  d }.
5 P = { A  aB
AZ
BZ
Z  ab
Z  bA
D  d }.
8 P = { A  bB
AC
B  cB
Ba
D  abD }.
60
3 P={ZS
S  aA
SZ
A  qA
Bq
A  a }.
6 P = { F  fdS
F  faS
FZ
Za
ZF
Z  fbS
S  d }.
9 P= { S  aQ
SA
QB
Ba
Bb
B  c }.
10 P = { S  lA
SB
A  Ala
Al
B  S }.
11 P = { N  A
N  aB
B  aN
A  bc
A  bA
C  abc }.
12 P = { S  C
SA
A  aaA
A  bbA
A  ccA
C  aS }.
7 Распознаватели для грамматик
Построение конечных автоматов для распознания регулярных
множеств, особенно таких, для распознания которых необходимо построение МП–автоматов, процесс творческий и плохо поддающийся
формализации. Такие задачи значительно упрощаются и формализуются, если удается построить грамматики, порождающие такие множества. Рассмотрим ряд частных случаев построения автоматовраспознавателей для грамматик второго и третьего типов.
7.1 Построение КА–распознавателей для автоматных
грамматик
Любое регулярное множество, которое распознается КА, можно описать с помощью автоматной грамматики. Алгоритм построения
грамматики следующий:
1 Начальный символ грамматики – начальное состояние КА.
2 Терминальные символы грамматики – алфавит КА (без символа конец цепочки – " –| ").
3 Нетерминальные символы грамматики – множество состояний КА.
4 Если в таблице переходов КА есть переход из состояния А в
состояние В при воздействии входного символа х – ввести правило
следующего вида: А  xB .
5 Если D – допускающее состояние КА, то ввести правило
следующего вида: D  @, где @ – пустая цепочка(для отвергающих
состояний правил нет).
6 Закончить составление правил, когда будут обработаны все
непустые клетки управляющей таблицы ("error" – пустая клетка).
61
Пример:
Задан КА
– входной алфавит V={a,b, --|};
a
b
–|
A
A
B
Доп
B
A
C
Отв
C
C
B
Доп
– множество состояний автомата
S={A,B,C};
– начальное состояние A;
– множество допускающих состояний S1={A,C};
– управляющая таблица приведена на рисунке.
Построить грамматику, которая будет порождать множество цепочек, допускаемых заданным КА.
Решение
1 Начальный символ грамматики A.
2 Множество терминальных символов грамматики VT={a,b}.
3 Множество нетерминальных символов VN={A,B,C}.
4 Множество правил P ={ A  aA (1), A  bB (2),
B  aA (3),
B  bC (4), C  aC (5), C  bB (6); A  @ (7);
C  @ (8) }.
Для проверки правильности построения грамматики получим
вывод цепочки aaabb, которая допускается заданным КА.
(1) (1)
(1)
(2)
(4)
(8) (номера правил)
A  aA  aaA  aaaA  aaabB  aaabbC  aaabb.
Для всякой автоматной грамматики (3-й тип грамматики)
можно построить КА–распознаватель. Алгоритм построения КА–
распознавателя следующий:
1 Входной алфавит КА–распознавателя: V = {VT,–| }.
2 Множество состояний S = {VN,F} (F-финишное состояние –
единственное допускающее состояние КА–распознавателя).
3 Начальное состояние КА–распознавателя – начальный символ грамматики.
4 Множество допускающих состояний S1 = { F }.
62
5 Таблица переходов (управляющая таблица) строится следующим образом:
– обозначить столбцы таблицы символами входного алфавита
(последний столбец – символ "конец цепочки");
– обозначить строки таблицы символами состояниями (первая
строка – начальное состояние КА–распознавателя );
– в соответствии с правилом X  yZ заполнить клетку таблицы на пересечении строки Х и столбца y переходом в состояние Z;
– в соответствии с правилом Х  z заполнить клетку таблицы
на пересечении строки Х и столбца z переходом в состояние F;
– заполнить клетки последнего столбца (все "Отв.", кроме пересечения строки F и столбца –| – "Доп.");
– оставшиеся незаполненными клетки таблицы заполнить символом Е–состояние ошибки (если КА–распознаватель попал в это состояние, то вызывается внешняя процедура обработки ошибок, а цепочка отвергается, как не соответствующая грамматике); допускается
оставлять клетки незаполненными, подразумевая переход в пустое
множество – то же состояние ошибки (это удобно при построении
НКА).
Примечания:
1.Перед началом построения КА–распознавателя проверить
множество нетерминалов грамматики G на продуктивность и достижимость; при необходимости выполнить эквивалентные преобразования грамматики G с целью ее упрощения.
2.Если среди множества правил Р в группах с одинаковыми
левыми частями есть хотя бы два правила, правые части которых
начинаются с одинакового терминального символа, то при построении
по приведенному выше алгоритму получится НКА–распознаватель,
который затем можно легко преобразовать в КА–распознаватель .
Пример:
Для грамматики
G[Z] построить КА–
распознаватель. G[Z] = (VT={a,b,c}; VN={ Z,A,B }; Z; P={ Z  aA
(1),
A  bA (2), A  cB (3), B  cZ (4), B  b (5), A  a (6)}).
Решение
1 Выполним проверку нетерминалов грамматики G[Z] на продуктивность и достижимость.
а) продуктивны нетерминалы A и В (на основании правил (5) и
63
(6)); на основании правила (1) продуктивен нетерминал Z (все терминалы продуктивны);
б) достижимы все терминалы (правила (1) и (3)).
2 Зададим параметры КА–распознавателя:
– входной алфавит {a,b,c,–|};
– множество состояний автомата S={Z,A,B,F};
– начальное состояние автомата – Z;
– множество допускающих состояний автомата S1={ F };
– таблица переходов (управляющая таблица) КА–распознавателя
имеет вид:
a
b
c
–|
A
E
E
Отв.
A
F
A
B
Отв.
B
E
F
Z
Отв.
F
E
E
E
Доп.
Z
По виду таблицы переходов видно (в каждой клетке одно состояние), что получен КА–распознаватель, состояния которого можно
проверить на эквивалентность и достижимость и минимизировать
(выполнить самостоятельно).
Проверка работы КА–распознавателя. Пусть задана цепочка
из грамматики G[Z] : abccaa (вывод в грамматике получить самостоятельно).
Примечание. По самому левому символу необработанной цепочки и текущему состоянию КА–распознавателя в соответствии с
управляющей таблицей вырабатывается новое состояние. Результаты
64
пошаговой работы сведены в таблицу. Заданная цепочка будет допущена построенным КА–распознавателем.
Необработанная
Текущее состояние
Новое состояние
цепочка
КА–распознавателя
КА–распознавателя
abccaa –|
Z
A
bccaa –|
A
A
ccaa –|
A
B
caa –|
B
Z
aa –|
Z
A
a --|
A
F
--|
F
Допустить
7.2 Построение КА–распознавателей для праволинейных
грамматик
Праволинейной называется такая контекстно–свободная
грамматика(КС–грамматика), в правых частях правил которой имеется не более одного нетерминала и этот нетерминал заканчивает правило.
Примечание. В множестве правил праволинейных грамматик
допускаются эпсилон–правила (правила вида X   т.е. нетерминал
преобразуется в пустую цепочку).
Праволинейную грамматику всегда можно преобразовать в
автоматную, для которой построение КА–распознавателя рассмотрено
в предыдущем разделе. Алгоритм преобразования правил следующий:
а) преобразовать правила вида A  xyzB, где xyz – цепочка
терминалов произвольной длины (в данном случае | xyz | = 3 ); вводят
дополнительные нетерминалы по следующему принципу:
A  x<yzB>; <yzB>  y<zB>; <zB>  zB (в угловых скобках записаны цепочки, для обозначения которых вводят новые нетерминалы). Таким образом происходит замена исходного правила несколькими, которые соответствуют правилам автоматной грамматики. В
нашем случае
A  xM
A  xyzB
M  yN
N  zB
65
б) преобразовать правила вида A  xyz, где xyz – цепочка
терминалов произвольной длины (в данном случае | xyz | = 3 ); вводится дополнительный нетерминал F, который в КА–распознавателе
будет служить финишным состоянием (подробнее см. разд. 7.1), а в
преобразованной грамматике добавляется правило F  .
A  xyzF ( преобразование см. п. а)
A  xyz
F
В результате таких преобразований получим автоматную
грамматику, эквивалентную исходной праволинейной. Как строить
для автоматной грамматики КА–распознаватель описано в разделе 7.1.
Примечания:
1 При построении таблицы переходов в последнем столбце
ставить "Доп." для всех состояний КА–распознавателя, для которых в
полученной грамматике есть эпсилон-правила.
2 Полученный КА–распознаватель обязательно проверить на
достижимость и эквивалентность состояний; при необходимости выполнить процедуру преобразования в минимальный КА (переименование состояний не изменит множества распознаваемых цепочек).
7.3 Построение МП–распознавателей для S – грамматик
КС–грамматика (2-й тип грамматики) называется S–
грамматикой, если правые части всех правил этой грамматики начинаются с терминальных символов и для правил с одинаковыми левыми частями правые части начинаются с различных терминалов.
Правила имеют вид Х  y , где y – терминал;  – любая цепочка терминалов и нетерминалов, возможно пустая (S-грамматика не
содержит эпсилон–правил).
Для S–грамматики существует формальная процедура построения МП–распознавателя с одним состоянием S по следующему алгоритму:
1 Входной алфавит МП–распознавателя V = {VT,--|}.
66
2 Множество магазинных символов { VN, VT1, #}, где VT1 –
то подмножество терминальных символов грамматики, которые
встречаются в цепочках  правил Р.
3 Начальная конфигурация МП–распознавателя – в магазине
находится начальный символ грамматики (например для грамматики
G[Z] – Z #).
Примечание. Условимся запись содержимого магазина вести
так, чтобы верхний символ магазина (тот символ, с которым работает
МП–распознаватель) занимал самую левую позицию.
4.Управляющая таблица строится так: столбцы таблицы –
символы входного алфавита (последний символ –|); строки таблицы –
магазинные символы. Заполнение управляющей таблицы:
а) для правил грамматики вида Х  y  ( – непустая цепочка
терминалов и нетерминалов; y – терминал) клетка управляющей таблицы заполняется в соответствии с рис. а (см. ниже);
б) для правил грамматики вида Х  y клетка управляющей таблицы заполняется в соответствии с рис. б (см. ниже).
В соответствии с пп. а и б обрабатывается все множество Р
правил грамматики;
в) клетка таблицы на пересечении терминал – магазинный
символ и тот же терминал – входной алфавит заполняется в соответствии с рис. в (см. ниже).
а
…
y
б
…
.
Зам.&
…
.
П
……..
.
Выт.Х
X
S
y
в
…
…
…
.
y
П
……..
.
Выт.y
X
S
y
.
S
…
…
……..
П
…
г) все клетки последнего столбца таблицы (–|) заполняются
"Отв." кроме клетки на пересечении со строкой #, в которой ставится
"Доп.".
67
д) оставшиеся незаполненными клетки управляющей таблицы
заполняются символом Е(error) – "состояние ошибки".
Пример: Задана грамматика G[S] = (VT = {a,b}; VN = {S,R};
S; P), где P = { S  abR (1); S  bRbS (2); R  a (3); R  bR (4) }.
Построить МП–распознаватель для языка, порождаемого этой
грамматикой.
Решение
1 Выполним проверку нетерминалов грамматики на достижимость и продуктивность: S достижим (начальный символ); R достижим (правило (1)); R продуктивен (правило (3)); S продуктивен (правило (1)).
2 Построим МП–распознаватель (по виду правил делаем вывод, что это S–грамматика):
– входной алфавит V={a,b,–|};
– множество магазинных символов {S,R,b,#};
– начальное содержимое магазина S,#;
– управляющая таблица имеет вид (см. ниже):
a
#
S
E
Зам.
bR
Зам.
RbS
Выт.
R
Е
Отв.
П
Зам.
R
П
b
Доп.
E
П
R
–|
b
Отв.
П
Выт.
b
Отв.
П
68
Примечание. Поля для состояний в управляющей таблице
осталось незаполненным, т.к. состояние только одно и заполнять его
нет смысла.
3 Проверим работу МП–распознавателя.
Выведем контрольную цепочку на основании правил грамматики:
2
1
4
3
3 (номера правил)
S  bRbS  bRbabR  bRbabbR  bRbabba  bababba
Работу МП–распознавателя по разбору цепочки bababba
представим в виде таблицы:
Необработанная цепочка
bababba–|
ababba–|
babba–|
abba–|
bba–|
ba–|
a–|
–|
Обрабат.вход
ной символ
b
a
b
a
b
b
a
–|
Верхний символ
магазина
Содержимое
магазина
Действие с
магазином
S
R
b
S
b
R
R
#
S#
RbS#
bS#
S#
bR#
R#
R#
#
Зам.RbS
Выт.R
Выт.b
Зам.bR
Выт.b
Зам.R
Выт.R
Допустить
Контрольная цепочка распознается построенным
распознавателем.
МП–
Работу МП–распознавателя можно трактовать так: на каждом шаге процесса обработки цепочки магазин представляет следующее утверждение о цепочке необработанных символов (включая и текущий):
"вся цепочка будет допущена тогда и только тогда, когда
оставшаяся необработанной цепочка входных символов выводима из цепочки символов, находящихся в магазине".
69
7.4 Построение МП–распознавателей для q – грамматик
КС–грамматика (2-й тип грамматики) называется q–
грамматикой, если правые части всех правил этой грамматики начинаются с терминальных символов и для правил с одинаковыми левыми частями множества "Выбор" попарно не пересекаются .
Правила имеют вид Х  y  или Х  , где y – терминал;  –
любая цепочка терминалов и нетерминалов, возможно пустая;  – пустая цепочка (q-грамматика содержит хотя бы одно эпсилон–
правило).
Примечание. q–грамматика отличается от S–грамматики
только наличием в множестве Р эпсилон–правил; этот факт существенно усложняет построение МП–распознавателя.
Дадим определение ряду унарных отношений, которые можно
построить на множестве {VT, –|}.
Отношение "След Y" (следует после терминала Y) – подмножество множества входных символов МП–распознавателя, которые
могут следовать за нетерминалом Y в любых сентенциальных формах,
которые могут получаться при выводе цепочек в проверяемой грамматике.
Отношение "Выбор Y" – подмножество множества входных
символов МП–распознавателя, c которых могут начинаться цепочки,
выводимые из нетерминала Y в любых сентенциальных формах, получаемых из множества Р правил грамматики.
Отношение "Выбор Y" в конкретной грамматике строится как
объединение таких отношений, построенных для всех правил, содержащих в левых частях нетерминал Y. Если в левых частях множества
правил Р нетерминал встречается только один раз, то строить отношение "Выбор" для него не нужно.
Для правил вида Y  x  (1) или Y  z (2) множество
"Выбор Y(n)" (n – номер правила в множестве Р) всегда равно первому терминалу правой части правила:
для правила (1) "Выбор Y(1)" = {x};
для правила (2) "Выбор Y(2)" = {z}.
70
Если в множестве Р правил грамматики нет больше правил
для нетерминала Y, то отношение "Выбор Y" = "Выбор Y(1)"  "Выбор Y(2)" ; "Выбор Y" = {x,z}.
Для правила вида Y   (3) отношение "Выбор Y(3)" =
"СледY" и определять его нужно, анализируя все множество Р правил
грамматики (в примере будет подробно рассмотрена подробно).
Для q-грамматики условие "попарное пересечение множеств
"Выбор" для правил с одинаковыми левыми частями должно быть
пусто" гарантирует однозначность работы МП–распознавателя (правило грамматики применяется всякий раз, когда верхний магазинный
символ является его левой частью, а входной символ принадлежит
множеству "Выбор" этого правила).
Рассмотрим на примере процедуру проверки КС–грамматики
на предмет ее принадлежности к классу q–грамматик.
Пример: Пусть задана грамматика G[S]=(VT={a,b,c};
VN={S,A}; S; P); P={S  aA(1); S  b(2); A  cSa(3); A   (4)}.
Проверить принадлежность этой грамматики относится к
классу q–грамматик.
Решение
Для каждого из двух нетерминалов в множестве правил Р имеется больше одного правила (предполагается, что процедуры исключения непродуктивных и недостижимых нетерминалов уже выполнены).
1 Для нетерминала S:
"Выбор S(1)" = {a}; "Выбор S(2)" = {b}.
"Выбор S(1)" П "Выбор S(2)" = { } (пересечение пусто).
"Выбор S" = "Выбор S(1)"  "Выбор S(2)" = { a, b }.
2 Для нетерминала A:
"Выбор A(3)" = {c}; "Выбор A(4)" = "След A"
Определим отношение "След A". После нетерминала A могут
следовать "–|" (правило (1)) и "а". В выводе
1
3
1
(номера правил)
S  aA  acSa  acaAa ... после нетерминала А
появился терминал a.
71
Таким образом отношение "След A" = {–|, a}
"Выбор A(3)"  "Выбор A(4)" = {c}  {–|,a}={ }(пересечение пусто).
"Выбор A" = "Выбор A(3)"  "Выбор A(4)" = {c}  {–|,a} = {c, –|, a }.
Вывод: грамматика G[S] является q–грамматикой.
Для q–грамматики существует формальная процедура построения МП–распознавателя с одним состоянием по следующему алгоритму:
1 Входной алфавит МП–распознавателя V = {VT,–|}.
2 Множество магазинных символов { VN, VT1, #}, где VT1 –
часть терминальных символов грамматики, которые встречаются в
цепочках  множества правил.
3 Начальная конфигурация – в магазине находится начальный
символ грамматики (например для грамматики G[S] – S #).
Примечание. Запись содержимого магазина ведем так, чтобы
верхний символ (тот, с которым работает МП–автомат) занимал самую левую позицию.
4.Управляющая таблица строится так: столбцы таблицы –
символы входного алфавита (последний символ –|); строки таблицы –
магазинные символы. Заполнение управляющей таблицы:
а) для правил грамматики вида Х  y  ( – непустая цепочка
терминалов и нетерминалов; y – терминал) клетка управляющей таблицы заполняется в соответствии с рис. а (см. ниже);
а
…
y
б
…
.
y
Зам 
Выт.Х
X
.
…
X
П
S
……..
.
.
S
…
…
72
……..
П
…
б) для правил грамматики вида Х  y клетка управляющей
таблицы заполняется в соответствии с рис. б (см. пред. стр.).
В соответствии с пп. а и б обрабатывается все множество Р
правил грамматики (кроме эпсилон–правил);
в) заполнить клетки таблицы на пересечении терминал–
магазинный символ и тот же терминал–входной алфавит в соответствии с рис в;
г) заполнить каждую клетку таблицы на пересечении нетерминала Z и входных символов МП–распознавателя из множества "След
Z" в соответствии с рис. г;
в
г
…
y
.
«След Z»
.
Выт.
Z
Z
S
Д
Выт.y
y
П
S
Симв.
…
…
д) все оставшиеся клетки последнего столбца таблицы (–|) заполняются "Отв." кроме клетки на пересечении со строкой #, в которой ставится "Доп.";
e) оставшиеся незаполненными клетки управляющей таблицы
заполняются буквой Е(error) –"состояние ошибки".
Пример: Построим МП–распознаватель для языка, порождаемого грамматикой G[S] из предыдущего примера.
Для заданной q–грамматика G[S] = (VT={a,b,c}; VN={S,A}; S;
P); P = { S  aA(1); S  b(2);
A  cSa (3); A   (4) }.
Построить МП–распознаватель для этой грамматики.
73
Решение
1 Проверка нетерминалов на достижимость и продуктивность:
а) нетерминал S достижим (начальный символ грамматики); A
достижим (в соответствии с правилом (1));
б) S продуктивен (в соответствии с правилом (2)); A продуктивен (в соответствии с правилом (1)).
2.Построение МП–распознаватель(ранее доказано, что задана
q–грамматика):
– входной алфавит V={a,b,c,–|};
– множество магазинных символов {S,A,a,#};
– начальное содержимое магазина S,#;
– управляющая таблица имеет вид:
a
#
S
b
E
Выт.
S
П
A
E
Доп.
E
Отв.
Зам.
Sa
Выт.
A
E
Зам.
A
Выт.
А
––|
c
П
Е
Д
П
Д
Выт.
a
E
a
E
Отв.
П
Примечание: поле для состояний осталось незаполненным,
т.к. заполнять его нет смысла (состояние только одно).
74
3.Проверка работы МП–распознавателя.
Получим контрольную цепочку на основании правил грамматики:
1
3
1
3
1
4
S  aA  acSa  acaAa  acacSaa  acacaAaa  acacaaa
Результаты работы МП–распознавателя при разборе цепочки
acacaaa представим в виде таблицы:
Необраб.
цепочка
Обрабат.
симв.
Верхн
симв
магаз.
acacaaa--|
cacaaa--|
acaaa--|
caaa--|
aaa--|
aa--|
aa--|
a--|
--|
a
c
a
c
a
a
a
a
--|
S
A
S
A
S
A
a
a
#
Контрольная
распознавателем.
цепочка
Содерж.
магазина
S#
A#
Sa#
Aa#
Saa#
Aaa#
aa#
a#
#
допускается
Действие с
магаз.
Действ.
с вход.
симв.
Зам.A
Зам.Sa
Зам.A
Зам.Sa
Зам.A
Выт.A
Выт.a
Выт.a
Доп.
П
П
П
П
П
Д
П
П
--
построенным
МП–
7.5 Задачи к главе 7
Используя процедуры эквивалентных преобразований, упростить заданные КС–грамматики и построить для распознания порождаемых ими языков МП–распознаватели (левая часть первого правила в множестве Р – начальный символ грамматики).
1 P = { S  abC
S  bcC
S  dC
C  bB
A  cA
2 P = { Z  baSb
S  aA
A  qAa
Bq
Aa
75
3 P = { A  dQ
AS
Q  Qde
Qd
SA
B  d }.
4 P = { A  aB
AZ
BZ
Z  ab
Z  bA
D  d }.
S   }.
5 P = { F  fdS
F  faS
FZ
Za
ZF
Z  fbS
S  d }.
A  }.
6 P = { D  Dbc
Db
D  aS
S  bc
S  A }.
7 P = { A  bB
AD
B  cBa
Ba
D  abC }.
8 P= { S aQ
S  cAb
Q  bB
Ba
Bb
B  c }.
10 P = { N  A
N  aB
B  aNb
A  bc
A  bA
C  abc }.
11 P = { S  cC
S  aA
A  aAc
A  bbA
A  ccA
C   }.
12 P = { S  A
SB
A  Abc
Ab
B  D }.
13 P = { N  bAc
N  bcQ
Q cb
AA
BA
Q  }.
14 P = { Z  qNa
ZA
NQ
Q  ca
Qd
Q  fq }.
15 P = { Z  aQ
QB
Q  Qzc
Qz
B  DB }.
16 P = { N  qaZ
N  qbZ
NA
Ad
AN
A  qcZ
Z  qaq }.
17 P = { A  bB
A  cC
C  abc
CB
Q  acb
C  }.
76
9 P = { S dA
S aB
A Ada
Ad
BS
A  }.
18 P = { Q  aaC
Q  abC
Q  acC
S  aQ
S  ca
C  Q }.
Список литературы
1 Ахо А.,Ульман Дж. Теория синтаксического анализа, перевода и компиляции.– М : Мир, 1978.– Т.1,2.
2 Горбатов В.А. Основы дискретной математики.– М.: Высш.
школа, 1986.– 324 с.
3 Кемени Дж.,Снелл Дж.,Томпсон Дж. Введение в конечную
математику.– М.: Мир, 1965.– 486 с.
4 Кузнецов О.П.,Адельсон–Вельский Г.М. Дискретная математика для инженера.– М.: Энергоатомиздат, 1988.– 480 с.
5 Льюис Ф. и др. Теоретические основы проектирования компиляторов.– М.: Мир, 1979. – 586 с.
6 Новиков Ф.А. Дискретная математика для программистов.–
СПб.: Питер, 2000. –304 с.:ил.
77
Download