Прямое произведение ДКА — различия между версиями
(→Пример) |
|||
Строка 17: | Строка 17: | ||
[[Файл:Multi_DKA_result.png]] | [[Файл:Multi_DKA_result.png]] | ||
− | |||
− | |||
Согласно определению: | Согласно определению: | ||
Строка 31: | Строка 29: | ||
#*<tex>\delta(\langle s_1, q_2 \rangle, 1) = \langle \delta_1(s_1, 1), \delta_2(q_2, 1) \rangle = \langle t_1, t_{21} \rangle </tex> | #*<tex>\delta(\langle s_1, q_2 \rangle, 1) = \langle \delta_1(s_1, 1), \delta_2(q_2, 1) \rangle = \langle t_1, t_{21} \rangle </tex> | ||
#*... | #*... | ||
+ | {{Утверждение | ||
+ | |statement=Автомат <tex>A = \langle \Sigma, Q, s, T, \delta \rangle</tex>, построенный как прямое произведение автоматов <tex>A_1</tex> и <tex>A_2</tex> будет их пересечением. | ||
+ | |proof=Возьмем слово <tex>\alpha</tex>, которое допускает автомат <tex>A_1</tex> и автомат <tex>A_2</tex>. Выпишем все состояния в порядке допуска слова <tex>\alpha</tex> автоматом <tex>A_1</tex> {{---}} <tex>a_{11}, a_{12}, ... , a_{1|\alpha|}</tex> и все состояния проходимые при допуске слова автоматом <tex>A_2</tex> {{---}} <tex>a_{21}, a_{22}, ... , a_{2|\alpha|}</tex>. Построим список пар <tex>\langle a_{1i}, a_{2i} \rangle</tex>, где <tex>i = 1, 2, ..., |\alpha|</tex>. Данный список является списком состояний в процессе допуска слова <tex>\alpha</tex> автоматом <tex>A</tex>, так как: | ||
+ | |||
+ | *<tex>\langle a_{11}, a_{21} \rangle = \langle s_1, s_2 \rangle</tex> {{---}} сохраняется стартовое состояние | ||
+ | |||
+ | *<tex>\delta_1(a_{1i-1},c) = a_{1i}</tex>, <tex>\delta_2(a_{2i-1},c) = a_{2i}</tex>, <tex>\delta( \langle a_{1i-1}, a_{2i-1} \rangle, c) = \langle \delta_1(a_{1i-1},c), \delta_2(a_{2i-1},c) \rangle = \langle a_{1i}, a_{2i} \rangle</tex> {{---}} переходы верны | ||
+ | |||
+ | *<tex>a_{1|\alpha|} \in T_1, a_{2|\alpha|} \in T_2, \langle a_{1|\alpha|}, a_{2|\alpha|} \rangle \in T_1 \times T_2 = T</tex> {{---}} сохраняется терминальное состояние | ||
+ | Следовательно автомат <tex>A</tex> допускает слова, которые допускает автомат <tex>A_1</tex> и автомат <tex>A_2</tex>. | ||
+ | |||
+ | Возьмем слово <tex>\beta</tex>, которое не допускает автомат <tex>A_1</tex> или автомат <tex>A_2</tex>, тогда <tex>a_{1|\beta|}</tex> или <tex>a_{2|\beta|}</tex> {{---}} нетерминальное состояние, следовательно <tex>\langle a_{1|\beta|}, a_{2|\beta|} \rangle \notin T_1 \times T_2</tex>. | ||
+ | }} | ||
− | |||
== Применение == | == Применение == | ||
Изменив конструкцию, можно получить автомат, допускающий разность или объединение двух языков. | Изменив конструкцию, можно получить автомат, допускающий разность или объединение двух языков. |
Версия 21:37, 9 октября 2014
Определение: |
Прямым произведением двух ДКА и называется ДКА , где:
|
Содержание
Пример
Возьмем автоматы:
- .
Согласно определению:
- ...
Утверждение: |
Автомат , построенный как прямое произведение автоматов и будет их пересечением. |
Возьмем слово , которое допускает автомат и автомат . Выпишем все состояния в порядке допуска слова автоматом — и все состояния проходимые при допуске слова автоматом — . Построим список пар , где . Данный список является списком состояний в процессе допуска слова автоматом , так как:
Следовательно автомат Возьмем слово допускает слова, которые допускает автомат и автомат . , которое не допускает автомат или автомат , тогда или — нетерминальное состояние, следовательно . |
Применение
Изменив конструкцию, можно получить автомат, допускающий разность или объединение двух языков.
Объединение ДКА
Необходимо разрешать любую цепочку, удовлетворяющую первому или второму автомату, для этого сделаем терминальными следующие вершины
. Полученный автомат удовлетворяет нашим требованиям, так как попав в какое-либо состояние из или , цепочка будет удовлетворять первому или второму автомату соответственно.Разность ДКА
Рассмотрим автомат
, то есть автомат , в котором терминальные и нетерминальные состояния инвертированы, если в автомате было опущено «дьявольское состояние», его необходимо добавить и сделать терминальным. Очевидно, он допускает те и только те слова, которые не допускает автомат , а значит, задаёт язык .Заметим, что если
и — регулярные языки, то — так же регулярный.Следовательно, надо построить пересечение двух автоматов, предварительно инвертировав во втором терминальные и нетерминальные состояния. Заметим, что меняется только набор терминальных вершин, следовательно в итоговой конструкции произведения ДКА сделаем терминальными следующие вершины
.См. также
Источники информации
- Wikipedia — Deterministic finite automaton
- Lecture "Formal languages, automata and computation" : Carnegie Mellon University in Qatar
- Хопкрофт Д., Мотвани Р., Ульман Д. Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. — М.:Издательский дом «Вильямс», 2002. — С. 152-154.