Детерминированный конечный автомат (ДКА, DFA, англ.deterministic finite automaton, DFSA, англ.deterministic finite-state automaton, DFSMангл.deterministic finite-state machine), известный также как детерминированный конечный распознаватель — это конечный автомат, принимающий или отклоняющий заданную строку символов путём прохождения через последовательность состояний, определённых строкой[1]. Имеет единственную последовательность состояний во время работы. Мак-Каллок и Уолтер Питтс были одними из первых исследователей, предложивших концепцию, похожую на конечный автомат в 1943 году[2][3].
Рисунок иллюстрирует детерминированный конечный автомат с помощью диаграммы состояний. В этом примере имеется три состояния — S0, S1 и S2 (отражены на рисунке окружностями). Автомат на вход принимает конечную последовательность нулей и единиц. Для каждого состояния существует стрелка перехода, ведущая из состояния в другое состояние как для 0, так и для 1. После чтения символа, ДКА детерминированно переходит из одного состояния в другое, следуя по стрелке перехода. Например, если автомат находится в состоянии S0, а входным символом является 1, то автомат детерминированно переходит в состояние S1. ДКА имеет начальное состояние (графически показывается стрелкой «из ниоткуда»), откуда начинается вычисление, и множествоконечных состояний (обозначаемых графически в виде двойной окружности), которые определяют, успешно ли закончились вычисления.
ДКА определяется как абстрактная математическая концепция, но часто реализуется в аппаратном и программном обеспечении для решения специфичных задач. Например, ДКА может моделировать программы, которые решают допустим ли введённый пользователем email адрес.
Пусть — строка над алфавитом . Автомат принимает строку , если последовательность состояний существует в со следующими условиями
, для
.
Словами, первое условие говорит, что машина начинает работу с состояния . Второе условие говорит, что для данного символа строки машина переходит из состояния в состояние согласно функции переходов . Последнее условие говорит, что машина принимает , если последний входной символ строки вынуждает машину перейти в одно из конечных состояний. В противном случае говорят, что автомат отвергает строку. Множество строк, которые принимает , является языком, распознаваемым автоматом , и этот язык обозначается .
Для более полного формального определения см. статью «Теория автоматов».
Полные и неполные автоматы
Согласно вышеприведённому определению, детерминированные конечные автоматы всегда полные — они определяют переход для каждого состояния и для каждого входного символа.
В то время, как используемое определение является наиболее общепринятым, некоторые авторы используют термин детерминированный конечный автомат для слегка другого понятия — автомата, который определяет самое большее один переход (а не в точности один как в вышеприведённом определении) для каждого состояния и каждого входного символа. Функции перехода позволяется быть частично определенной[англ.]. Если переход не определён, автомат останавливается.
Пример
Следующий пример является ДКА с двоичным алфавитом, который требует, чтобы вход содержал чётное число нулей.
Конечное состояние соответствует чётному числу нулей во входной строке, в то время как говорит о нечётном числе. 1 во входном потоке не изменяет состояние автомата. Когда входная строка заканчивается, конечное состояние покажет, содержала ли входная строка чётное число нулей, или нет. Если входная строка содержит чётное число нулей, закончит в конечном состоянии , так что входная строка будет принята.
Язык, распознаваемый , является регулярным языком, определяемым регулярным выражением((1*) 0 (1*) 0 (1*))*, где * является звездой Клини, например 1* означает любое число (возможно, равное нулю) последовательных единиц.
Свойства замкнутости
Если ДКА распознаёт языки, которые получаются путём применения операции на языки, распознаваемыми ДКА, то говорят, что ДКА замкнут относительно операции. ДКА замкнуты относительно следующих операций.
Работу заданного ДКА можно рассматривать как последовательность суперпозиций очень общей формулировки функций перехода на себя. Мы здесь построим такую функцию.
Для данного входного символа можно построить функцию перехода путём определения для всех . (Этот приём называется каррированием.) В этом ракурсе «действует» на состояние Q с получением другого состояния. Можно рассматривать результат суперпозиции функций, последовательно применённых к различным функциям , и так далее. Если дана пара букв , можно определить новую функцию , где обозначает суперпозицию функций.
Ясно, что этот процесс может быть рекурсивно продолжен, давая следующее рекурсивное определение :
, где является пустой строкой, а
, где и .
Функция определена для всех слов . Работа ДКА является последовательностью суперпозиций на себя.
Повторение суперпозиций функций образует моноид. Для функций перехода этот моноид известен как Моноид переходов[англ.], или, иногда, как полугруппа преобразований. Построение может быть обращено — если дана , можно реконструировать , так что эти два описания эквивалентны.
Локальные автоматы
Локальный автомат — это ДКА, для которого все дуги с той же меткой ведут в одну вершину. Локальные автоматы принимают класс формальных языков[англ.], для которых принадлежность слова к языку определяется «скользящим окном» длины два на слове[5][6]
Граф Майхилла над алфавитом A — это ориентированный граф с множеством вершинA и подмножеством вершин, помеченных как «начальная» и «конечная». Язык, принимаемый графом Майхилла, является множеством ориентированных путей из начальной вершины в конечную — граф тогда работает как автомат[5]. Класс языков, воспринимаемый графами Майхилла является классом локальных языков[7].
Стохастика в ДКА
Когда начальное состояние и конечные состояния игнорируются, ДКА с состояниями и алфавитом размера можно рассматривать как орграф с вершинами, в котором все вершины имеют исходящих дуг с метками (орграф с исходами). Известно, что когда является фиксированным целым, с высокой вероятностью наибольшая компонента сильной связности (англ. strongly connected component, SCC), в которой орграф с исходами выбран равномерно случайно, имеет линейный размер и может быть достигнут из любой вершины[8]. Было также доказано, что при возрастании по мере роста , весь орграф имеет фазовый переход к сильной связности подобно модели Эрдёша — Реньи для связности[9].
В случайном ДКА максимальное число вершин, достижимых из одной вершины с высокой вероятностью очень близко к числу вершин в наибольшей компоненте сильной связности[8][10]. Это также верно для наибольшего порождённого подграфа с минимальной полустепенью захода единица, который можно рассматривать как ориентированную версию -ядра[9].
Преимущества и недостатки
ДКА является одной из наиболее практичных моделей вычислений, поскольку существует тривиальный онлайн алгоритм[англ.] линейного времени и постоянной памяти для моделирования ДКА на входном потоке. Имеются также эффективные алгоритмы поиска распознавания ДКА:
дополнение языка, распознаваемого данным ДКА.
объединение/пересечение языков, распознаваемых двумя данными ДКА.
Поскольку ДКА могут быть сведены к канонической форме (минимальных ДКА), есть также два эффективных алгоритма определения
принимает ли ДКА какую-либо строку (Задача проверки пустоты)
принимает ли ДКА все строки (Задача проверки универсальности)
принимают ли два ДКА один и тот же язык (Задача проверки эквивалентности)
содержится ли язык, распознаваемый ДКА, в язык, распознаваемый другим ДКА (Задача проверки включения)
ДКА с минимальным числом состояний для конкретного регулярного языка (Задача минимизации)
ДКА эквивалентны по вычислительным возможностям недетерминированным конечным автоматам (НКА, англ.nondeterministic finite automata, NFAs). Это потому, во-первых, что любой ДКА является также и НКА, так что НКА может делать всё, что может делать ДКА. Также, если дан НКА, с помощью сведения ДКА к НКА[англ.] можно построить ДКА, который распознаёт тот же самый язык, что и НКА, хотя ДКА может иметь экспоненциально большее число состояний, чем НКА[11][12]. Однако даже при вычислительной эквивалентности НКА автоматам ДКА, вышеупомянутые задачи не обязательно решаются эффективно для НКА. Задача неуниверсальности для НКА имеет сложность PSPACE, поскольку имеются небольшие НКА с отклоняемыми наименьшими словами экспоненциального размера. ДКА является универсальным тогда и только тогда, когда все состояния являются конечными, но это неверно для НКА. Задачи эквивалентности, включения и минимизации также имеют сложность PSPACE, поскольку они требуют формирования дополнения НКА, что приводит к экспоненциальному взрыву размера[13].
С другой стороны, конечные автоматы сильно ограничены в языках, которые они распознают. Много простых языков, включая любую задачу, требующую более чем постоянной памяти для решения, не могут быть распознаны ДКА. Классическим примером простого языка, который не может распознать никакой ДКА, являются скобки или язык Дика, то есть язык, который состоит из правильно расставленных скобок, как в слове «(()())». Интуитивно ясно, что никакой ДКА не может распознать язык Дика, поскольку ДКА не в состоянии делать подсчёты — подобным ДКА автоматам нужно состояние, представляющее любое возможное число «открытых» скобок, что означает, что нужно иметь неограниченное число состояний. Другим простым примером является язык, состоящий из строк вида для некоторого конечного, но произвольно большого числа букв a с последующим равным числом букв b[14].
Michael Sipser.Introduction to the Theory of Computation. — Boston: PWS, 1997. — ISBN 0-534-94728-X. Section 1.1: Finite Automata, pp. 31-47. Subsection «Decidable Problems Concerning Regular Languages» of section 4.1: Decidable Languages, pp. 152—155.4.4 DFA can accept only regular language
Перевод Джон Хопкрофт, Раджив Мотвани, Джеффри Ульман. Введение в теорию автоматов, языков и вычислений. — Москва, Санкт-Петербург, Киев: Вильямс, 2002. — ISBN 5-8459-0261-4.
Грушо А. А. О предельных распределениях некоторых характеристик случайных автоматных графов // Матем. заметки. — 1973. — Т. 4. — P. 133–141, 633–637. — doi:10.1007/BF01095785.
Xing Shi Cai, Luc Devroye. The graph structure of a deterministic automaton chosen at random // Random Structures & Algorithms. — 2017. — Октябрь (т. 51, вып. 3). — doi:10.1002/rsa.20707.