Недетерминированные конечные автоматы — различия между версиями
(→Язык автомата) |
(→Язык автомата) |
||
| Строка 38: | Строка 38: | ||
|definition = | |definition = | ||
Множество слов, допускаемых автоматом <tex> \mathcal{A} </tex>, называется '''языком НКА''' <tex> \mathcal{A} </tex>. | Множество слов, допускаемых автоматом <tex> \mathcal{A} </tex>, называется '''языком НКА''' <tex> \mathcal{A} </tex>. | ||
| + | |||
<tex> \mathcal{L}(\mathcal{A}) = \lbrace w | \exists t \in T : \langle s, w \rangle \vdash^* \langle t, \varepsilon \rangle \rbrace </tex> | <tex> \mathcal{L}(\mathcal{A}) = \lbrace w | \exists t \in T : \langle s, w \rangle \vdash^* \langle t, \varepsilon \rangle \rbrace </tex> | ||
}} | }} | ||
Версия 21:27, 17 ноября 2011
| Определение: |
| Недетерминированный конечный автомат (НКА) — пятерка , где — алфавит, — множество состояний автомата, — начальное состояние автомата, — множество допускающих состояний автомата, — функция переходов. Таким образом единственное отличие НКА от ДКА — существование нескольких переходов по одному символу из одного состояния. |
Содержание
Процесс допуска
| Определение: |
| Мгновенная кофигурация — пара , , |
Определим некоторые операции для мгновенных конфигураций.
| Определение: |
Говорят, что выводится за один шаг из , если:
|
| Определение: |
| Говорят, что выводится за ноль и более шагов из , если :
|
| Определение: |
| НКА допускает слово , если . |
Менее формально это можно описать так: НКА допускает слово , если существует путь из начального состояния в какое-то терминальное, такое что буквы, выписанные с переходов на этом пути по порядку, образуют слово .
Язык автомата
| Определение: |
| Множество слов, допускаемых автоматом , называется языком НКА . |
Язык НКА тоже является автоматным языком, так как можно построить из НКА эквивалентный ДКА, поэтому вычислительная мощность этих двух автоматов совпадает.
Пример
Это НКА, который распознает язык из алфавита , где на четвертой с конца позиции стоит 0.
Алгоритм, определяющий допустимость автоматом слова
Этот алгоритм решает следующую задачу: заданы НКА и слово, нужно определить допускает ли НКА данное слово.
По сравнению с ДКА, определить, допускает ли НКА слово, сложнее, так как из состояния теперь есть несколько переходов по букве и выбрать случайный переход нельзя. Поступим по-другому: определим множество всех достижимых состояний из стартового по слову .
Пусть нам нужно определить допускает ли НКА слово . Заметим, что если , то слово допускается, так как по определению . Алгоритм состоит в том, чтобы построить .
Очевидно, что . Пусть мы построили , как же получить , где . Заметим, что
- ,
так как
- ,
Теперь, когда мы научились добавлять символ к строке, возьмем , будем добавлять и находить для каждого .
Когда мы получим , проверим, есть ли в нем терминальное состояние.
Псевдокод:
for i = 1 to length(w) do for do accepts = False for do if then accepts = True
Время работы алгоритма: .
См. также
Литература
- Ю. Громкович — Теоретическая информатика. Введение в теорию автоматов, теорию вычислимости, теорию сложности, теорию алгоритмов, рандомизацию, теорию связи и криптографию : Пер. с нем. — издательство БХВ-Петербург, 2010. — 336 с. : ISBN 978-5-9775-0406-5