Локальные автоматы — различия между версиями
Строка 21: | Строка 21: | ||
{{Определение | {{Определение | ||
− | |definition= Автомат <tex>A</tex> называется '''локальным''' (англ. ''local | + | |definition= Автомат <tex>\mathcal{A}</tex> называется '''локальным''' (англ. ''local automaton'', ''Glushkov automaton''), если для любого <tex>c</tex> из <tex>\Sigma</tex> множество <tex>\{\delta(s, c) \mid s \in S\}</tex> содержит не более одного элемента. |
}} | }} | ||
{{Определение | {{Определение | ||
− | |definition= | + | |definition=Локальный автомат <tex>\mathcal{A}</tex> называется '''стандартным локальным''' автоматом (англ. ''standard local automation''), если в нем нет перехода в начальное состояние. |
}} | }} | ||
Строка 39: | Строка 39: | ||
<tex>\Rightarrow</tex> | <tex>\Rightarrow</tex> | ||
− | Пусть <tex>G</tex> {{---}} граф Майхилла. | + | :Пусть <tex>G</tex> {{---}} граф Майхилла. |
− | Построим автомат <tex>A</tex> следующим образом: | + | :Построим автомат <tex>A</tex> следующим образом: |
− | * Добавим вершину <tex>\Diamond</tex> в <tex>G</tex> с ребрами от <tex>\Diamond</tex> к каждой стартовой вершине <tex>G</tex>; отметим вершину <tex>\Diamond</tex> как стартовое состояние. | + | :* Добавим вершину <tex>\Diamond</tex> в <tex>G</tex> с ребрами от <tex>\Diamond</tex> к каждой стартовой вершине <tex>G</tex>; отметим вершину <tex>\Diamond</tex> как стартовое состояние. |
− | * Отметим конечные вершины как терминальные состояния. | + | :* Отметим конечные вершины как терминальные состояния. |
− | * Отметим каждое ребро результирующего ориентированного графа символом, стоящим в вершине, на которою оно указывает. | + | :* Отметим каждое ребро результирующего ориентированного графа символом, стоящим в вершине, на которою оно указывает. |
− | Переходы преобразуются следующим образом: [[Файл:Myhill1.png|150px]] | + | :Переходы преобразуются следующим образом: [[Файл:Myhill1.png|150px]] |
− | По построению стартовое состояние не является терминальным. | + | :По построению стартовое состояние не является терминальным. |
− | Покажем, что полученный автомат конечен. | + | :Покажем, что полученный автомат конечен. |
− | Ребра, выходящие из стартового состояния обозначены различными символами, потому что они указывают на вершины, которые, по свойству 3, были отмечены различными символами в исходном автомате. | + | :Ребра, выходящие из стартового состояния обозначены различными символами, потому что они указывают на вершины, которые, по свойству 3, были отмечены различными символами в исходном автомате. |
− | Если мы рассмотрим любое другое состояние <tex>s</tex>, то два перехода из <tex>s</tex> могут иметь одинаковые метки только в том случае, если в <tex>G</tex> оба ориентированных ребра идут в одну и ту же вершину. Но этого не может быть по свойтсву 1. | + | :Если мы рассмотрим любое другое состояние <tex>s</tex>, то два перехода из <tex>s</tex> могут иметь одинаковые метки только в том случае, если в <tex>G</tex> оба ориентированных ребра идут в одну и ту же вершину. Но этого не может быть по свойтсву 1. |
− | То есть <tex>A</tex> {{---}} [[Детерминированные_конечные_автоматы | ДКА]]. По построению он является стандартным локальным автоматом. | + | :То есть <tex>A</tex> {{---}} [[Детерминированные_конечные_автоматы | ДКА]]. По построению он является стандартным локальным автоматом. |
− | Теперь просто проверить, что <tex>L(A) = L(G)</tex>. | + | :Теперь просто проверить, что <tex>L(A) = L(G)</tex>. |
<tex>\Leftarrow</tex> | <tex>\Leftarrow</tex> | ||
− | Пусть <tex>A = (S, \Sigma, i, \delta, T)</tex> {{---}} стандартный локальный автомат, стартовое состояние которого не является терминальным. | + | :Пусть <tex>A = (S, \Sigma, i, \delta, T)</tex> {{---}} стандартный локальный автомат, стартовое состояние которого не является терминальным. |
− | Построим по нему граф Майхилла следующим образом: | + | :Построим по нему граф Майхилла следующим образом: |
− | * Отметим все состояния <tex>A</tex>, кроме стартового, <tex>input</tex> символами, стоящими на ребрах, входящих в эти состояния. | + | :* Отметим все состояния <tex>A</tex>, кроме стартового, <tex>input</tex> символами, стоящими на ребрах, входящих в эти состояния. |
− | * Сотрем все метки на ребрах <tex>A</tex>. | + | :* Сотрем все метки на ребрах <tex>A</tex>. |
− | * Отметим все состояния <tex>s</tex> как начальные вершины, если существует переход из <tex>i</tex> в <tex>s</tex> | + | :* Отметим все состояния <tex>s</tex> как начальные вершины, если существует переход из <tex>i</tex> в <tex>s</tex> |
− | * Отметим все терминальные состояния как конечные вершины. | + | :* Отметим все терминальные состояния как конечные вершины. |
− | * Удалим вершину <tex>i</tex> и все ребра, исходящие из нее. | + | :* Удалим вершину <tex>i</tex> и все ребра, исходящие из нее. |
− | Назовем полученный граф <tex>G</tex> {{---}} он будет графом Майхилла по построению. Легко проверить, что <tex>L(G) = L(A)</tex>. | + | :Назовем полученный граф <tex>G</tex> {{---}} он будет графом Майхилла по построению. Легко проверить, что <tex>L(G) = L(A)</tex>. |
}} | }} | ||
Строка 72: | Строка 72: | ||
|} | |} | ||
− | Граф, изображенный на рисунке 1 может быть использован для распознавания строк над алфавитом <tex>\Sigma = \{a, b\}</tex>. По определению, язык, распознаваемый данным графом, состоит из непустых строк, начинающихся и заканчивающихся на <tex>a</tex>. | + | Граф Майхилла, изображенный на рисунке 1 может быть использован для распознавания строк над алфавитом <tex>\Sigma = \{a, b\}</tex>. По определению, язык, распознаваемый данным графом, состоит из непустых строк, начинающихся и заканчивающихся на <tex>a</tex>. |
− | + | Недетерминированный автомат на рисунке 2 является локальным автоматом и распознает тот же самый язык. | |
− | |||
==Локальный язык== | ==Локальный язык== |
Версия 14:29, 14 января 2017
Содержание
Описание
Определение: |
Граф Майхилла ориентированный граф, удовлетворяющий свойствам:
| (над алфавитом ) (англ. Myhill graph) —
Пусть — граф Майхилла над алфавитом .
Символ
назовем разрешенным, если им помечена вершина, являющая одновременно начальной и конечной.Не пустая строка
из длиной не менее двух символов, называется разрешенной, если символом отмечена стартовая вершина, а символом — конечная, и для всех в существует ребро .Язык
, распознаваемый графом Майхилла, состоит из всех разрешенных строк из .Покажем, что графы Майхилла могут быть представлены в виде автоматов. Пусть ДКА.
—
Определение: |
Автомат | называется локальным (англ. local automaton, Glushkov automaton), если для любого из множество содержит не более одного элемента.
Определение: |
Локальный автомат | называется стандартным локальным автоматом (англ. standard local automation), если в нем нет перехода в начальное состояние.
Таким образом, автомат является локальным, если для каждого из нет переходов, отмеченных , или если все они ведут в одно состояние.
Покажем, что граф Майхилла может быть преобразован в стандартный локальный автомат таким образом, что распознаваемый им язык не изменится.
Теорема: |
Язык распознается графом Майхилла тогда и только тогда, когда он распознается стандартным локальным автоматом, стартовое состояние которого не является терминальным. |
Доказательство: |
|
Пример
Граф Майхилла, изображенный на рисунке 1 может быть использован для распознавания строк над алфавитом
. По определению, язык, распознаваемый данным графом, состоит из непустых строк, начинающихся и заканчивающихся на .Недетерминированный автомат на рисунке 2 является локальным автоматом и распознает тот же самый язык.
Локальный язык
Рассмотрим язык, распознаваемый стандартным локальным автоматом.
Определение: |
Язык . | называется локальным языком (англ. local language), если может быть описан следующим образом:
Другими словами, непустое слово принадлежит локальному языку, если оно начинается с символа из , оканчивается на символ из и не содержит пары символов из множества .
Пусть
— локальный язык. Определим автомат следующим образом:- набор состояний ,
- начальное состояние ,
- терминальные состояния ,
- если и если .
Если
содержит пустую строку, то множество терминальных состояний — .Утверждение: |
Автомат – стандартный локальный автомат, распознающий . |
Утверждение: |
Язык, распознаваемый локальным автоматом, является локальным. |
Алгоритм Глушкова
Описание
Дано регулярное выражение
. Алгоритм Глушкова строит недетерминированный автомат, который распознает язык , распознаваемый . Построение происходит в несколько шагов:- Линеаризация регулярного выражения. Каждый символ из алфавита, содержащийся в регулярном выражении, переименовывается таким образом, что каждый символ содержится в новом регулярном выражении не более одного раза. Пусть — исходный алфавит, — новый алфавит.
- Вычисление множеств
,
,
.
, где — линеаризованное регулярное выражение. — множество символов, с которых начинается слово из . — множество символов, на которые оканчивается слово из и — множество пар символов, которые встречаются в слове из . Более формально: - Вычисление множества такого что .
- Вычисление локального языка с заданными множествами и построение по нему автомата.
- Делинеаризация, переименование каждого символа из в соответствующий ему символ из .
Пример работы
Рассмотрим регулярное выражение
.1. Линеаризуем его путем добавления индекса к каждому символу:
- .
2. Составим множества
, , и :- .
Так как пустое слово принадлежит языку, то
.3. Автомат локального языка
В построенном автомате существует переход из (соответствующего пустой строке) в два состояния из , переход из в если , три состояния терминальные (как и состояние ).
4. Получим автомат для
, удалив индексы, добавленные на первом этапе.См. также
Источники информации
- Хопкрофт Д., Мотвани Р., Ульман Д. — Введение в теорию автоматов, языков и вычислений
- Mark V. Lawson — Finite Automata
- Wikipedia — Glushkov's construction algorithm