Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
![]()
Рис. 3.14. Автомат с двумя состояниями А и D
В обозначениях обобщенного автомата с двумя состояниями, изображенного на рис. 3.9, соответствующие регулярные выражения для рис. 3.14 равны: R= 0+1, S - 1(0 + 1)(0 + 1), Т= 0 и {/=0. Выражение U* можно заменить на Ј, т. е. исключить его из конкатенации, поскольку, как показано выше, 0* = е. Кроме того, выражение SU*T эквивалентно 0, потому что Т— один из операндов конкатенации— равен 0. Таким образом, общее выражение (R + SUT) SU в данном случае упрощается до R S, или (0 + 1)1(0 + 1)(0 + 1). Говоря неформально, язык этого выражения состоит из цепочек, заканчивающихся единицей с двумя последующими символами, каждый из которых может быть либо нулем, либо единицей. Этот язык представляет одну часть цепочек, которые допускаются автоматом, изображенным на рис. 3.11: у них на третьей позиции с конца стоит 1.
Теперь снова нужно вернуться к рис. 3.13 и исключить состояние D. Поскольку в этом автомате нет состояний, следующих за D, то согласно рис. 3.7 необходимо лишь удалить дугу, ведущую из С в D, вместе с состоянием D. В результате получится автомат, показанный на рис. 3.15.
0 + 1
Начало 1(0 +1) S/^S Aj ►ПСП
Рис. 3.15. Автомат с двумя состояниями, полученный в результате исключения состояния D
Порядок исключения состояний
Как было отмечено в примере 3.6, если состояние не является ни начальным, ни допускающим, то оно исключается во всех сокращенных автоматах. Таким образом, одно из преимуществ процесса исключения состояний по сравнению с механической генерацией регулярных выражений, описанной в разделе 3.2.1, состоит в том, что сначала мы раз и навсегда исключаем все состояния, которые не являются ни начальными, ни допускающими. Мы вынуждены повторять процедуру сокращения, только когда необходимо исключить несколько допускающих состояний. Но даже и в этом случае можно совместить некоторые действия процедуры сокращения. Например, если автомат содержит три допускающих состояния р, q кг, то можно вначале исключить р, а затем отдельно исключить либо q, либо г, получив автоматы для допускающих состояний г и q, соответственно. Затем можно снова начать с трех допускающих состояний и, исключив состояния q и г, получить автомат для р.
Этот автомат очень похож на автомат, изображенный на рис. 3.14; различаются только метки над дугами, ведущими из начального состояния в допускающее. Следовательно, можно применить правило для автомата с двумя состояниями и упростить данное выражение, получив в результате (0 + 1)*1(0 + 1). Это выражение представляет другой тип цепочек, допустимых этим автоматом, — цепочки, у которых 1 стоит на второй позиции с конца.
Осталось объединить оба построенные выражения, чтобы получить следующее выражение для всего автомата (см. рис. 3.11).
(О + 1)*1(0 + 1) + (0 + 1)*1(0 + 1)(0 + 1)
□
3.2.3. Преобразование регулярного выражения в автомат
Теперь завершим план, представленный на рис. 3.1, показав, что любой язык L, являющийся языком L(R) для некоторого регулярного выражения R, будет также языком ЦЕ) для некоторого Ј-НК доказательство проведем методом структурной индукции по выражению R. Сначала покажем, как строить автоматы для базовых выражений: отдельных символов, Ј и 0. Затем опишем, каким образом объединять эти автоматы в большие автоматы, которые допускают объединение, конкатенацию или итерацию языков, допускаемых меньшими автоматами.
Все конструируемые автоматы представляют собой Ј-НКА с одним допускающим состоянием.
Теорема 3.7. Любой язык, определяемый регулярным выражением, можно задать некоторым конечным автоматом.
Доказательство. Предположим, что L = L(R) для регулярного выражения R. Покажем, что L = L(E) для некоторого Ј-НКА Е, обладающего следующими свойствами.
Доказательство проводится структурной индукцией по выражению R, следуя рекурсивному определению регулярных выражений из раздела 3.1.2.
Базис. Базис состоит из трех частей, представленных на рис. 3.16. В части (а) рассматривается выражение е. Языком такого автомата является {е}, поскольку единственный путь из начального в допускающее состояние помечен выражением Ј. В части (б) показана конструкция для 0. Понятно, что, поскольку отсутствуют пути из начального состояния в допускающее, языком этого автомата будет 0. Наконец, в части (в) представлен автомат для регулярного выражения а. Очевидно, что язык этого автомата состоит из одной цепочки а и равен L(а). Кроме того, все эти автоматы удовлетворяют условиям (1), (2) и (3) индуктивной гипотезы.
/
©
V /
б)
V У
В)
Рис. 3.16. Базис построения автомата по регулярному выражению
Индукция. Три части индукции представлены на рис. 3.17. Предположим, что утверждение теоремы истинно для непосредственных подвыражений данного регулярного выражения, т. е. языки этих подвыражений являются также языками Ј-НКА с единственным допускающим состоянием. Возможны четыре случая.
Данное выражение имеет вид R + S для некоторых подвыражений R и S. Тогда ему соответствует автомат, представленный на рис. 3.17, а. В этом автомате из нового начального состояния можно перейти в начальное состояние автомата для выражения либо R, либо S. Затем мы попадаем в допускающее состояние одного из этих автоматов, следуя по пути, помеченному некоторой цепочкой из языка L(R) или L(S), соответственно. Попав в допускающее состояние автомата для R или S, можно по одному из Ј-путей перейти в допускающее состояние нового автомата. Следовательно, язык автомата, представленного на рис. 3.17, а, равен L(R) (J L(S). Выражение имеет вид RS для некоторых подвыражений R и S. Автомат для этой конкатенации представлен на рис. 3.17, б. Отметим, что начальное состояние первого автомата становится начальным состоянием для всего автомата, представляющего конкатенацию, а допускающим для него будет допускающее состояние второго автомата. Идея состоит в том, что путь, ведущий из начального в допускающее состояние, сначала проходит через автомат для R по некоторому пути, помеченному цепочкой из L(R), а потом — через автомат для S по пути, помеченному цепочкой из L(S). Следовательно, путями автомата, представленного на рис. 3.17, б, будут те и только те пути, которые помечены цепочками из языка L(R)L(S>). Выражение имеет вид R* для некоторого подвыражения R. Используем автомат, представленный на рис. 3.17, е. Этот автомат позволяет пройти по следующим путям:а) из начального состояния непосредственно в допускающее по пути, помеченному е. Этот путь позволяет допустить цепочку е, которая принадлежит L(R*) независимо от выражения R;
б) перейти в начальное состояние автомата для R, пройти через этот автомат один или несколько раз, и затем попасть в допускающее состояние. Это множество путей дает возможность допускать цепочки, которые принадлежат языкам L(R), L(R)L(R), L(R)L(R)L( R) и так далее, порождая таким образом все цепочки из Ј(/?*), за исключением, возможно, цепочки е. Но она получена в п. 3, а как отметка дуги непосредственно из начального в допускающее состояние.
4. Выражение имеет вид (R) для некоторого подвыражения R. Автомат для R может быть автоматом и для (R), поскольку скобки не влияют на язык, задаваемый выражением.


б)

Рис. 3.17. Индуктивный шаг преобразования регулярного выражения в е-НКА
Легко заметить, что построенные автоматы удовлетворяют всем трем условиям индуктивной гипотезы: одно допускающее состояние, отсутствие дуг, ведущих в начальное состояние, и дуг, выходящих из допускающего состояния. □
Пример 3.8. Преобразуем регулярное выражение (0 + 1)*1(0 + 1) в Ј-НКА. Построим сначала автомат для 0 + 1. Для этого используем два автомата, построенные согласно рис. 3.16, в: один с меткой 0 на дуге, другой— с меткой 1. Эти автоматы соединены с помощью конструкции объединения (см. рис. 3.17, а). Результат изображен на рис. 3.18, а.



Рис. 3.18. Автомат, построенный для примера 3.8
Далее, применим к автомату (см. рис. 3.18, а) конструкцию итерации (см. рис. 3.17, в). Полученный автомат изображен на рис. 3.18, б. На последних двух шагах применяется конструкция конкатенации (см. рис. 3.17, б). Сначала автомат, представленный на рис. 3.18, б, соединяется с автоматом, допускающим только цепочку 1. Последний получается путем еще одного применения базисной конструкции (см. рис. 3.16, в) с меткой 1 на дуге. Отметим, что для распознавания цепочки 1 необходимо создать новый автомат; здесь нельзя использовать автомат для 1, являющийся частью автомата, изображенного на рис. 3.18, а. Третьим автоматом в конкатенации будет еще один автомат для выражения 0+1. Опять-таки, необходимо создать копию автомата (см. рис. 3.18, а), поскольку нельзя использовать автомат для 0+1, представляющий собой часть автомата (см. рис. 3.18, б).
Полный автомат показан на рис. 3.18, е. Заметим, что если удалить е-переходы, то этот е-НКА будет весьма похож на более простой автомат (см. рис. 3.15), также допускающий цепочки с 1 на предпоследней позиции. □
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |


