Из Википедии, свободной энциклопедии
Перейти к навигации Перейти к поиску
NFA для (0 | 1) *  1 (0 | 1) 3 . DFA для этого языка имеет по крайней мере 16 государств.

В теории автоматов , конечный автомат называется детерминированный конечный автомат (ДКА), если

  • каждый из его переходов однозначно определяется его исходным состоянием и входным символом, и
  • чтение входного символа требуется для каждого перехода между состояниями.

Недетерминирован конечный автомат ( НКА ), или недетерминирован конечный автомат , не нужно соблюдать эти ограничения. В частности, каждый DFA также является NFA. Иногда термин NFA используется в более узком смысле, имея в виду NFA, которая не является DFA, но не в этой статье.

Используя алгоритм построения подмножества , каждую NFA можно преобразовать в эквивалентную DFA; т.е. DFA, распознающий тот же формальный язык . [1] Как и DFA, NFA распознают только обычные языки .

NFAS были введены в 1959 году Майкл О. Рабина и Дана Скотт , [2] , которые также показали их эквивалентность ДКА. NFA используются в реализации регулярных выражений : конструкция Томпсона - это алгоритм компиляции регулярного выражения в NFA, который может эффективно выполнять сопоставление с образцом в строках. И наоборот, алгоритм Клини можно использовать для преобразования NFA в регулярное выражение (размер которого во входном автомате обычно экспоненциальный).

NFA были обобщены множеством способов, например, недетерминированные конечные автоматы с ε-перемещениями , конечные преобразователи , автоматические выталкивающие автоматы , чередующиеся автоматы , ω-автоматы и вероятностные автоматы . Помимо DFA, другими известными частными случаями NFA являются однозначные конечные автоматы (UFA) и самопроверяющиеся конечные автоматы (SVFA).

Неформальное введение [ править ]

Есть несколько неформальных объяснений, которые эквивалентны.

  • NFA, как и DFA , использует строку входных символов. Для каждого входного символа он переходит в новое состояние до тех пор, пока все входные символы не будут использованы. На каждом шаге автомат произвольно выбирает один из подходящих переходов. Если существует некоторый «счастливый прогон», то есть некоторая последовательность выборов, приводящая к состоянию принятия после полного использования ввода, она принимается. В противном случае, т. Е. Если никакая последовательность выбора вообще не может поглотить весь ввод [3] и привести к состоянию приема, ввод отклоняется. [4] : 19 [5] : 319
  • Опять же, NFA использует строку входных символов один за другим. На каждом шаге, когда применимы два или более перехода, он «клонирует» себя в соответствующее количество копий, каждая из которых следует за другим переходом. Если переход невозможен, текущая копия находится в тупике и «умирает». Если после использования всего ввода любая из копий находится в состоянии принятия, ввод принимается, иначе он отклоняется. [4] : 19–20 [6] : 48 [7] : 56

Формальное определение [ править ]

Для более элементарного введения формального определения см. Теорию автоматов .

Автомат [ править ]

НКА представлена формально в 5-кортеж , , состоящий из

  • конечный набор состояний .
  • конечный набор входных символов .
  • функция перехода  : .
  • начальное (или начала ) состояние .
  • набор состояний, определяемых как принимающие (или конечные ) состояния .

Здесь, обозначает набор мощности из .

Распознаваемый язык [ править ]

Для данной NFA ее распознаваемый язык обозначается и определяется как набор всех строк в алфавите , которые принимаются .

Примерно соответствующие приведенным выше неформальным объяснениям, есть несколько эквивалентных формальных определений строки, которые принимаются :

  • принимается, если последовательность состояний существует в такой, что:
    1. , для
    2. .
На словах первое условие говорит о том, что машина запускается в стартовом состоянии . Второе условие гласит, что для каждого символа строки машина будет переходить из состояния в состояние в соответствии с функцией перехода . Последнее условие говорит, что машина принимает, если последний ввод заставляет машину останавливаться в одном из состояний приема. Для того, чтобы быть принятым , не требуется, чтобы каждая последовательность состояний оканчивалась в состоянии принятия, достаточно, если это так. В противном случае, т. Е. Если невозможно вообще перейти из в состояние из следования , говорят, что автомат отклоняет строку. Набор струнaccept - это язык, который распознается , и этот язык обозначается . [5] : 320 [6] : 54
  • В качестве альтернативы принимается, если , где определяется рекурсивно :
    1. где - пустая строка, а
    2. для всех .
Проще говоря, это набор всех состояний, достижимых из состояния при использовании строки . Строка принимается, если некоторое принимающее состояние может быть достигнуто из начального состояния путем потребления . [4] : 21 [7] : 59

Исходное состояние [ править ]

В приведенном выше определении автомата используется одно начальное состояние , в котором нет необходимости. Иногда NFA определяются набором начальных состояний. Существует простая конструкция, которая переводит NFA с несколькими начальными состояниями в NFA с одним начальным состоянием, что обеспечивает удобное обозначение.

Пример [ править ]

Следующий автомат с двоичным алфавитом определяет, заканчивается ли вход цифрой 1. Пусть функция перехода может быть определена этой таблицей переходов состояний (см. Верхний левый рисунок):

Поскольку набор содержит более одного состояния, не является детерминированным. Язык можно описать обычным языком, задаваемым регулярным выражением . (0|1)*1

Все возможные последовательности состояний для входной строки «1011» показаны на нижнем рисунке. Строка принимается, поскольку одна последовательность состояний удовлетворяет приведенному выше определению; не имеет значения, что другие последовательности этого не делают. Картинку можно трактовать двояко:

  • В терминах вышеприведенного объяснения «удачного пробега» каждый путь на картинке обозначает последовательность вариантов выбора .
  • Что касается объяснения «клонирования», каждый вертикальный столбец показывает все клоны в данный момент времени, несколько стрелок, исходящих от узла, указывают на клонирование, узел без исходящих стрелок указывает на «смерть» клона.

Возможность прочитать одну и ту же картинку двумя способами также указывает на эквивалентность обоих приведенных выше объяснений.

  • Принимая во внимание первое из приведенных выше формальных определений, «1011» принимается, поскольку при чтении оно может проходить через последовательность состояний , которая удовлетворяет условиям 1–3.
  • Что касается второго формального определения, вычисление снизу вверх показывает, что , следовательно , отсюда , отсюда и отсюда ; так как этот набор не является непересекающимся , строка «1011» принимается.

Напротив, строка «10» отклоняется (все возможные последовательности состояний для этого ввода показаны на верхнем правом рисунке), так как нет способа достичь единственного принимающего состояния путем считывания последнего символа 0. Хотя может быть достигнуто после использования начальной «1», это не означает, что ввод «10» принят; скорее, это означает, что будет принята входная строка «1».

Эквивалентность DFA [ править ]

Детерминированный конечный автомат (ДКА) можно рассматривать как особый вид НКИ, в котором для каждого состояния и алфавита, функция перехода имеет ровно одно состояние. Таким образом, очевидно, что любой формальный язык, который может быть распознан DFA, может быть распознан NFA.

И наоборот, для каждой NFA существует такой DFA, который распознает один и тот же формальный язык. DFA может быть построен с использованием конструкции powerset .

Этот результат показывает, что NFA, несмотря на их дополнительную гибкость, не могут распознавать языки, которые не могут быть распознаны некоторыми DFA. Это также важно на практике для преобразования простых в создании NFA в более эффективно исполняемые DFA. Однако, если NFA имеет n состояний, результирующий DFA может иметь до 2 n состояний, что иногда делает конструкцию непрактичной для больших NFA.

NFA с ε-ходами [ править ]

Недетерминированный конечный автомат с ε-движениями (NFA-ε) является дальнейшим обобщением на NFA. Этот автомат заменяет функцию перехода на ту, которая допускает пустую строку ε в качестве возможного входа. Переходы без использования входного символа называются ε-переходами. На диаграммах состояний они обычно обозначаются греческой буквой ε. ε-переходы обеспечивают удобный способ моделирования систем, текущие состояния которых точно не известны: т. е. если мы моделируем систему и неясно, должно ли текущее состояние (после обработки некоторой входной строки) быть q или q ', тогда мы можем добавить ε-переход между этими двумя состояниями, таким образом переведя автомат в оба состояния одновременно.

Формальное определение [ править ]

НКА-ε представлена формально в 5-кортеж , , состоящий из

  • конечное множество из состояний
  • конечный набор входных символов, называемый алфавитом
  • функция перехода
  • начальное (или начать ) состояние
  • набор состояний, определяемых как принимающие (или конечные ) состояния .

Здесь, обозначает набор мощности от и ε обозначает пустую строку.

ε-закрытие состояния или набора состояний [ править ]

Для состояния пусть обозначает набор состояний, из которых можно достичь , следуя ε-переходам в функции перехода , т. Е. Если существует последовательность состояний такая, что

  • ,
  • для каждого , и
  • .

известен как е-закрытия в .

ε-замыкание также определено для набора состояний. Ε-замыкание набора состояний , NFA определяется как набор состояний, достижимых из любого состояния при следующих ε-переходах. Формально для определения .

Принятие состояний [ править ]

Позвольте быть строку над алфавитом . Автомат принимает строку, если существует последовательность состояний ,, со следующими условиями:

  1. где для каждого , и
  2. .

На словах первое условие означает, что машина запускается в состоянии, достижимом из начального состояния через ε-переходы. Второе условие гласит, что после чтения машина выполняет переход от к , а затем выполняет любое количество ε-переходов в соответствии с переходом от к . Последнее условие говорит, что машина принимает, если последний ввод заставляет машину останавливаться в одном из состояний приема. В противном случае говорят, что автомат отклоняет строку. Набор принимаемых строк - это язык, который распознается , и этот язык обозначается .

Пример [ править ]

Диаграмма состояний для М

Пусть будет NFA-ε с двоичным алфавитом, который определяет, содержит ли вход четное количество нулей или четное количество единиц. Обратите внимание, что 0 вхождений также является четным числом вхождений.

В формальных обозначениях, пусть, где отношение перехода может быть определено этой таблицей переходов состояний :

можно рассматривать как объединение двух DFA : один с состояниями, а другой с состояниями . Язык может быть описан регулярным языком, задаваемым этим регулярным выражением (1 * (01 * 01 *) *) ∪ (0 * (10 * 10 *) *). Мы определяем с помощью ε-движений, но их можно определить без использования ε-движений.

Эквивалентность NFA [ править ]

Чтобы показать, что NFA-ε эквивалентно NFA, сначала отметим, что NFA является частным случаем NFA-ε, поэтому остается показать, что для каждого NFA-ε существует эквивалентный NFA.

Позвольте быть NFA-ε. НКА эквивалентно , где для каждого и , .

Таким образом, NFA-ε эквивалентно NFA. Поскольку NFA эквивалентно DFA, NFA-ε также эквивалентно DFA.

Свойства закрытия [ править ]

Составленная NFA, принимающая объединение языков некоторых заданных NFA N ( s ) и N ( t ) . Для входной строки w в языковом объединении составной автомат следует ε-переходу от q к начальному состоянию (левый кружок) соответствующего субавтомата - N ( s ) или N ( t ) - который, следуя w , может достичь состояния принятия (правый кружок); оттуда, состояние fможет быть достигнута другим ε-переходом. Из-за ε-переходов составленный NFA является собственно недетерминированным, даже если и N ( s ), и N ( t ) были DFA; наоборот, построение DFA для языка объединения (даже двух DFA) намного сложнее.

NFA называются закрытыми относительно ( бинарного / унарного ) оператора, если NFA распознают языки, полученные в результате применения операции к распознаваемым NFA языкам. НФА закрываются при следующих операциях.

  • Союз (см. Рисунок)
  • Пересечение
  • Конкатенация
  • Отрицание
  • Клини закрытие

Поскольку NFA эквивалентны недетерминированному конечному автомату с ε-движениями (NFA-ε), указанные выше замыкания доказываются с использованием свойств замыкания NFA-ε. Вышеупомянутые свойства закрытия подразумевают, что NFA могут распознавать обычные языки .

NFA могут быть построены из любого регулярного выражения с использованием алгоритма построения Томпсона .

Свойства [ править ]

Машина запускается в указанном начальном состоянии и считывает строку символов из своего алфавита . Автомат использует функцию перехода между состояниями Δ, чтобы определить следующее состояние, используя текущее состояние и только что прочитанный символ или пустую строку. Однако «следующее состояние NFA зависит не только от текущего события ввода, но и от произвольного числа последующих событий ввода. Пока эти последующие события не произойдут, невозможно определить, в каком состоянии находится машина». [8] Если, когда автомат закончил чтение, он находится в состоянии принятия, говорят, что NFA принимает строку, в противном случае говорят, что она отклоняет строку.

Набор всех строк, принимаемых NFA, является языком, который принимает NFA. Это обычный язык .

Для каждой NFA можно найти детерминированный конечный автомат (DFA), который принимает тот же язык. Следовательно, можно преобразовать существующий NFA в DFA с целью реализации (возможно) более простой машины. Это можно сделать с помощью конструкции powerset , что может привести к экспоненциальному увеличению количества необходимых состояний. Для формального доказательства конструкции Powerset см. Статью о конструкции Powerset .

Реализация [ править ]

Есть много способов реализовать NFA:

  • Преобразуйте в эквивалентный DFA. В некоторых случаях это может вызвать экспоненциальный рост числа состояний. [9]
  • Сохраняйте заданную структуру данных всех состояний, в которых может находиться NFA в данный момент. При использовании входного символа объедините результаты функции перехода, примененной ко всем текущим состояниям, чтобы получить набор следующих состояний; если разрешены ε-движения, включить все состояния, достижимые таким перемещением (ε-замыкание). Каждый шаг требует не более s 2 вычислений, где s - количество состояний NFA. При использовании последнего входного символа, если одно из текущих состояний является конечным, машина принимает строку. Строка длины n может быть обработана за время O (нс 2 ), [7] : 153 и пространство O( s ).
  • Создайте несколько копий. Для каждого n-стороннего решения NFA создает до копий машины. Каждый войдет в отдельное состояние. Если после использования последнего входного символа хотя бы одна копия NFA находится в состоянии приема, NFA примет. (Это тоже требует линейного хранения в зависимости от количества состояний NFA, поскольку для каждого состояния NFA может быть одна машина.)
  • Явно распространяйте токены через структуру перехода NFA и сопоставляйте их всякий раз, когда токен достигает конечного состояния. Это иногда полезно, когда NFA следует кодировать дополнительный контекст о событиях, вызвавших переход. (Для реализации, которая использует этот метод для отслеживания ссылок на объекты, посмотрите Tracematches. [10] )

Применение NFA [ править ]

NFA и DFA эквивалентны в том смысле, что если язык распознается NFA, он также распознается DFA, и наоборот. Установление такой эквивалентности важно и полезно. Это полезно, потому что создание NFA для распознавания данного языка иногда намного проще, чем создание DFA для этого языка. Это важно, потому что NFA можно использовать для уменьшения сложности математической работы, необходимой для установления многих важных свойств в теории вычислений . Например, гораздо проще доказать закрывающие свойства из регулярных языков с использованием NFAS , чем ДКА.

См. Также [ править ]

  • Детерминированный конечный автомат
  • Двусторонний недетерминированный конечный автомат
  • Выталкивающий автомат
  • Недетерминированная машина Тьюринга

Заметки [ править ]

  1. ^ Мартин, Джон (2010). Введение в языки и теорию вычислений . Макгроу Хилл. п. 108. ISBN 978-0071289429.
  2. ^ Рабин, Миссури; Скотт, Д. (апрель 1959 г.). «Конечные автоматы и проблемы их решения». Журнал исследований и разработок IBM . 3 (2): 114–125. DOI : 10.1147 / rd.32.0114 .
  3. ^ Последовательность выбора может привести к «тупику», когда для текущего входного символа переход невозможен; в этом случае он считается неудачным.
  4. ^ a b c Джон Э. Хопкрофт и Джеффри Д. Ульман (1979). Введение в теорию автоматов, языки и вычисления . Чтение / МА: Аддисон-Уэсли. ISBN 0-201-02988-X.
  5. ^ a b Альфред В. Ахо, Джон Э. Хопкрофт и Джеффри Д. Ульман (1974). Дизайн и анализ компьютерных алгоритмов . Чтение / МА: Аддисон-Уэсли. ISBN 0-201-00029-6.
  6. ^ а б Майкл Сипсер (1997). Введение в теорию вычислений . Бостон / Массачусетс: ISBN издательства PWS Publishing Co. 0-534-94728-X.
  7. ^ a b c Джон Э. Хопкрофт и Раджив Мотвани и Джеффри Д. Ульман (2003). Введение в теорию автоматов, языки и вычисления (PDF) . Река Аппер Сэдл / Нью-Джерси: Эддисон Уэсли. ISBN  0-201-44124-1.
  8. ^ FOLDOC Бесплатный онлайн-словарь вычислений, конечный автомат
  9. ^ http://cseweb.ucsd.edu/~ccalabro/essays/fsa.pdf
  10. ^ Аллан, К., Августинов, П., Кристенсен, А.С., Хендрен, Л., Кузинс, С., Лхотак, О., де Моор, О., Серени, Д., Ситтампалам, Г., и Тиббл, Дж. 2005. Добавление сопоставления трассировки со свободными переменными в AspectJ. Архивировано 18 сентября 2009 г. на Wayback Machine . В материалах 20-й ежегодной конференции ACM SIGPLAN по объектно-ориентированному программированию, системам, языкам и приложениям (Сан-Диего, Калифорния, США, 16–20 октября 2005 г.). ОПСЛА '05. ACM, Нью-Йорк, штат Нью-Йорк, 345-364.

Ссылки [ править ]

  • М.О. Рабин и Д. Скотт, "Конечные автоматы и их проблемы принятия решений", IBM Journal of Research and Development , 3 : 2 (1959), стр. 115–125.
  • Майкл Сипсер, Введение в теорию вычислений . PWS, Бостон. 1997. ISBN 0-534-94728-X . (см. раздел 1.2: Недетерминизм, стр. 47–63.) 
  • Джон Э. Хопкрофт и Джеффри Д. Уллман, Введение в теорию автоматов, языки и вычисления , издательство Addison-Wesley Publishing, Reading Massachusetts, 1979. ISBN 0-201-02988-X . (См. Главу 2.)