Недетерминированные конечные автоматы — различия между версиями
м (→Алгоритм, определяющий допустимость автоматом слова) |
м (→Алгоритм, определяющий допустимость автоматом слова) |
||
| Строка 50: | Строка 50: | ||
== Алгоритм, определяющий допустимость автоматом слова == | == Алгоритм, определяющий допустимость автоматом слова == | ||
| − | + | ===Постановка задачи=== | |
| + | Пусть заданы НКА и слово <tex>w</tex>. Требуется определить, допускает ли НКА данное слово. | ||
| − | + | ===Алгоритм=== | |
| − | + | Определим множество всех достижимых состояний из стартового по слову <tex> \alpha </tex> : <tex> R(\alpha) = \lbrace p | \langle s, \alpha \rangle \vdash^* \langle p, \varepsilon \rangle \rbrace </tex>. | |
| − | |||
| − | + | Заметим, что если <tex> \exists t \in T : t \in R(w) </tex>, то слово допускается, так как <tex> \langle s, w \rangle \vdash^* \langle t, \varepsilon \rangle </tex> по определению <tex> R(w) </tex>. Таким образом, алгоритм состоит в том, чтобы построить <tex> R(w) </tex>. | |
| − | Очевидно, что <tex> R(\varepsilon) = \lbrace s \rbrace </tex>. Пусть мы построили <tex> R(\alpha) </tex>, | + | Очевидно, что <tex> R(\varepsilon) = \lbrace s \rbrace </tex>. Пусть мы построили <tex> R(\alpha) </tex>, построим <tex> R(\alpha c)</tex>, где <tex> c \in \Sigma </tex>. Заметим, что |
| − | + | <tex> R(\alpha c) = \lbrace q | q \in \delta(p, c), p \in R(\alpha) \rbrace </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(\varepsilon) </tex>, будем добавлять <tex> w[1], w[2] \ldots w[|w|] </tex> и находить для каждого <tex> R(w[1]\ldots w[k]) </tex>. | Теперь, когда мы научились добавлять символ к строке, возьмем <tex> R(\varepsilon) </tex>, будем добавлять <tex> w[1], w[2] \ldots w[|w|] </tex> и находить для каждого <tex> R(w[1]\ldots w[k]) </tex>. | ||
Версия 01:36, 8 декабря 2011
| Определение: |
| Недетерминированный конечный автомат (НКА) — пятерка , где — алфавит, — множество состояний автомата, — начальное состояние автомата, — множество допускающих состояний автомата, — функция переходов. Таким образом, единственное отличие НКА от ДКА — существование нескольких переходов по одному символу из одного состояния. |
Содержание
Процесс допуска
| Определение: |
| Мгновенная кофигурация — пара , , . |
Определим некоторые операции для мгновенных конфигураций.
| Определение: |
Говорят, что выводится за один шаг из , если:
|
| Определение: |
| Говорят, что выводится за ноль и более шагов из , если :
|
| Определение: |
| НКА допускает слово , если . |
Менее формально это можно описать так: НКА допускает слово , если существует путь из начального состояния в какое-то терминальное, такое что буквы, выписанные с переходов на этом пути по порядку, образуют слово .
Язык автомата
| Определение: |
Множество слов, допускаемых автоматом , называется языком НКА .
|
Язык НКА тоже является автоматным языком, так как можно построить из НКА эквивалентный ДКА, поэтому вычислительная мощность этих двух автоматов совпадает.
Пример
Это НКА, который распознает язык из алфавита , где на четвертой с конца позиции стоит 0.
Алгоритм, определяющий допустимость автоматом слова
Постановка задачи
Пусть заданы НКА и слово . Требуется определить, допускает ли НКА данное слово.
Алгоритм
Определим множество всех достижимых состояний из стартового по слову : .
Заметим, что если , то слово допускается, так как по определению . Таким образом, алгоритм состоит в том, чтобы построить .
Очевидно, что . Пусть мы построили , построим , где . Заметим, что , так как
,
Теперь, когда мы научились добавлять символ к строке, возьмем , будем добавлять и находить для каждого .
Когда мы получим , проверим, есть ли в нем терминальное состояние.
Псевдокод
for i = 1 to length(w) do for do accepts = False for do if accepts = True
Время работы алгоритма: .
См. также
Литература
- Ю. Громкович — Теоретическая информатика. Введение в теорию автоматов, теорию вычислимости, теорию сложности, теорию алгоритмов, рандомизацию, теорию связи и криптографию : Пер. с нем. — издательство БХВ-Петербург, 2010. — 336 с. : ISBN 978-5-9775-0406-5