Изменения

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

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

959 байт добавлено, 19:35, 10 января 2020
Нет описания правки
== Способы представления ==
* ===Диаграмма переходов — граф, вершины которого соответствуют состояниям автомата, а рёбра — переходам между состояниями.* Таблица переходов <tex>T (|Q| \times |\Sigma|)</tex>, дающая табличное представление функции <tex>\delta</tex>.===
Диаграмма переходов — граф, вершины которого соответствуют состояниям автомата, а рёбра — переходам между состояниями.:<tex>\bigcirc</tex> — нетерминальное состояние,:<tex>\circledcirc</tex> — терминальное состояние,:Стрелка <tex>\downarrow</tex> указывает на начальное состояние.{| class ="wikitable" !Пример!!Описание|-align= Примеры "center"| style="background-color:white;" | [[Файл:Automata_Search.png|340px]]|Автомат для поиска образца в тексте для строки <tex>abbab</tex>.|-align="center"| style="background-color:white;" | [[Файл:Finite state machine 1.png|250 px]]|Автомат, принимающий непустые строки из чередующихся символов <tex>a</tex> и <tex>b</tex>,без «дьявольской вершины». |-align="center"| style="background-color:white;" | [[Файл:Finite state machine 2.png|200 px]]|Автомат, принимающий непустые строки из чередующихся символов <tex>a</tex> и <tex>b</tex>, с «дьявольской вершиной». |-align="center"|} ===Таблица переходов=== Таблица переходов <tex>T (|Q| \times |\Sigma|)</tex>, дающая табличное представление функции <tex>\delta</tex>.
{| border<tex>M ="1" cellpadding="5" cellspacing="0" style="text-align:center" width=60%(Q, \Sigma , \delta, q_0, F)</tex>, где|style*<tex>Q ="background:#ffffff" colspan="2"|Автомат{S_1, S_2}</tex>, принимающий непустые строки из чередующихся символов *<tex>a\Sigma = \{0, 1 \}</tex> и ,*<tex>bq_0 = S_1</tex>,*<tex>F = {S_1}<br/tex>, |style="background:#ffffff"| Автомат для поиска образца в тексте для строки *<tex>abbab\delta</tex>.|{{---}} функция переходов, представленная таблицей::{|styleclass="background:#ffffffwikitable"| без «дьявольской вершины» |styleborder="background:#ffffff1"| с «дьявольской вершиной» |style="backgroundborder-collapse:#ffffffcollapse" rowspan="2"|[[Файл:Automata_Search.png|340px]]! !! <center><tex>0</tex></center> !! <center><tex>1</tex></center>
|-
!<tex>S_1</tex> |style="background:#ffffff"|[[Файл:Finite state machine 1.png|150 px]]<tex>S_2</tex> |style="background:#ffffff"|[[Файл:Finite state machine 2.png|200 px]]<tex>S_1</tex>
|-
|style="background:#ffffff" colspan="3"|!<tex>\bigcircS_2</tex> — нетерминальное состояние,| <tex>\circledcircS_1</tex> — терминальное состояние.Стрелка | <tex>\downarrowS_2</tex> указывает на начальное состояние.
|}
{{Определение
|definition=
Автоматы называются '''изоморфными''' (англ. ''isomorphic''), если существует [[Отображения | биекция]] между их вершинами такая, что сохраняются все переходы, терминальные состояния соответствуют терминальным, а начальные {{---}} начальным.
}}
{{Задача
=== Псевдокод ===
* <tex> \mathtt {Transitions} </tex> {{---}} множество пар <tex>\langle a</tex>, <tex>T \rangle</tex> , где <tex> a \in \Sigma</tex>, <tex>T \in Q</tex>
* <tex> \mathtt {Assotiations} </tex> {{---}} массив, где каждому состоянию первого автомата соответствует найденное состояние второго автомата.
'''boolean''' dfs(u: '''Vertex''', v: '''Vertex'''):
visited[u] = ''true'' <font color="green">// заметим, что достаточно только одного массива <tex>\mathtt{visited}</tex> на два автомата</font>
'''if''' (v.terminal '''!=''' u.terminal)
'''return''' ''false''
associations[u] = v
'''boolean''' result = ''true''
'''for''' (<tex>\langle c, q \rangle</tex> : u.transitions)
'''if''' одна из вершин t1, t2 ''дьявольская'', а другая {{---}} нет
'''return''' ''false''
'''if''' (visited[t1]) result = result '''and'not''t2 ' visited''==''' associations[t1]) '''else'''
result = result '''and''' dfs(t1, t2)
== См. также ==
* [[Недетерминированные конечные автоматы]]
* [[Автомат для поиска образца в текстеКнута-Морриса-Пратта]]* [[Суффиксный автомат]]
* [[Алгоритм Ахо-Корасик]]
* [[Теорема Клини (совпадение классов автоматных и регулярных языков)]]
Анонимный участник

Навигация