Недетерминированные конечные автоматы — различия между версиями
м |
м (→Алгоритм, определяющий допустимость автоматом слова) |
||
Строка 50: | Строка 50: | ||
== Алгоритм, определяющий допустимость автоматом слова == | == Алгоритм, определяющий допустимость автоматом слова == | ||
− | Этот алгоритм решает следующую задачу: заданы НКА и слово | + | Этот алгоритм решает следующую задачу: заданы НКА и слово. Требуется определить, допускает ли НКА данное слово. |
По сравнению с ДКА, определить, допускает ли НКА слово, сложнее, так как из состояния теперь есть несколько переходов по букве и выбрать случайный переход нельзя. | По сравнению с ДКА, определить, допускает ли НКА слово, сложнее, так как из состояния теперь есть несколько переходов по букве и выбрать случайный переход нельзя. | ||
Строка 67: | Строка 67: | ||
Когда мы получим <tex> R(w) </tex>, проверим, есть ли в нем терминальное состояние. | Когда мы получим <tex> R(w) </tex>, проверим, есть ли в нем терминальное состояние. | ||
− | Псевдокод | + | ===Псевдокод=== |
− | + | <tex> R_0 = \lbrace s \rbrace </tex> | |
− | + | for i = 1 to length(w) do | |
− | + | <tex> R_i = \varnothing </tex> | |
− | + | for <tex> p \in R_{i - 1} </tex> do | |
− | + | <tex> R_i = R_i \cup \delta(p, w[i]) </tex> | |
− | + | accepts = False | |
− | + | for <tex> t \in T </tex> do | |
− | + | if <tex> t \in R_{|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>. | ||
+ | |||
== См. также == | == См. также == | ||
Версия 01:21, 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