Недетерминированные конечные автоматы — различия между версиями
(→Язык автомата) |
м |
||
Строка 2: | Строка 2: | ||
|definition= | |definition= | ||
'''Недетерминированный конечный автомат''' (НКА) {{---}} пятерка <tex>\langle \Sigma , Q, s \in Q, T \subset Q, \delta : Q \times \Sigma \to 2^Q \rangle</tex>, где <tex>\Sigma</tex> {{---}} алфавит, <tex>Q</tex> {{---}} множество состояний автомата, <tex>s</tex> {{---}} начальное состояние автомата, <tex>T</tex> {{---}} множество допускающих состояний автомата, <tex>\delta</tex> {{---}} функция переходов. | '''Недетерминированный конечный автомат''' (НКА) {{---}} пятерка <tex>\langle \Sigma , Q, s \in Q, T \subset Q, \delta : Q \times \Sigma \to 2^Q \rangle</tex>, где <tex>\Sigma</tex> {{---}} алфавит, <tex>Q</tex> {{---}} множество состояний автомата, <tex>s</tex> {{---}} начальное состояние автомата, <tex>T</tex> {{---}} множество допускающих состояний автомата, <tex>\delta</tex> {{---}} функция переходов. | ||
− | Таким образом единственное отличие НКА от ДКА {{---}} существование нескольких переходов по одному символу из одного состояния. | + | Таким образом, единственное отличие НКА от ДКА {{---}} существование нескольких переходов по одному символу из одного состояния. |
}} | }} | ||
Строка 8: | Строка 8: | ||
{{Определение | {{Определение | ||
|definition = | |definition = | ||
− | '''Мгновенная кофигурация''' {{---}} пара <tex> \langle p, q \rangle </tex>, <tex> p \in Q </tex>, <tex> q \in \Sigma^*</tex>}} | + | '''Мгновенная кофигурация''' {{---}} пара <tex> \langle p, q \rangle </tex>, <tex> p \in Q </tex>, <tex> q \in \Sigma^*</tex>. |
+ | }} | ||
Определим некоторые операции для мгновенных конфигураций. | Определим некоторые операции для мгновенных конфигураций. | ||
Строка 14: | Строка 15: | ||
|definition = | |definition = | ||
Говорят, что <tex> \langle p, \beta \rangle</tex> '''выводится за один шаг''' из <tex>\langle q, \alpha \rangle </tex>, если: | Говорят, что <tex> \langle p, \beta \rangle</tex> '''выводится за один шаг''' из <tex>\langle q, \alpha \rangle </tex>, если: | ||
− | * <tex>\alpha = c\beta</tex> | + | * <tex>\alpha = c\beta</tex>; |
* <tex>p \in \delta (q, c)</tex>. | * <tex>p \in \delta (q, c)</tex>. | ||
− | Это также записывают так: <tex>\langle q, \alpha \rangle \vdash \langle p, \beta \rangle</tex> | + | Это также записывают так: <tex>\langle q, \alpha \rangle \vdash \langle p, \beta \rangle</tex>. |
}} | }} | ||
Строка 23: | Строка 24: | ||
Говорят, что <tex> \langle p, \beta \rangle</tex> '''выводится за ноль и более шагов''' из <tex>\langle q, \alpha \rangle </tex>, если <tex>\exists c_1, c_2 \ldots c_n</tex>: | Говорят, что <tex> \langle p, \beta \rangle</tex> '''выводится за ноль и более шагов''' из <tex>\langle q, \alpha \rangle </tex>, если <tex>\exists c_1, c_2 \ldots c_n</tex>: | ||
* <tex>\langle q, c_1 c_2 \ldots c_n \beta\rangle \vdash \langle u_1, c_2 c_3 \ldots c_n \beta\rangle \vdash \langle u_2, c_3 \ldots c_n \beta\rangle \ldots \vdash \langle u_{n-1}, c_n \beta\rangle \vdash \langle p, \beta \rangle</tex> | * <tex>\langle q, c_1 c_2 \ldots c_n \beta\rangle \vdash \langle u_1, c_2 c_3 \ldots c_n \beta\rangle \vdash \langle u_2, c_3 \ldots c_n \beta\rangle \ldots \vdash \langle u_{n-1}, c_n \beta\rangle \vdash \langle p, \beta \rangle</tex> | ||
− | Это также записывают так: <tex>\langle q, \alpha \rangle \vdash^* \langle p, \beta \rangle</tex> | + | Это также записывают так: <tex>\langle q, \alpha \rangle \vdash^* \langle p, \beta \rangle</tex>. |
}} | }} | ||
Строка 38: | Строка 39: | ||
|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>. |
}} | }} | ||
Строка 49: | Строка 50: | ||
== Алгоритм, определяющий допустимость автоматом слова == | == Алгоритм, определяющий допустимость автоматом слова == | ||
− | Этот алгоритм решает следующую задачу: заданы НКА и слово, нужно определить допускает ли НКА данное слово. | + | Этот алгоритм решает следующую задачу: заданы НКА и слово, нужно определить, допускает ли НКА данное слово. |
По сравнению с ДКА, определить, допускает ли НКА слово, сложнее, так как из состояния теперь есть несколько переходов по букве и выбрать случайный переход нельзя. | По сравнению с ДКА, определить, допускает ли НКА слово, сложнее, так как из состояния теперь есть несколько переходов по букве и выбрать случайный переход нельзя. |
Версия 01:07, 8 декабря 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