Недетерминированные конечные автоматы — различия между версиями
(→Псевдокод) |
м (rollbackEdits.php mass rollback) |
||
| (не показано 5 промежуточных версий 3 участников) | |||
| Строка 9: | Строка 9: | ||
НКА допускает слово <tex> \alpha </tex>, если существует путь из начального состояния в какое-то терминальное, такое что буквы, выписанные с переходов на этом пути по порядку, образуют слово <tex> \alpha </tex>. | НКА допускает слово <tex> \alpha </tex>, если существует путь из начального состояния в какое-то терминальное, такое что буквы, выписанные с переходов на этом пути по порядку, образуют слово <tex> \alpha </tex>. | ||
Теперь это опишем более формально. | Теперь это опишем более формально. | ||
| − | |||
{{Определение | {{Определение | ||
|definition = | |definition = | ||
'''Мгновенное описание''' (англ. ''snapshot'') {{---}} пара <tex> \langle p, q \rangle </tex>, <tex> p \in Q </tex>, <tex> q \in \Sigma^*</tex>. | '''Мгновенное описание''' (англ. ''snapshot'') {{---}} пара <tex> \langle p, q \rangle </tex>, <tex> p \in Q </tex>, <tex> q \in \Sigma^*</tex>. | ||
}} | }} | ||
| − | |||
Определим некоторые операции для мгновенных описаний. | Определим некоторые операции для мгновенных описаний. | ||
{{Определение | {{Определение | ||
| Строка 23: | Строка 21: | ||
Это также записывают так: <tex>\langle q, \alpha \rangle \vdash \langle p, \beta \rangle</tex>. | Это также записывают так: <tex>\langle q, \alpha \rangle \vdash \langle p, \beta \rangle</tex>. | ||
}} | }} | ||
| − | |||
{{Определение | {{Определение | ||
|definition = | |definition = | ||
| − | Рефлексивно-транзитивное замыкание отношения <tex> \vdash </tex> обозначается как <tex> \vdash^*</tex>. <br> | + | [[Транзитивное замыкание#Рефлексивно-транзитивное замыкание | Рефлексивно-транзитивное замыкание]] отношения <tex> \vdash </tex> обозначается как <tex> \vdash^*</tex>. <br> |
И говорят, что <tex> \langle p, \beta \rangle</tex> '''выводится за ноль и более шагов''' (англ. ''yields'') из <tex>\langle q, \alpha \rangle </tex>, если <tex>\langle q, \alpha \rangle \vdash^* \langle p, \beta \rangle</tex>. | И говорят, что <tex> \langle p, \beta \rangle</tex> '''выводится за ноль и более шагов''' (англ. ''yields'') из <tex>\langle q, \alpha \rangle </tex>, если <tex>\langle q, \alpha \rangle \vdash^* \langle p, \beta \rangle</tex>. | ||
<!--Говорят, что <tex> \langle p, \beta \rangle</tex> '''выводится за ноль и более шагов''' (англ. ''yields'') из <tex>\langle q, \alpha \rangle </tex>, если <tex>\exists c_1, c_2 \ldots c_n</tex>: | <!--Говорят, что <tex> \langle p, \beta \rangle</tex> '''выводится за ноль и более шагов''' (англ. ''yields'') из <tex>\langle q, \alpha \rangle </tex>, если <tex>\exists c_1, c_2 \ldots c_n</tex>: | ||
| Строка 32: | Строка 29: | ||
<!--Это также записывают так: <tex>\langle q, \alpha \rangle \vdash^* \langle p, \beta \rangle</tex>. --> | <!--Это также записывают так: <tex>\langle q, \alpha \rangle \vdash^* \langle p, \beta \rangle</tex>. --> | ||
}} | }} | ||
| − | |||
| − | |||
{{Определение | {{Определение | ||
|definition = | |definition = | ||
НКА '''допускает''' (англ. ''accepts'') слово <tex>\alpha</tex>, если <tex>\exists t \in T: \langle s, \alpha \rangle \vdash^* \langle t, \varepsilon \rangle</tex>. | НКА '''допускает''' (англ. ''accepts'') слово <tex>\alpha</tex>, если <tex>\exists t \in T: \langle s, \alpha \rangle \vdash^* \langle t, \varepsilon \rangle</tex>. | ||
}} | }} | ||
| − | |||
== Язык автомата == | == Язык автомата == | ||
| Строка 69: | Строка 63: | ||
<tex> \langle s, \alpha \rangle \vdash^* \langle p, \varepsilon \rangle \Rightarrow \langle s, \alpha c \rangle \vdash^* \langle p, c \rangle \vdash \langle q, \varepsilon \rangle \Rightarrow \langle s, \alpha c \rangle \vdash^* \langle q, \varepsilon \rangle </tex>, <tex> \forall q \in \delta(p, c) </tex>. | <tex> \langle s, \alpha \rangle \vdash^* \langle p, \varepsilon \rangle \Rightarrow \langle s, \alpha c \rangle \vdash^* \langle p, c \rangle \vdash \langle q, \varepsilon \rangle \Rightarrow \langle s, \alpha c \rangle \vdash^* \langle q, \varepsilon \rangle </tex>, <tex> \forall q \in \delta(p, c) </tex>. | ||
| − | Теперь, когда мы научились по <tex> R(\alpha) </tex> строить <tex> R(\alpha c)</tex>, возьмем <tex> R(\varepsilon) </tex> и будем последовательно вычислять <tex>R(w[1 | + | Теперь, когда мы научились по <tex> R(\alpha) </tex> строить <tex> R(\alpha c)</tex>, возьмем <tex> R(\varepsilon) </tex> и будем последовательно вычислять <tex>R(w[1 \ldots k])</tex> для <tex> k=1 \ldots |w| </tex>. |
Таким образом, мы получим <tex>R(w)</tex>, и всё, что осталось — проверить, есть ли в нём терминальное состояние. | Таким образом, мы получим <tex>R(w)</tex>, и всё, что осталось — проверить, есть ли в нём терминальное состояние. | ||
Текущая версия на 19:17, 4 сентября 2022
| Определение: |
| Недетерминированный конечный автомат (НКА) (англ. Nondeterministic finite automaton, NFA) — пятёрка , где — алфавит, — множество состояний автомата, — начальное состояние автомата, — множество допускающих состояний автомата, — функция переходов. Таким образом, единственное отличие НКА от ДКА — существование нескольких переходов по одному символу из одного состояния. |
Процесс допуска
НКА допускает слово , если существует путь из начального состояния в какое-то терминальное, такое что буквы, выписанные с переходов на этом пути по порядку, образуют слово . Теперь это опишем более формально.
| Определение: |
| Мгновенное описание (англ. snapshot) — пара , , . |
Определим некоторые операции для мгновенных описаний.
| Определение: |
Говорят, что выводится за один шаг (англ. directly yields) из , если:
|
| Определение: |
| Рефлексивно-транзитивное замыкание отношения обозначается как . И говорят, что выводится за ноль и более шагов (англ. yields) из , если . |
| Определение: |
| НКА допускает (англ. accepts) слово , если . |
Язык автомата
| Определение: |
Множество слов, допускаемых автоматом , называется языком НКА .
|
Язык НКА является автоматным языком, так как для любого НКА можно построить эквивалентный ему ДКА, а значит, вычислительная мощность этих двух автоматов совпадает.
Пример
Алгоритм, определяющий допустимость автоматом слова
Постановка задачи
Пусть заданы НКА и слово . Требуется определить, допускает ли НКА данное слово.
Алгоритм
Определим множество всех достижимых состояний из стартового по слову : .
Заметим, что если , то слово допускается, так как по определению . Таким образом, алгоритм состоит в том, чтобы построить .
Очевидно, что . Пусть мы построили , построим , где . Заметим, что , так как
, .
Теперь, когда мы научились по строить , возьмем и будем последовательно вычислять для .
Таким образом, мы получим , и всё, что осталось — проверить, есть ли в нём терминальное состояние.
Псевдокод
bool accepts(: Automaton, : String): for i = 1 to .length for ( in ) return
Время работы алгоритма: .
См. также
Источники информации
- Ю. Громкович Теоретическая информатика. Введение в теорию автоматов, теорию вычислимости, теорию сложности, теорию алгоритмов, рандомизацию, теорию связи и криптографию: Пер. с нем. — СПб.:БХВ-Петербург, 2010. — С. 87. — ISBN 978-5-9775-0406-5
- John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman Introduction to Automata Theory, Languages, and Computation. Second edition. P. 71. ISBN 0-201-02988-X
- Wikipedia — Nondeterministic finite automaton
