Недетерминированные конечные автоматы — различия между версиями
Gromak (обсуждение | вклад) |
Martoon (обсуждение | вклад) |
||
| Строка 1: | Строка 1: | ||
{{Определение | {{Определение | ||
|definition= | |definition= | ||
| − | '''Недетерминированный конечный автомат''' | + | '''Недетерминированный конечный автомат (НКА)''' (англ. ''Nondeterministic finite automaton, NFA'') {{---}} пятёрка <tex>\langle \Sigma , Q, s \in Q, T \subset Q, \delta : Q \times \Sigma \to 2^Q \rangle</tex>, где <tex>\Sigma</tex> {{---}} алфавит, <tex>Q</tex> {{---}} множество состояний автомата, <tex>s</tex> {{---}} начальное состояние автомата, <tex>T</tex> {{---}} множество допускающих состояний автомата, <tex>\delta</tex> {{---}} функция переходов. |
Таким образом, единственное отличие НКА от [[Детерминированные_конечные_автоматы | ДКА]] {{---}} существование нескольких переходов по одному символу из одного состояния. | Таким образом, единственное отличие НКА от [[Детерминированные_конечные_автоматы | ДКА]] {{---}} существование нескольких переходов по одному символу из одного состояния. | ||
}} | }} | ||
| Строка 12: | Строка 12: | ||
{{Определение | {{Определение | ||
|definition = | |definition = | ||
| − | '''Мгновенное описание''' {{---}} пара <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>. |
}} | }} | ||
| Строка 36: | Строка 36: | ||
{{Определение | {{Определение | ||
|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>. |
}} | }} | ||
| Строка 44: | Строка 44: | ||
|definition = | |definition = | ||
Множество слов, допускаемых автоматом <tex> \mathcal{A} </tex>, называется '''языком НКА''' <tex> \mathcal{A} </tex>. | Множество слов, допускаемых автоматом <tex> \mathcal{A} </tex>, называется '''языком НКА''' <tex> \mathcal{A} </tex>. | ||
| − | * <tex>L(\mathcal{A}) = \lbrace w | \exists t \in T : \langle s, w \rangle \vdash^* \langle t, \varepsilon \rangle \rbrace </tex>. | + | * <tex>L(\mathcal{A}) = \lbrace w \ | \ \exists t \in T : \langle s, w \rangle \vdash^* \langle t, \varepsilon \rangle \rbrace </tex>. |
| + | В этом случае также говорят, что автомат <tex> \mathcal{A} </tex> '''распознаёт''' (англ. ''recognize'') язык <tex> L </tex>. | ||
}} | }} | ||
| Строка 73: | Строка 74: | ||
===Псевдокод=== | ===Псевдокод=== | ||
| + | <font color=darkgreen>// Строим <tex> R_i </tex> </font> | ||
<tex> R_0 = \lbrace s \rbrace </tex> | <tex> R_0 = \lbrace s \rbrace </tex> | ||
| − | for i = 1 to length | + | '''for''' i = 1 '''to''' <tex>\mathtt{w}</tex>.length |
<tex> R_i = \varnothing </tex> | <tex> R_i = \varnothing </tex> | ||
| − | for <tex> | + | '''for''' (<tex> q </tex> '''in''' <tex> R_{i - 1} </tex>) |
| − | <tex> R_i = R_i \cup \delta( | + | <tex> R_i = R_i \cup \delta(q, \mathtt{w}[i]) </tex> |
| − | accepts = | + | <font color=darkgreen>// Проверяем, есть ли среди <tex> R_n </tex> терминальные состояния </font> |
| − | for <tex> | + | accepts = ''false'' |
| − | if <tex> | + | '''for''' (term_state '''in''' <tex> T </tex>) |
| − | accepts = | + | '''if''' term_state '''in''' <tex> R_{|\mathtt{w}|} </tex> |
| + | accepts = ''true'' | ||
Время работы алгоритма: <tex> \mathop O(|w|\sum\limits_{t \in Q} \sum\limits_{c \in \Sigma} |\delta(t, c)|) </tex>. | Время работы алгоритма: <tex> \mathop O(|w|\sum\limits_{t \in Q} \sum\limits_{c \in \Sigma} |\delta(t, c)|) </tex>. | ||
| Строка 89: | Строка 92: | ||
* [[Детерминированные конечные автоматы]] | * [[Детерминированные конечные автоматы]] | ||
* [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона]] | * [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона]] | ||
| − | == | + | == Источники информации == |
* ''Ю. Громкович'' Теоретическая информатика. Введение в теорию автоматов, теорию вычислимости, теорию сложности, теорию алгоритмов, рандомизацию, теорию связи и криптографию: Пер. с нем. — СПб.:БХВ-Петербург, 2010. — С. 87. — ISBN 978-5-9775-0406-5 | * ''Ю. Громкович'' Теоретическая информатика. Введение в теорию автоматов, теорию вычислимости, теорию сложности, теорию алгоритмов, рандомизацию, теорию связи и криптографию: Пер. с нем. — СПб.:БХВ-Петербург, 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 | * ''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:en:Nondeterministic finite automaton | Wikipedia {{---}} Nondeterministic finite automaton]] | ||
[[Категория: Теория формальных языков]] | [[Категория: Теория формальных языков]] | ||
[[Категория: Автоматы и регулярные языки]] | [[Категория: Автоматы и регулярные языки]] | ||
Версия 14:49, 15 ноября 2014
| Определение: |
| Недетерминированный конечный автомат (НКА) (англ. Nondeterministic finite automaton, NFA) — пятёрка , где — алфавит, — множество состояний автомата, — начальное состояние автомата, — множество допускающих состояний автомата, — функция переходов. Таким образом, единственное отличие НКА от ДКА — существование нескольких переходов по одному символу из одного состояния. |
Содержание
Процесс допуска
НКА допускает слово , если существует путь из начального состояния в какое-то терминальное, такое что буквы, выписанные с переходов на этом пути по порядку, образуют слово . Теперь это опишем более формально.
| Определение: |
| Мгновенное описание (англ. snapshot) — пара , , . |
Определим некоторые операции для мгновенных описаний.
| Определение: |
Говорят, что выводится за один шаг из , если:
|
| Определение: |
| Рефлексивно-транзитивное замыкание отношения обозначается как . И говорят, что выводится за ноль и более шагов из , если |
| Определение: |
| НКА допускает (англ. accepts) слово , если . |
Язык автомата
| Определение: |
Множество слов, допускаемых автоматом , называется языком НКА .
|
Язык НКА является автоматным языком, так как для любого НКА можно построить эквивалентный ему ДКА, а значит, вычислительная мощность этих двух автоматов совпадает.
Пример
Это НКА, который распознает язык из алфавита , где на четвертой с конца позиции стоит 0.
Алгоритм, определяющий допустимость автоматом слова
Постановка задачи
Пусть заданы НКА и слово . Требуется определить, допускает ли НКА данное слово.
Алгоритм
Определим множество всех достижимых состояний из стартового по слову : .
Заметим, что если , то слово допускается, так как по определению . Таким образом, алгоритм состоит в том, чтобы построить .
Очевидно, что . Пусть мы построили , построим , где . Заметим, что , так как
, .
Теперь, когда мы научились по строить , возьмем и будем последовательно вычислять для .
Таким образом, мы получим , и всё, что осталось — проверить, есть ли в нём терминальное состояние.
Псевдокод
// Строим for i = 1 to .length for ( in ) // Проверяем, есть ли среди терминальные состояния accepts = false for (term_state in ) if term_state in accepts = true
Время работы алгоритма: .
См. также
Источники информации
- Ю. Громкович Теоретическая информатика. Введение в теорию автоматов, теорию вычислимости, теорию сложности, теорию алгоритмов, рандомизацию, теорию связи и криптографию: Пер. с нем. — СПб.:БХВ-Петербург, 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
