Недетерминированные конечные автоматы — различия между версиями
Martoon (обсуждение | вклад) м |
(→Псевдокод) |
||
Строка 75: | Строка 75: | ||
===Псевдокод=== | ===Псевдокод=== | ||
'''bool''' accepts(<tex>\langle \Sigma, Q, s, T, \delta \rangle</tex>: '''Automaton''', <tex>\mathtt{w}</tex>: '''String'''): | '''bool''' accepts(<tex>\langle \Sigma, Q, s, T, \delta \rangle</tex>: '''Automaton''', <tex>\mathtt{w}</tex>: '''String'''): | ||
− | |||
<tex> R_0 = \lbrace s \rbrace </tex> | <tex> R_0 = \lbrace s \rbrace </tex> | ||
'''for''' i = 1 '''to''' <tex>\mathtt{w}</tex>.length | '''for''' i = 1 '''to''' <tex>\mathtt{w}</tex>.length | ||
Строка 81: | Строка 80: | ||
'''for''' (<tex> q </tex> '''in''' <tex> R_{i - 1} </tex>) | '''for''' (<tex> q </tex> '''in''' <tex> R_{i - 1} </tex>) | ||
<tex> R_i = R_i \cup \delta(q, \mathtt{w}[i]) </tex> | <tex> R_i = R_i \cup \delta(q, \mathtt{w}[i]) </tex> | ||
− | + | '''return''' <tex> R_{|\mathtt{w}|} \cap T \neq \varnothing </tex> | |
− | ''' | ||
− | |||
− | |||
− | |||
Время работы алгоритма: <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>. |
Версия 17:57, 15 ноября 2014
Определение: |
Недетерминированный конечный автомат (НКА) (англ. Nondeterministic finite automaton, NFA) — пятёрка ДКА — существование нескольких переходов по одному символу из одного состояния. | , где — алфавит, — множество состояний автомата, — начальное состояние автомата, — множество допускающих состояний автомата, — функция переходов. Таким образом, единственное отличие НКА от
Содержание
Процесс допуска
НКА допускает слово
, если существует путь из начального состояния в какое-то терминальное, такое что буквы, выписанные с переходов на этом пути по порядку, образуют слово . Теперь это опишем более формально.
Определение: |
Мгновенное описание (англ. snapshot) — пара | , , .
Определим некоторые операции для мгновенных описаний.
Определение: |
Говорят, что
| выводится за один шаг (англ. directly yields) из , если:
Определение: |
Рефлексивно-транзитивное замыкание отношения И говорят, что выводится за ноль и более шагов (англ. yields) из , если . | обозначается как .
Определение: |
НКА допускает (англ. accepts) слово | , если .
Язык автомата
Определение: |
Множество слов, допускаемых автоматом
| , называется языком НКА .
Язык НКА является автоматным языком, так как для любого НКА можно построить эквивалентный ему ДКА, а значит, вычислительная мощность этих двух автоматов совпадает.
Пример
Это НКА, который распознает язык из алфавита
, где на четвертой с конца позиции стоит 0.Алгоритм, определяющий допустимость автоматом слова
Постановка задачи
Пусть заданы НКА и слово
. Требуется определить, допускает ли НКА данное слово.Алгоритм
Определим множество всех достижимых состояний из стартового по слову
: .Заметим, что если
, то слово допускается, так как по определению . Таким образом, алгоритм состоит в том, чтобы построить .Очевидно, что
. Пусть мы построили , построим , где . Заметим, что , так как, .
Теперь, когда мы научились по
строить , возьмем и будем последовательно вычислять для .Таким образом, мы получим
, и всё, что осталось — проверить, есть ли в нём терминальное состояние.Псевдокод
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