Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
discrete_math.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.33 Mб
Скачать

47. Задача синтеза автоматов-распознавателей.

Задача синтеза состоит в том, чтобы для заданного языка L построить (синтезировать) автомат, распознающий этот язык. Согласно основной теореме теории автоматов, такой автомат существует только тогда, когда L – регулярный язык. Поэтому далее будем решать задачу синтеза в предположении, что исходный язык L задан регулярным выражением.

Напомним, что диаграмма Мура детерминированного автомата удовлетворяет условию детерминированности, т.е. для любого символа входного алфавита А из каждой вершины должна выходить ровно одна дуга, помеченная этим символом. Далее нам потребуются ориентированные графы, напоминающие диаграмму Мура автомата-распознавателя, но не обязательно обладающие свойством детерминированности. Такие графы мы будем называть недетерминированными источниками. Недетерминированный источник отличается от диаграммы Мура тем, что из любой его вершины может выходить несколько дуг, помеченных одним и тем же входным символом, или не выходить ни одной дуги с этим символом. Кроме того, некоторые дуги источника могут быть пустыми, т.е. помеченными символом Λ. Устройство, описываемое недетерминированным источником, является недетерминированным автоматом. Его также будем называть недетерминированным источником (или просто источником). Очевидно, любой детерминированный автомат является источником, но не любой источник можно считать детерминированным автоматом из-за того, что в источнике может быть нарушено условие детерминированности. Источник, как и автомат-распознаватель, имеет одну начальную и одну или несколько заключительных вершин. Поэтому он тоже распознает некоторый язык.

ТЕОРЕМА. Если недетерминированный источник имеет n состояний и распознает некоторый язык L, то найдется детерминированный автомат, который имеет не более 2n состояний и распознает тот же самый язык L.

Из этой теоремы следует, что недетерминированные источники способны распознавать только регулярные языки. Более того, теорема утверждает, что для любого источника найдется эквивалентный ему автомат, т.е. автомат, распознающий тот же самый язык. Иными словами, в области распознавания языков детерминированные автоматы умеют выполнять ту же самую работу, что и недетерминированные источники. Теорема об источнике дает нам метод для решения задачи синтеза автомата. Действительно, сначала по заданному языку можно построить недетерминированный источник (это сделать проще, чем сразу строить детерминированный автомат), а затем полученный источник надо «детерминизировать», т.е. преобразовать в эквивалентный ему детерминированный автомат.

Алгоритм построения источника по заданному языку опирается на тот факт, что для любого регулярного языка существует распознающий его двухполюсный источник, т.е. источник с одной начальной и одной заключительной вершинами. Это позволяет строить требуемый источник последовательным и (или) параллельным соединением более простых источников, распознающих отдельные множители и слагаемые, входящие в состав заданного регулярного выражения. А именно, пусть имеются два двухполюсных источника G1 и G2, распознающие языки L1 и L2. Через u1, u2 и v1, v2 обозначим соответственно их начальные и заключительные вершины. Параллельное соединение этих источников изображено на рисунке «а». Все добавленные дуги являются пустыми, т.е. помечены символом Λ. Добавленные вершины и и v являются начальной и заключительной вершинами полученного источника соответственно. Очевидно, этот источник распознает сумму языков L1 + L2.

Последовательное соединение двухполюсников G1 и G2 изображено на рисунке «б». При последовательном соединении добавляется пустая дуга, идущая из заключительной вершины первого источника в начальную вершину второго источника. В полученном источнике начальной вершиной является u1, а заключительной вершиной – v2. Этот источник распознает произведение языков L1· L2.

Чтобы из двухполюсника G1 получить источник, распознающий итерацию языка (L1)*, необходимо выполнить следующие действия: добавить новые начальную и заключительную вершины s и t; провести пустые дуги [s, t], [s, и1], [v1, u1], [v1, t]. В итоге получим двухполюсный источник с начальной вершиной s и заключительной вершиной t.

Пример 1. Имеется язык L, заданный регулярным выражением ab + с*. Требуется построить источник, распознающий язык L.

Синтаксический анализ заданного регулярного выражения пока­зывает, что оно состоит из двух слагаемых. Поэтому достаточно по­строить двухполюсные источники отдельно для каждого слагаемого, а затем подключить их параллельно. Поскольку первое слагаемое – это произведение двух множителей a и b, то распознающий его двухполюсный источник G1 получается последовательным соединением двух простейших двухполюсников, построенных отдельно для каждого слагаемого. В источнике G1 вершина v1 является начальной вершиной, а v3 – заключительной. Заметим, что согласно правилу последовательного соединения двухполюсников в источнике G1 следовало бы провести пустую дугу из заключительной вершины первого двухполюсника в начальную вершину второго двухполюсника. Однако вместо добавления пустой дуги мы просто отождествили эти две вершины. В данном случае это не повлияло на язык, распознаваемый источником G1, зато уменьшило число вершин и дуг.

Источник G2 для распознавания итерации с* получим из простейшего двухполюсника, распознающего слово с, т.е. дуги [и1, и2], помеченной символом с. Для этого согласно описанным выше правилам добавим две вершины s и t и четыре пустые дуги [s, и1], [и2, и1], [s, t] и [и2, t].

Теперь осталось лишь параллельно соединить двухполюсники G1 и G2. В соответствии с правилами параллельного соединения источников для этого следовало бы добавить новую начальную вершину u и новую заключительную вершину v, а также провести четыре дополнительные дуги, помеченные символом Λ. Однако с целью упрощения источника мы просто отождествим вершину v1 источника G1 с вершиной s источника G2, а вершину v2 с вершиной t. В данном примере это не приведет к изменению распознаваемого языка. Таким образом, окончательно получаем искомый двухполюсный источник G, распознающий заданное регулярное выражение.

Поскольку всякое регулярное выражение представимо в виде суммы, произведения и итерации элементарных языков, то для распознавания любого регулярного языка можно построить источник с помощью последовательного и параллельного соединений более простых источников. После этого для решения задачи синтеза достаточно полученный источник преобразовать в детерминированный автомат, который существует в силу теоремы о недетерминированном источнике.

Определение. Подмножество вершин источника G называется замкнутым, если вместе с каждой вершиной v из этого подмножества ему принадлежат также все вершины, в которые из v идет пустая дуга.

Пример 2. Воспользовавшись тем, что у нас уже имеется источник для распознавания языка L, заданного регулярным выражением a·b + с*, решим для него задачу синтеза.

Поскольку в этом источнике пять вершин, то из них можно образовать 25 подмножеств. Однако нам потребуются только замкнутые подмножества, достижимые из начальной вершины s. Через М1 обозначим минимальное замкнутое подмножество, содержащее начальную вершину s. Очевидно, М1 = {s, u1, t}. Через М2 обозначим замкнутое подмножество, образованное только теми вершинами, в которые можно попасть из вершин множества М1 по словам вида а(Λ)k, где k = 0, 1, 2, … . Иными словами, М2 – это минимальное замкнутое подмножество, которое содержит концы всех дуг, выходящих из вершин подмножества М1 и помеченных символом а. В данном примере М2 = {v2}. Затем аналогично строим минимальные замкнутые подмножества М3 и М4, которые содержат концы всех дуг, помеченных меткой b и с соответственно и выходящих из вершин подмножества М1. В данном cлучае М3 = , М4 = {u1, u2, t}. Далее получаем замкнутые подмножества, достижимые из М2, М3 и М4 по словам вида а(Λ)k, b(Λ)k и с(Λ)k, и т.д.

а

b

c

М1={s, u1, t}

М2={v2}

М3=

М4={u1, u2, t}

М2={v2}

М3=

М5={t}

М3=

М3=

М3=

М3=

М3=

М4={u1, u2, t}

М3=

М3=

М4={u1, u2, t}

М5={t}

М3=

М3=

М3=

Эта таблица заполняется по строкам сверху вниз до тех пор, пока в первом столбце не окажутся перечислены все подмножества, встречающиеся в остальных столбцах таблицы. Каждое подмножество из первого столбца соответствует какому-либо состоянию искомого детерминированного автомата. Начальному состоянию автомата всегда соответствует подмножество М1, а его заключительным состояниям – все замкнутые подмножества, содержащие заключительную вершину t. В данном случае автомат будет иметь следующие пять состояний (для удобства обозначим их цифрами): 1 = {s, u1, t}, 2 = {v2}, 3 = , 4 = {u1, u2, t}, 5 = {t}.

Начальным состоянием является состояние 1, а заключительными – 1, 4 и 5. Дуга, помеченная выражением a + b + с, заменяет три параллельных дуги, одна из которых имеет метку a, другая – b, а третья – с.

а

b

c

1

2

3

4

2

3

5

3

3

3

3

3

4

3

3

4

5

3

3

3

48. Эквивалентные состояния автомата-распознавателя, эквивалентные автоматы-распознаватели, минимизация автоматов-распознавателей, алгоритм Мили.

Особый интерес представляет автомат с наименьшим числом состояний, т.к. он имеет самое простое описание. Задача построения такого автомата называется задачей минимизации автомата.

Определение. Состояния vk и vi автоматов Т и Т΄ соответственно называются эквивалентными, если для любого входного слова γ А* выходные слова Т(γ, vk) и Т΄(γ, vi) совпадают.

Рассмотрим алгоритм Мили, с помощью которого можно за конечное время узнать, эквивалентны ли интересующие нас состояния произвольного автомата Т с функциями выходов и переходов f и g. На первом этапе множество V состояний автомата разбивают на непересекающиеся классы. Два состояния v′ и v″ помещают в один и тот же класс только тогда, когда для любого входного символа а А соответствующие выходные символы f(a, v′) и f(a, v″) совпадают. Если же найдется символ а А, такой что f(a, v′) ≠ f(a, v″), то состояния v′ и v″ относят к разным классам. На каждом последующем этапе производится расщепление некоторых полученных ранее классов на новые непересекающиеся классы. Через C обозначим один из классов, полученных по окончании n-го этапа, и рассмотрим последовательность действий на (n + 1)-м этапе. Если при каждом а А и любых состояниях u′, u″ C новые состояния g(a, и′) и g(a, и″) принадлежат одному из классов, полученных по окончании n-го этапа, то на (n + 1)-м этапе класс C не расщепляется. Если же для некоторого а А найдутся такие u′, u″ C, что новые состояния g(a, и′) и g(a, и″) принадлежат разным классам, полученным по окончании n-го этапа, то на (n + 1)-м этапе класс С расщепляется. Будем говорить, что расщепление класса С произошло по этому входному символу а. После его расщепления состояния u′ и u″ помещают в разные новые классы. Эти новые классы расщепляются аналогичным образом до тех пор, пока это возможно. Как только процедуру расщепления нельзя будет применить ни к одному из образовавшихся классов, (n + 1)-й этап заканчивается.

Очевидно, что при расщеплении классов их количество возрастает, но оно ограничено сверху числом состояний автомата, т.к. каждый класс содержит хотя бы одно состояние. Поэтому процедура расщепления не может продолжаться бесконечно. Рано или поздно наступит стабилизация, когда по окончании очередного этапа будет получено разбиение множества V на такие непересекающиеся классы, которые на следующем этапе не расщепляются. Эти окончательные классы являются классами эквивалентности в том смысле, что все состояния автомата, попавшие в один класс, эквивалентны между собой, но не эквивалентны никакому состоянию из другого класса.

Определение. Два автомата с общими входным и выходным алфавитами называются эквивалентными, если для каждого состояния первого автомата найдется эквивалентное ему состояние второго автомата, и наоборот.

Определение. Автомат называется минимальным, если все его состояния попарно неэквивалентны.

Задача минимизации состоит в построении минимального автомата, эквивалентного заданному. Очевидно, такой минимальный автомат существует для любого детерминированного конечного автомата. Чтобы его найти, сначала используют алгоритм Мили, позволяющий разбить все состояния исходного автомата на классы эквивалентности, а затем каждый класс эквивалентности объявляют состоянием искомого минимального автомата и получают его функции выходов и переходов.

Пример 1. Найдем классы эквивалентности автомата, заданного таблицей выходов и переходов. В таблице для краткости все состояния обозначены своими номерами и перечислены в первом столбце.

a

b

1

a, 2

b, 5

2

a, 5

b, 4

3

a, 1

b, 5

4

b, 6

a, 1

5

b, 3

a, 1

6

a, 1

b, 4

П е р в ы й э т а п. Находясь в состояниях 1, 2, 3 и 6, автомат преобразует входной символ a в выходной символ a, а в состояниях 4 и 5 преобразует а в b. Поэтому на первом этапе множество состояний V расщепляется по входному символу а на два класса: C1 = {1, 2, 3, 6} и C2 = {4, 5}. Заметим, что по входному символу b новые классы C1 и C2 не расщепляются.

В т о р о й э т а п. Класс C2 не расщепляется, т.к. из состояний 4 и 5 под действием входного сигнала а автомат переходит в состояния 6 и 3, которые принадлежат одному классу C1, а под действием сигнала b – в состояние 1, которое тоже принадлежат классу C1.

Класс C1 расщепляется по символу а на два класса: C3 = {1, 3, 6} и C4 = {2}. Действительно, под действием входного символа а из состояний 1, 3 и 6 автомат переходит в состояния 2 и 1, которые принадлежат классу C1, а из состояния 2 – в состояние 5, которое классу C1 не принадлежит. Поэтому группа состояний 1, 3 и 6 после расщепления класса C1 не может попасть в один новый класс вместе с состоянием 2. Класс C3 далее не расщепляется, поскольку под действием символа b автомат из состояний 1, 3 и 6 попадает в состояния 5 и 4, которые принадлежат одному классу C2. Таким образом, по окончании второго этапа получаем разбиение множества V на три класса: C2 = {4, 5}, C3 = {1, 3, 6} и C4 = {2}.

Т р е т и й э т а п. Класс C4  не расщепляется, поскольку содержит всего одно состояние. Класс C2 тоже не расщепляется, т.к. из состояний 4 и 5 под действием входного символа а автомат переходит в состояния 6 и 3, которые принадлежат одному классу C3, а под действием символа b – в одно и то же состояние 1.

Класс C3 расщепляется по символу а на классы C5 = {1} и C6 = {3, 6}. В самом деле, из состояния 1 под действием входного символа а автомат переходит в состояние 2, которое принадлежит классу C4, а из состояний 3 и 6 – в состояние 1, которое классу C4 не принадлежит. Значит, после расщепления класса C3 состояние 1 не должно попасть в один новый класс вместе с группой состояний 3 и 6. Состояния 3 и 6, наоборот, после расщепления C3 обязательно попадут в один класс, поскольку из этих состояний по входному символу b автомат переходит в состояния 5 и 4, принадлежащие классу C2. Таким образом, по окончании третьего этапа множество V оказалось разбито на четыре класса: C2 = {4, 5}, C4 = {2}, C5 = {1} и C6 = {3, 6}.

Ч е т в е р т ы й э т а п. Ни один из классов C2, C4, C5 и C6 не расщепляется. Следовательно, алгоритм завершил работу, а полученные множества C2, C4, C5 и C6 являются классами эквивалентности. Это означает, например, что состояния 4 и 5 эквивалентны друг другу, но не эквивалентны никакому другому состоянию автомата.

Пример 2. Решим задачу минимизации автомата, рассмотренного в примере 1. Поскольку нам уже известно разбиение множества его состояний на классы эквивалентности, оставим по одному состоянию из каждого класса {4,5}, {2}, {1} и {3,6}. Пусть, например, это будут состояния 4, 2, 1 и 3. Состояния 5 и 6 удалим. Тогда искомый минимальный автомат будет иметь четыре состояния.

a

b

1

a, 2

b, 4

2

a, 4

b, 4

3

a, 1

b, 4

4

b, 3

a, 1

Чтобы получить его таблицу выходов и переходов, нужно в таблице, задающей исходный автомат, вычеркнуть последние две строки (т.к. они соответствуют удаленным состояниям 5 и 6), а в оставшихся строках заменить состояния 5 и 6 на эквивалентные им состояния 4 и 3 соответственно. В итоге получим таблицу выходов и переходов искомого минимального автомата.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]