Изменения

Перейти к: навигация, поиск

Детерминированные конечные автоматы

2588 байт добавлено, 19:20, 4 сентября 2022
м
rollbackEdits.php mass rollback
|id=допускает
|definition=
Будем говорить, что автомат '''допускает''' (англ. ''accept'') слово, если после окончания описанного выше процесса автомат окажется в допускающем состоянии.
}}
'''Замечание.''' Если в какой-то момент из текущего состояния нет перехода по считанному символу, то будем считать, что автомат не допускает данное слово. При реализации вместо отдельного рассмотрения данного случая иногда удобно вводить фиктивную нетерминальную '''''«дьявольскую вершину»''''' (также '''''тупиковое состояние''''', '''''сток'''''), из которой любой переход ведет в неё же саму, и заменить все несуществующие переходы на переходы в «дьявольскую вершину».
== Способы представления ==
* ===Диаграмма переходов — граф, вершины которого соответствуют состояниям автомата, а рёбра — переходам между состояниями.* Таблица переходов <tex>T (|Q| \times |\Sigma|)</tex>, дающая табличное представление функции <tex>\delta</tex>.===
== Примеры ==Диаграмма переходов — граф, вершины которого соответствуют состояниям автомата, а рёбра — переходам между состояниями.:<tex>\bigcirc</tex> — нетерминальное состояние,:<tex>\circledcirc</tex> — терминальное состояние,:Стрелка <tex>\downarrow</tex> указывает на начальное состояние.{| borderclass ="1wikitable" cellpadding!Пример!!Описание|-align="5center" cellspacing| style="0background-color:white;" style| [[Файл:Automata_Search.png|340px]]|Автомат для поиска образца в тексте для строки <tex>abbab</tex>.|-align="text-align:center" width=60%|style="background-color:#ffffffwhite;"| [[Файл:Finite state machine 1.png|250 px]]|Автомат, принимающий непустые строки из чередующихся символов ''<tex>a'' </tex> и ''<tex>b'',<br/tex><small>а) ,без «дьявольской вершины». |-align="center"| style="background-color:white;" | [[Файл:Finite state machine 2.png|200 px]]|Автомат, принимающий непустые строки из чередующихся символов <tex>a</tex> и <tex>b<br/tex>б) , с «дьявольской вершиной» . |-align="center"|} ===Таблица переходов=== Таблица переходов <tex>T (отмечена серым цветом|Q| \times |\Sigma|)</tex>, дающая табличное представление функции <tex>\delta</tex>.
<tex>M = (Q, \Sigma , \bigcircdelta, q_0, F)</tex> — нетерминальное состояние,где*<tex>Q = {S_1, S_2}<br/tex>,*<tex>\circledcircSigma = \{0, 1 \}</tex> — терминальное состояние.,*<tex>q_0 = S_1<br/tex>Стрелка ,*<tex>\downarrowF = {S_1}</tex> указывает на начальное состояние., *<tex>\delta</smalltex>{{---}} функция переходов, представленная таблицей::{|class="wikitable" border="1" style="backgroundborder-collapse:#ffffffcollapse"! !! <center><tex>0</tex></center> !! <center><tex>1</tex></center>|а)[[Файл:Finite state machine 1.png-!<tex>S_1</tex> |150 px]]<tex>S_2</tex> б)[[Файл:Finite state machine 2.png|200 px]]<tex>S_1</tex>
|-
!<tex>S_2</tex> |style="background:#ffffff"|[[Автомат для поиска образца в тексте]] для строки ''abbab''.<tex>S_1</tex> |style="background:#ffffff"|[[Файл:Automata_Search.png|340px]]<tex>S_2</tex>
|}
{{Определение
|definition=
'''Мгновенное описание''' ('''конфигурация''') (англ. ''snapshot'') {{---}} пара <tex>\langle q, \alpha \rangle</tex>, где <tex>q</tex> {{---}} текущее состояние, <tex>\alpha</tex> {{---}} оставшиеся символы.
}}
Будем говорить, что конфигурация <tex>\langle p, \beta \rangle</tex> выводима из <tex>\langle q, \alpha \rangle</tex> за 1 один шаг <tex>(\langle q, \alpha \rangle \vdash \langle p, \beta \rangle)</tex>, если:
* <tex>\alpha = c\beta</tex>,
* <tex>\delta (q, c)=p </tex>.
{{Определение
|definition=
Множество <tex>L(\mathcal{A})=\{\alpha| \mid \exists t \in T : \langle s, \alpha \rangle \vdash^* \langle t, \varepsilon \rangle\}</tex> называется '''языком автомата ''' (англ. ''automata's language'') <tex>\mathcal{A}</tex>.
}}
Иначе говоря, языком автомата является множество всех допускаемых им слов. Произвольный язык является автоматным, если существует ДКА, допускающий те и только те слова, которые принадлежат языку.
== Изоморфизм двух автоматов ==
{{Определение|definition=== Формулировка ==Автоматы называются '''изоморфными''' (англ. ''isomorphic''), если существует [[Отображения | биекция]] между их вершинами такая, что сохраняются все переходы, терминальные состояния соответствуют терминальным, а начальные {{---}} начальным.}}{{Задача|definition=
Задано два детерминированных конечных автомата. Определить, изоморфны ли они друг другу.
Гарантируется, что все состояния автоматов достижимы.
}}
=== Алгоритм ===
Будем проверять изоморфизм переходов для двух вершин(то есть Из определения следует, что если множество переходов по ребрам для двух вершин совпадаютавтоматы изоморфны, то такие вершины изоморфны). Тогда если соответствующие можно их состояния занумеровать одним способом так, что вершины из разных автоматов с одинаковыми номерами будут изоморфныравны — то есть в каждом из этих двух состояний существует переход в какое-то состояние с таким же номером, что и переход по этой же букве в другом состоянии. Поэтому мы можем зафиксировать какую-то два автомата изоморфны. Запустим обход нумерацию, например, в порядке [[Обход в глубину из стартовых , цвета вершин| обхода в глубину]] по символам в лексикографическом порядке и просто проверить состояния с одинаковыми номерами на равенство. Если все состояния будут равны, тогда две вершины изоморфныто автоматы будут равны, если множество переходов по ребрам для в нашем случае будет следовать изоморфизм двух вершин совпадают и концы соответствующих ребер изоморфныавтоматов. Этот алгоритм пройдет по всем веришнам и ребрамАсимптотика алгоритма совпадает с асимптотикой обхода в глубину, из этого следует время работы то есть <tex>O(N + M) </tex>, где <tex> N</tex> {{---}} суммарное число вершин в автоматах, <tex> M</tex> {{--- }} суммарное число ребер.
=== Псевдокод ===
* <tex> \mathtt {Transitions} </tex> {{---}} множество пар '''boolean''' dfs(Vertex u<tex>\langle a</tex>, <tex>T \rangle</tex> , где <tex> a \in \Sigma</tex>, Vertex v) <tex>T \in Q</tex> * <tex> \mathtt {Assotiations} </tex> {{---}} массив, где каждому состоянию первого автомата соответствует найденное состояние второго автомата. '''forboolean'''dfs(Transition e u.transitions) { : '''ifVertex''' (, v: '''notVertex''' v.transitions.contains(e)) {: visited[u] = ''true'return false''' <font color="green">// заметим, что достаточно только одного массива <tex>\mathtt{visited}</tex> на два автомата</font> } '''if''' (v.transitions.size terminal '''<>!=''' u.transitions.sizeterminal) { '''return ''' ''false''' } associations[u] = v '''boolean''' result = '''true''' '''for'''(Transition t <tex>\langle c, q \rangle</tex> : u.transitions) { '''Vertex ''' t1 = u.transitions.getgetVertex(tc) '''Vertex ''' t2 = v.transitions.getgetVertex(tc) '''if''' одна из вершин t1, t2 ''дьявольская'', а другая {{---}} нет '''return''' ''false'' '''if''' (visited[t1]) result = result '''and''' t2 '''==''' associations[t1] '''else''' result = result '''and''' dfs(t1, t2) }
'''return''' result
== См. также ==
* [[Недетерминированные конечные автоматы]]
* [[Автомат для поиска образца в текстеКнута-Морриса-Пратта]]* [[Суффиксный автомат]]
* [[Алгоритм Ахо-Корасик]]
* [[Теорема Клини (совпадение классов автоматных и регулярных языков)]]
== Источники информации==
* ''Хопкрофт Д., Мотвани Р., Ульман Д.'' Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. — М.:Издательский дом «Вильямс», 2002. — С. 61.— ISBN 5-8459-0261-4
* [[wikipedia:Deterministic_finite_automaton | Wikipedia {{---}} Deterministic_finite_automaton]]
* ''Lawson, Mark V. (2004). Finite automata''. Chapman and Hall/CRC. ISBN 1-58488-255-7.
* [[wikipedia:Deterministic finite automaton | Wikipedia {{---}} Deterministic finite automaton]]
[[Категория: Теория формальных языков]]
[[Категория: Автоматы и регулярные языки]]
1632
правки

Навигация