Изменения

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

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

401 байт добавлено, 19:20, 4 сентября 2022
м
rollbackEdits.php mass rollback
Диаграмма переходов — граф, вершины которого соответствуют состояниям автомата, а рёбра — переходам между состояниями.
 {| border="1" cellpadding="5" cellspacing="0" style="text-align:center" width=60%|style="background:#ffffff" colspan="2"|Автомат, принимающий непустые строки из чередующихся символов <tex>a\bigcirc</tex> и — нетерминальное состояние,:<tex>b\circledcirc</tex>— терминальное состояние,<br/>|style="background:#ffffff"| Автомат для поиска образца в тексте для строки Стрелка <tex>abbab\downarrow</tex>указывает на начальное состояние.{|-|styleclass ="background:#ffffffwikitable"| без «дьявольской вершины» !Пример!!Описание|style-align="background:#ffffffcenter"| с «дьявольской вершиной» |style="background-color:#ffffff" rowspan="2white;"|[[Файл:Automata_Search.png|340px]]|Автомат для поиска образца в тексте для строки <tex>abbab</tex>.|-align="center"|style="background-color:#ffffffwhite;"|[[Файл:Finite state machine 1.png|150 250 px]]|Автомат, принимающий непустые строки из чередующихся символов <tex>a</tex> и <tex>b</tex>,без «дьявольской вершины». |-align="center"|style="background-color:#ffffffwhite;"|[[Файл:Finite state machine 2.png|200 px]]|-|style="background:#ffffff" colspan="3"|Автомат, принимающий непустые строки из чередующихся символов <tex>\bigcirca</tex> — нетерминальное состояние,и <tex>\circledcircb</tex> — терминальное состояние, с «дьявольской вершиной».Стрелка <tex>\downarrow</tex> указывает на начальное состояние.|-align="center"
|}
*<tex>F = {S_1}</tex>,
*<tex>\delta</tex> {{---}} функция переходов, представленная таблицей:
:{| borderclass="1wikitable" cellpaddingborder="1" cellspacingstyle="0border-collapse:collapse"| || ! !! <center><tex>0</tex></center> || !! <center><tex>1</tex></center>
|-
|!<tex>S_1</tex> || <tex>S_2</tex> || <tex>S_1</tex>
|-
|!<tex>S_2</tex> || <tex>S_1</tex> || <tex>S_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)
== См. также ==
* [[Недетерминированные конечные автоматы]]
* [[Автомат для поиска образца в текстеКнута-Морриса-Пратта]]* [[Суффиксный автомат]]
* [[Алгоритм Ахо-Корасик]]
* [[Теорема Клини (совпадение классов автоматных и регулярных языков)]]
1632
правки

Навигация