В теории вычислений , разделе теоретической информатики , детерминированный конечный автомат ( DFA ) — также известный как детерминированный конечный акцептор ( DFA ), детерминированный конечный автомат ( DFSM ) или детерминированный конечный автомат ( DFSA ) — это конечный автомат , который принимает или отклоняет заданную строку символов, проходя через последовательность состояний, однозначно определяемую строкой. [1] Детерминированный относится к уникальности вычислительного цикла. В поисках простейших моделей для захвата конечных автоматов Уоррен Маккалок и Уолтер Питтс были среди первых исследователей, которые ввели концепцию, похожую на конечный автомат, в 1943 году. [2] [3]
На рисунке показан детерминированный конечный автомат с использованием диаграммы состояний . В этом примере автомата есть три состояния: S 0 , S 1 и S 2 (графически обозначены кружками). Автомат принимает конечную последовательность нулей и единиц в качестве входных данных. Для каждого состояния есть стрелка перехода, ведущая к следующему состоянию как для 0, так и для 1. При считывании символа DFA детерминированно переходит из одного состояния в другое, следуя стрелке перехода. Например, если автомат в данный момент находится в состоянии S 0 , а текущий входной символ равен 1, то он детерминированно переходит в состояние S 1 . DFA имеет начальное состояние (графически обозначенное стрелкой, входящей из ниоткуда), в котором начинаются вычисления, и набор состояний принятия (графически обозначенных двойным кружком), которые помогают определить, когда вычисление успешно.
DFA определяется как абстрактная математическая концепция, но часто реализуется в аппаратном и программном обеспечении для решения различных конкретных задач, таких как лексический анализ и сопоставление с образцом . Например, DFA может моделировать программное обеспечение, которое решает, является ли ввод данных пользователем в режиме онлайн, например, адреса электронной почты, синтаксически допустимым. [4]
DFA были обобщены до недетерминированных конечных автоматов (NFA) , которые могут иметь несколько стрелок с одинаковой меткой, начинающихся из состояния. Используя метод построения powerset , каждый NFA может быть переведен в DFA, который распознает тот же язык. DFA, а также NFA, распознают в точности множество регулярных языков . [1]
Детерминированный конечный автомат M — это 5- кортеж ( Q , Σ, δ , q 0 , F ) , состоящий из
Пусть w = a 1 a 2 ... a n будет строкой над алфавитом Σ . Автомат M принимает строку w, если последовательность состояний r 0 , r 1 , ..., r n существует в Q со следующими условиями:
На словах первое условие говорит, что машина начинает работу в начальном состоянии q 0 . Второе условие говорит, что при каждом символе строки w машина будет переходить из состояния в состояние в соответствии с функцией перехода δ . Последнее условие говорит, что машина принимает w, если последний ввод w заставляет машину остановиться в одном из принимающих состояний. В противном случае говорят, что автомат отвергает строку. Набор строк, которые принимает M, — это язык, распознаваемый M , и этот язык обозначается как L ( M ) .
Детерминированный конечный автомат без допустимых состояний и без начального состояния известен как система переходов или полуавтомат .
Более полное введение в формальное определение см. в статье Теория автоматов .
Следующий пример представляет собой DFA M с двоичным алфавитом, который требует, чтобы входные данные содержали четное число нулей.
M = ( Q , Σ, δ , q 0 , F ) где
Состояние S 1 означает, что на входе было четное число нулей, а S 2 означает нечетное число. 1 на входе не изменяет состояние автомата. Когда вход заканчивается, состояние покажет, содержал ли вход четное число нулей или нет. Если вход содержал четное число нулей, M завершит работу в состоянии S 1 , принимающем состоянии, поэтому входная строка будет принята.
Язык, распознаваемый M, — это регулярный язык , заданный регулярным выражением (1*) (0 (1*) 0 (1*))*
, где *
— звезда Клини , например, 1*
обозначает любое количество (возможно, ноль) последовательных единиц.
Согласно приведенному выше определению, детерминированные конечные автоматы всегда полны : они определяют из каждого состояния переход для каждого входного символа.
Хотя это наиболее распространенное определение, некоторые авторы используют термин детерминированный конечный автомат для несколько иного понятия: автомата, который определяет не более одного перехода для каждого состояния и каждого входного символа; функция перехода может быть частичной . [5] Если переход не определен, такой автомат останавливается.
Локальный автомат — это DFA, не обязательно полный, для которого все ребра с одинаковой меткой ведут к одной вершине. Локальные автоматы принимают класс локальных языков , тех, для которых принадлежность слова к языку определяется «скользящим окном» длины два на слове. [6] [7]
Граф Myhill над алфавитом A — это направленный граф с множеством вершин A и подмножествами вершин, помеченными как «старт» и «финиш». Язык, принимаемый графом Myhill, — это набор направленных путей от начальной вершины до конечной вершины: таким образом, граф действует как автомат. [6] Класс языков, принимаемых графами Myhill, — это класс локальных языков. [8]
Когда начальное состояние и состояния принятия игнорируются, DFA из n состояний и алфавита размера k можно рассматривать как орграф из n вершин, в котором все вершины имеют k исходящих дуг, помеченных 1, ..., k ( орграф с k -выходом). Известно, что когда k ≥ 2 является фиксированным целым числом, с высокой вероятностью наибольший сильно связанный компонент (SCC) в таком орграфе с k -выходом, выбранный равномерно случайным образом, имеет линейный размер и может быть достигнут всеми вершинами. [9] Также было доказано, что если k разрешено увеличиваться с ростом n , то весь орграф имеет фазовый переход для сильной связности, аналогичный модели Эрдёша–Реньи для связности. [10]
В случайном DFA максимальное количество вершин, достижимых из одной вершины, очень близко к количеству вершин в наибольшем SCC с высокой вероятностью. [9] [11] Это также верно для наибольшего индуцированного под-орграфа с минимальной входящей степенью один, который можно рассматривать как направленную версию 1 -ядра . [10]
Если DFA распознают языки, которые получены путем применения операции к языкам, распознаваемым DFA, то говорят, что DFA закрыты относительно операции. DFA закрыты относительно следующих операций.
Для каждой операции оптимальная конструкция относительно числа состояний была определена в исследовании сложности состояний . Поскольку DFA эквивалентны недетерминированным конечным автоматам (NFA), эти замыкания также могут быть доказаны с использованием свойств замыкания NFA.
Прогон данного DFA можно рассматривать как последовательность композиций очень общей формулировки функции перехода с собой. Здесь мы строим эту функцию.
Для заданного входного символа можно построить функцию перехода , определив для всех . (Этот трюк называется каррированием .) С этой точки зрения, «действует» на состояние в Q, чтобы получить другое состояние. Затем можно рассмотреть результат композиции функций, многократно примененной к различным функциям , , и так далее. Учитывая пару букв , можно определить новую функцию , где обозначает композицию функций.
Очевидно, этот процесс можно рекурсивно продолжить, дав следующее рекурсивное определение :
определено для всех слов . Прогон DFA представляет собой последовательность композиций с самим собой.
Повторная композиция функций образует моноид . Для функций перехода этот моноид известен как моноид перехода или иногда полугруппа преобразований . Построение также может быть обратным: если задано a , можно реконструировать a , и поэтому два описания эквивалентны.
DFA являются одной из наиболее практичных моделей вычислений, поскольку существует тривиальный линейный по времени, постоянный по пространству, онлайн-алгоритм для моделирования DFA на потоке входных данных. Кроме того, существуют эффективные алгоритмы для поиска DFA, распознающего:
Поскольку DFA можно свести к канонической форме ( минимальные DFA ), существуют также эффективные алгоритмы для определения:
DFA эквивалентны по вычислительной мощности недетерминированным конечным автоматам (NFA). Это связано с тем, что, во-первых, любой DFA также является NFA, поэтому NFA может делать то, что может делать DFA. Кроме того, имея NFA, используя конструкцию powerset, можно построить DFA, который распознает тот же язык, что и NFA, хотя DFA может иметь экспоненциально большее количество состояний, чем NFA. [15] [16] Однако, даже несмотря на то, что NFA вычислительно эквивалентны DFA, вышеупомянутые проблемы не обязательно решаются эффективно также для NFA. Проблема неуниверсальности для NFA является PSPACE-полной , поскольку существуют небольшие NFA с кратчайшим отвергающим словом в экспоненциальном размере. DFA является универсальным тогда и только тогда, когда все состояния являются конечными, но это не выполняется для NFA. Проблемы равенства, включения и минимизации также являются PSPACE-полными, поскольку они требуют формирования дополнения NFA, что приводит к экспоненциальному увеличению размера. [17]
С другой стороны, конечные автоматы имеют строго ограниченную мощность в языках, которые они могут распознавать; многие простые языки, включая любую задачу, требующую больше, чем константное пространство для решения, не могут быть распознаны DFA. Классический пример просто описанного языка, который не может распознать ни один DFA, это язык скобок или язык Дика , т. е. язык, состоящий из правильно парных скобок, таких как слово "(()())". Интуитивно, ни один DFA не может распознать язык Дика, потому что DFA не способны считать: автомат, подобный DFA, должен иметь состояние для представления любого возможного количества "открытых в данный момент" скобок, то есть ему потребуется неограниченное количество состояний. Другим более простым примером является язык, состоящий из строк вида a n b n для некоторого конечного, но произвольного количества a ' , за которыми следует равное количество b ' . [18]
Для заданного набора положительных слов и набора отрицательных слов можно построить DFA, который принимает все слова из и отклоняет все слова из : эта задача называется идентификацией DFA (синтез, обучение). Хотя некоторые DFA могут быть построены за линейное время, задача идентификации DFA с минимальным числом состояний является NP-полной. [19] Первый алгоритм для минимальной идентификации DFA был предложен Трахтенбротом и Барздином [20] и называется TB-алгоритмом . Однако TB-алгоритм предполагает, что все слова из до заданной длины содержатся либо в .
Позднее К. Ланг предложил расширение TB-алгоритма, не использующее никаких предположений о и , алгоритм Traxbar . [21] Однако Traxbar не гарантирует минимальность построенного DFA. В своей работе [19] Э. М. Голд также предложил эвристический алгоритм для минимальной идентификации DFA. Алгоритм Голда предполагает, что и содержат характеристический набор регулярного языка; в противном случае построенный DFA будет несовместим либо с , либо . Другие известные алгоритмы идентификации DFA включают алгоритм RPNI, [22] алгоритм слияния состояний на основе доказательств Blue-Fringe [23] и Windowed-EDSM. [24] Другое направление исследований — применение эволюционных алгоритмов : эволюционный алгоритм интеллектуальной маркировки состояний [25] позволил решить модифицированную задачу идентификации DFA, в которой обучающие данные (наборы и ) являются зашумленными в том смысле, что некоторые слова отнесены к неправильным классам.
Еще один шаг вперед связан с применением решателей SAT Марджином Дж. Х. Хойлом и С. Вервером: проблема идентификации минимального DFA сводится к решению выполнимости булевой формулы. [26] Основная идея состоит в том, чтобы построить акцептор расширенного префиксного дерева ( trie, содержащий все входные слова с соответствующими метками) на основе входных наборов и свести задачу поиска DFA с состояниями к раскрашиванию вершин дерева с состояниями таким образом, чтобы при объединении вершин с одним цветом в одно состояние сгенерированный автомат был детерминированным и соответствовал и . Хотя этот подход позволяет найти минимальный DFA, он страдает от экспоненциального раздувания времени выполнения при увеличении размера входных данных. Поэтому первоначальный алгоритм Хойла и Вервера позже был дополнен несколькими шагами алгоритма EDSM перед выполнением решателя SAT: алгоритм DFASAT. [27] Это позволяет сократить пространство поиска задачи, но приводит к потере гарантии минимальности. Другой способ сокращения пространства поиска был предложен Ульянцевым и др. [28] с помощью новых предикатов нарушения симметрии, основанных на алгоритме поиска в ширину : искомые состояния DFA ограничены нумерацией в соответствии с алгоритмом BFS, запущенным из начального состояния. Такой подход сокращает пространство поиска за счет исключения изоморфных автоматов.
Машины Тьюринга, движущиеся только вправо и только для чтения, являются особым типом машины Тьюринга , которая движется только вправо; они почти полностью эквивалентны DFA. [29] Определение, основанное на однократно бесконечной ленте, представляет собой 7- кортеж
где
Машина всегда принимает регулярный язык. Для того, чтобы язык был непустым, должен существовать хотя бы один элемент множества F ( состояние HALT ).