Локальные автоматы — различия между версиями
Vsklamm (обсуждение | вклад) м (→Описание) |
м (rollbackEdits.php mass rollback) |
||
| (не показаны 4 промежуточные версии 2 участников) | |||
| Строка 114: | Строка 114: | ||
Дано регулярное выражение <tex>e</tex>. Алгоритм Глушкова строит недетерминированный автомат, который распознает язык <tex>L(e)</tex>, распознаваемый <tex>e</tex>. Построение происходит в несколько шагов: | Дано регулярное выражение <tex>e</tex>. Алгоритм Глушкова строит недетерминированный автомат, который распознает язык <tex>L(e)</tex>, распознаваемый <tex>e</tex>. Построение происходит в несколько шагов: | ||
| − | + | * Линеаризация регулярного выражения. Каждый символ из алфавита, содержащийся в регулярном выражении, переименовывается таким образом, что каждый символ содержится в новом регулярном выражении не более одного раза. Пусть <tex>A</tex> {{---}} исходный алфавит, <tex>B</tex> {{---}} новый алфавит. | |
| − | + | * Вычисление множеств <tex>P(e'), S(e'), N(e')</tex>, где <tex>e'</tex> {{---}} линеаризованное регулярное выражение. <tex>P(e')</tex> {{---}} множество символов, с которых начинается слово из <tex>L(e')</tex>. <tex>S(e')</tex> {{---}} множество символов, на которые оканчивается слово из <tex>L(e')</tex> и <tex>N(e')</tex> {{---}} множество пар символов, которые встречаются в слове из <tex>L(e')</tex>. Более формально: <br><tex>P(e')=\{a\in B\mid aB^*\cap L(e')\ne\emptyset\}</tex>,<br><tex>S(e')=\{a\in B\mid B^*a\cap L(e')\ne\emptyset\}</tex>,<br><tex>N(e')=\{u\in B^2\mid B^*uB^*\cap L(e')\ne\emptyset\}</tex>. | |
| − | + | * Вычисление множества <tex>\Lambda(e')</tex> такого что <tex>\Lambda(e')=\{\varepsilon\}\cap L(e')</tex>. | |
| − | + | * Вычисление локального языка с заданными множествами и построение по нему автомата. | |
| − | + | * Делинеаризация, переименование каждого символа из <tex>B</tex> в соответствующий ему символ из <tex>A</tex>. | |
===Пример работы=== | ===Пример работы=== | ||
[[Файл:Glushkov_lin_automata.jpg|frame|right|Автомат, построенный в ходе работы алгоритма Глушкова]] | [[Файл:Glushkov_lin_automata.jpg|frame|right|Автомат, построенный в ходе работы алгоритма Глушкова]] | ||
| − | Рассмотрим регулярное выражение <tex>e = (a(ab)^*)^* + (ba)^*</tex> | + | Рассмотрим регулярное выражение <tex>e = (a(ab)^*)^* + (ba)^*</tex>: |
| − | + | * Линеаризуем его путем добавления индекса к каждому символу: | |
:<tex>e'=(a_1(a_2b_3)^*)^*+(b_4a_5)^*</tex>. | :<tex>e'=(a_1(a_2b_3)^*)^*+(b_4a_5)^*</tex>. | ||
| − | + | * Составим множества <tex>P</tex>, <tex>S</tex>, и <tex>N</tex>: | |
:<tex>P(e')=\{a_1,b_4\}</tex>,<br /> | :<tex>P(e')=\{a_1,b_4\}</tex>,<br /> | ||
:<tex>S(e')=\{a_1,b_3,a_5\}</tex>,<br /> | :<tex>S(e')=\{a_1,b_3,a_5\}</tex>,<br /> | ||
| Строка 139: | Строка 139: | ||
Так как пустое слово принадлежит языку, то <math>\Lambda(e')=\{\varepsilon\}</math>. | Так как пустое слово принадлежит языку, то <math>\Lambda(e')=\{\varepsilon\}</math>. | ||
| − | + | * Автомат локального языка <tex>L'=P'B^*\cap B^*S'\setminus B^*(B^2\setminus N')B^*</tex> содержит начальное состояние, обозначенное как <tex>1</tex>, и состояния для каждого из пяти символов алфавита <tex>B=\{a_1, a_2, b_3, b_4, a_5\}</tex>.<br> | |
В построенном автомате существует переход из <tex>1</tex> (соответствующего пустой строке) в два состояния из <tex>P'</tex>, переход из <tex>a</tex> в <tex>b</tex> если <tex>ab \in N'</tex>, три состояния <math>S'</math> терминальные (как и состояние <tex>1</tex>). | В построенном автомате существует переход из <tex>1</tex> (соответствующего пустой строке) в два состояния из <tex>P'</tex>, переход из <tex>a</tex> в <tex>b</tex> если <tex>ab \in N'</tex>, три состояния <math>S'</math> терминальные (как и состояние <tex>1</tex>). | ||
| − | + | * Получим автомат для <tex>L(e)</tex>, удалив индексы, добавленные на первом этапе. | |
== См. также == | == См. также == | ||
Текущая версия на 19:11, 4 сентября 2022
Описание
| Определение: |
Граф Майхилла (над алфавитом ) (англ. Myhill graph) — ориентированный граф, удовлетворяющий свойствам:
|
Пусть — граф Майхилла над алфавитом .
Символ назовем разрешенным, если им помечена вершина, являющая одновременно начальной и конечной.
Не пустая строка из длиной не менее двух символов, называется разрешенной, если символом отмечена стартовая вершина, а символом — конечная, и для всех в существует ребро .
Язык , распознаваемый графом Майхилла, состоит из всех разрешенных строк из .
Покажем, что графы Майхилла могут быть представлены в виде автоматов. Пусть — ДКА.
| Определение: |
| Автомат называется локальным (англ. local automaton, Glushkov automaton), если для любого из множество содержит не более одного элемента. |
| Определение: |
| Локальный автомат называется стандартным локальным автоматом (англ. standard local automation), если в нем нет перехода в начальное состояние. |
Таким образом, автомат является локальным, если для каждого из нет переходов, отмеченных , или если все они ведут в одно состояние.
Покажем, что граф Майхилла может быть преобразован в стандартный локальный автомат таким образом, что распознаваемый им язык не изменится.
| Теорема: |
Язык распознается графом Майхилла тогда и только тогда, когда он распознается стандартным локальным автоматом, стартовое состояние которого не является терминальным. |
| Доказательство: |
|
|
Пример
Граф Майхилла, изображенный на рисунке 1 может быть использован для распознавания строк над алфавитом . По определению, язык, распознаваемый данным графом, состоит из непустых строк, начинающихся и заканчивающихся на .
Недетерминированный автомат на рисунке 2 является локальным автоматом и распознает тот же самый язык.
Локальный язык
Рассмотрим язык, распознаваемый стандартным локальным автоматом.
| Определение: |
| Язык называется локальным языком (англ. local language), если может быть описан следующим образом: |
Другими словами, непустое слово принадлежит локальному языку, если оно начинается с символа из , оканчивается на символ из и не содержит пары символов из множества .
Пусть — локальный язык. Определим автомат следующим образом:
- набор состояний ,
- начальное состояние ,
- терминальные состояния ,
- если и если .
Если содержит пустую строку, то множество терминальных состояний — .
| Утверждение: |
Определенный таким образом автомат — стандартный локальный автомат, распознающий . |
|
Автомат является локальным поскольку для каждого состояния и любого символа либо неопределена либо равна . По построению автомат является стандартным. Покажем, что .
Здесь — терминальное состояние, . Переход из в определен, поэтому . Для каждого факт, что переход существует, означает что . Следовательно, . Пусть . Тогда , и для каждого . Следовательно в автомате существует путь из начального состояния в терминальное:
|
| Утверждение: |
Язык, распознаваемый локальным автоматом, является локальным. |
Алгоритм Глушкова
Описание
Дано регулярное выражение . Алгоритм Глушкова строит недетерминированный автомат, который распознает язык , распознаваемый . Построение происходит в несколько шагов:
- Линеаризация регулярного выражения. Каждый символ из алфавита, содержащийся в регулярном выражении, переименовывается таким образом, что каждый символ содержится в новом регулярном выражении не более одного раза. Пусть — исходный алфавит, — новый алфавит.
- Вычисление множеств , где — линеаризованное регулярное выражение. — множество символов, с которых начинается слово из . — множество символов, на которые оканчивается слово из и — множество пар символов, которые встречаются в слове из . Более формально:
,
,
.
- Вычисление множества такого что .
- Вычисление локального языка с заданными множествами и построение по нему автомата.
- Делинеаризация, переименование каждого символа из в соответствующий ему символ из .
Пример работы
Рассмотрим регулярное выражение :
- Линеаризуем его путем добавления индекса к каждому символу:
- .
- Составим множества , , и :
- ,
- ,
- .
Так как пустое слово принадлежит языку, то .
- Автомат локального языка содержит начальное состояние, обозначенное как , и состояния для каждого из пяти символов алфавита .
В построенном автомате существует переход из (соответствующего пустой строке) в два состояния из , переход из в если , три состояния терминальные (как и состояние ).
- Получим автомат для , удалив индексы, добавленные на первом этапе.
См. также
Источники информации
- Хопкрофт Д., Мотвани Р., Ульман Д. — Введение в теорию автоматов, языков и вычислений
- Mark V. Lawson — Finite Automata
- Wikipedia — Glushkov's construction algorithm
