Недетерминированные конечные автоматы — различия между версиями
(→Процесс допуска) |
Leugenea (обсуждение | вклад) м (Пропущенная запятая) |
||
Строка 64: | Строка 64: | ||
Теперь, когда мы научились по <tex> R(\alpha) </tex> строить <tex> R(\alpha c)</tex>, возьмем <tex> R(\varepsilon) </tex> и будем последовательно вычислять <tex>R(w[1]\ldots w[k])</tex> для <tex>k=1..|w|</tex>. | Теперь, когда мы научились по <tex> R(\alpha) </tex> строить <tex> R(\alpha c)</tex>, возьмем <tex> R(\varepsilon) </tex> и будем последовательно вычислять <tex>R(w[1]\ldots w[k])</tex> для <tex>k=1..|w|</tex>. | ||
− | Таким образом, мы получим <tex>R(w)</tex>, и всё что осталось — проверить, есть ли в нём терминальное состояние. | + | Таким образом, мы получим <tex>R(w)</tex>, и всё, что осталось — проверить, есть ли в нём терминальное состояние. |
===Псевдокод=== | ===Псевдокод=== |
Версия 08:55, 17 января 2012
Определение: |
Недетерминированный конечный автомат (НКА) — пятерка | , где — алфавит, — множество состояний автомата, — начальное состояние автомата, — множество допускающих состояний автомата, — функция переходов. Таким образом, единственное отличие НКА от ДКА — существование нескольких переходов по одному символу из одного состояния.
Содержание
Процесс допуска
Определение: |
Мгновенная кофигурация — пара | , , .
Определим некоторые операции для мгновенных конфигураций.
Определение: |
Говорят, что
| выводится за один шаг из , если:
Определение: |
Говорят, что
| выводится за ноль и более шагов из , если :
Определение: |
НКА допускает слово | , если .
Менее формально это можно описать так: НКА допускает слово , если существует путь из начального состояния в какое-то терминальное, такое что буквы, выписанные с переходов на этом пути по порядку, образуют слово .
Язык автомата
Определение: |
Множество слов, допускаемых автоматом
| , называется языком НКА .
Язык НКА является автоматным языком, так как для любого НКА можно построить эквивалентный ему ДКА, а значит, вычислительная мощность этих двух автоматов совпадает.
Пример
Это НКА, который распознает язык из алфавита
, где на четвертой с конца позиции стоит 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