Детерминированные конечные автоматы — различия между версиями
(→Псевдокод) |
(→Процесс допуска) |
||
Строка 9: | Строка 9: | ||
|id=допускает | |id=допускает | ||
|definition= | |definition= | ||
− | Будем говорить, что автомат '''допускает''' слово, если после окончания описанного выше процесса автомат окажется в допускающем состоянии. | + | Будем говорить, что автомат '''допускает''' (англ. ''accept'') слово, если после окончания описанного выше процесса автомат окажется в допускающем состоянии. |
}} | }} | ||
'''Замечание.''' Если в какой-то момент из текущего состояния нет перехода по считанному символу, то будем считать, что автомат не допускает данное слово. При реализации вместо отдельного рассмотрения данного случая иногда удобно вводить фиктивную нетерминальную '''''«дьявольскую вершину»''''' (также '''''тупиковое состояние''''', '''''сток'''''), из которой любой переход ведет в неё же саму, и заменить все несуществующие переходы на переходы в «дьявольскую вершину». | '''Замечание.''' Если в какой-то момент из текущего состояния нет перехода по считанному символу, то будем считать, что автомат не допускает данное слово. При реализации вместо отдельного рассмотрения данного случая иногда удобно вводить фиктивную нетерминальную '''''«дьявольскую вершину»''''' (также '''''тупиковое состояние''''', '''''сток'''''), из которой любой переход ведет в неё же саму, и заменить все несуществующие переходы на переходы в «дьявольскую вершину». |
Версия 23:03, 1 декабря 2014
Определение: |
Детерминированный конечный автомат (ДКА) (англ. deterministic finite automaton (DFA)) — набор из пяти элементов | , где — алфавит (англ. alphabet), — множество состояний (англ. finite set of states), — начальное (стартовое) состояние (англ. start state), — множество допускающих состояний (англ. set of accept states), — функция переходов (англ. transition function).
Содержание
Процесс допуска
Изначально автомат находится в стартовом состоянии
. Автомат считывает символы по очереди. При считывании очередного символа автомат переходит в состояние , где — текущее состояние автомата. Процесс продолжается до тех пор, пока не будет достигнут конец входного слова.Определение: |
Будем говорить, что автомат допускает (англ. accept) слово, если после окончания описанного выше процесса автомат окажется в допускающем состоянии. |
Замечание. Если в какой-то момент из текущего состояния нет перехода по считанному символу, то будем считать, что автомат не допускает данное слово. При реализации вместо отдельного рассмотрения данного случая иногда удобно вводить фиктивную нетерминальную «дьявольскую вершину» (также тупиковое состояние, сток), из которой любой переход ведет в неё же саму, и заменить все несуществующие переходы на переходы в «дьявольскую вершину».
Способы представления
- Диаграмма переходов — граф, вершины которого соответствуют состояниям автомата, а рёбра — переходам между состояниями.
- Таблица переходов , дающая табличное представление функции .
Примеры
Автомат, принимающий непустые строки из чередующихся символов a и b, а) без «дьявольской вершины»,
|
а) |
Автомат для поиска образца в тексте для строки abbab. |
Автоматные языки
Определение: |
Мгновенное описание (конфигурация) (англ. snapshot) — пара | , где — текущее состояние, — оставшиеся символы.
Будем говорить, что конфигурация
выводима из за один шаг , если:- ,
- .
Будем говорить, что конфигурация
выводима из за конечное число шагов , если- ,
- .
Лемма: |
. |
Доказательство: |
Определение: |
Множество | называется языком автомата (англ. automata's language) .
Иначе говоря, языком автомата является множество всех допускаемых им слов. Произвольный язык является автоматным, если существует ДКА, допускающий те и только те слова, которые принадлежат языку.
Определение: |
Множество языков всех ДКА образует множество автоматных языков | .
Изоморфизм двух автоматов
Определение: |
Автоматы называются изоморфными (англ. isomorphic), если существует биекция между их вершинами такая, что сохраняются все переходы, терминальные состояния соответствуют терминальным, начальные — начальным |
Задача: |
Задано два детерминированных конечных автомата. Определить, изоморфны ли они друг другу. Гарантируется, что все состояния автоматов достижимы. |
Алгоритм
Будем проверять множества переходов для двух вершин. Запустим обход в глубину из стартовых вершин, если множество переходов по ребрам для двух вершин совпадают и также это выполнено для вершин соответствующим концам ребер (если у нас соответствующие вершины дьявольские, то множество переходов считаем равными) то два автомата изоморфны. Заметим, что если мы рассмотрим два автомата состоящих из пройденных вершин, то эти два автомата будут изоморфны (из этого следует, что на когда мы обойдем все вершины, это тоже будет выполнено). Этот алгоритм пройдет по всем вершинам и ребрам ровно один раз, из этого следует время работы , где — суммарное число вершин в автоматах, — суммарное число ребер.
Псевдокод
— множество пар , , где ,
boolean dfs(Vertex u, Vertex v) visited1[u] = true visited2[v] = true if (v.transitions.size != u.transitions.size) return false if (v.terminal != u.terminal) return false for (Transition e : u.transitions) char symbol = e.getSymbol() if (not v.transitions.existTransition(symbol)) return false boolean result = true for (Transition t : u.transitions) char symbol = t.getSymbol() Vertex t1 = u.transitions.getVertex(symbol) Vertex t2 = v.transitions.getVertex(symbol) if (visited1[t1] != visited2[t2]) return false if (!visited1[t1] && !visited2[t2]) result = result and dfs(t1, t2) return result
См. также
- Недетерминированные конечные автоматы
- Автомат для поиска образца в тексте
- Алгоритм Ахо-Корасик
- Теорема Клини (совпадение классов автоматных и регулярных языков)
Источники информации
- Хопкрофт Д., Мотвани Р., Ульман Д. Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. — М.:Издательский дом «Вильямс», 2002. — С. 61.— ISBN 5-8459-0261-4
- Lawson, Mark V. (2004). Finite automata. Chapman and Hall/CRC. ISBN 1-58488-255-7.
- Wikipedia — Deterministic finite automaton