Детерминированный конечный автомат

Детерминированный конечный автомат (ДКА, DFA, англ. deterministic finite automaton, DFSA, англ. deterministic finite-state automaton, DFSM англ. deterministic finite-state machine), известный также как детерминированный конечный распознаватель — это конечный автомат, принимающий или отклоняющий заданную строку символов путём прохождения через последовательность состояний, определённых строкой[1]. Имеет единственную последовательность состояний во время работы. Мак-Каллок и Уолтер Питтс были одними из первых исследователей, предложивших концепцию, похожую на конечный автомат в 1943 году[2][3].

Пример детерминированного конечного автомата, который принимает только двоичные числа, делящиеся на три. Состояние S0 является одновременно и начальным состоянием, и конечным состоянием. Например, строка «1001» приводит к последовательности состояний S0, S1, S2, S1, S0, а потому принимается.

Рисунок иллюстрирует детерминированный конечный автомат с помощью диаграммы состояний. В этом примере имеется три состояния — S0, S1 и S2 (отражены на рисунке окружностями). Автомат на вход принимает конечную последовательность нулей и единиц. Для каждого состояния существует стрелка перехода, ведущая из состояния в другое состояние как для 0, так и для 1. После чтения символа, ДКА детерминированно переходит из одного состояния в другое, следуя по стрелке перехода. Например, если автомат находится в состоянии S0, а входным символом является 1, то автомат детерминированно переходит в состояние S1. ДКА имеет начальное состояние (графически показывается стрелкой «из ниоткуда»), откуда начинается вычисление, и множество конечных состояний (обозначаемых графически в виде двойной окружности), которые определяют, успешно ли закончились вычисления.

ДКА определяется как абстрактная математическая концепция, но часто реализуется в аппаратном и программном обеспечении для решения специфичных задач. Например, ДКА может моделировать программы, которые решают допустим ли введённый пользователем email адрес.

ДКА распознаёт в точности множество регулярных языков[1], которые, среди прочего, полезны для лексического анализа и сопоставления с образцом. ДКА могут быть построены из недетерминированного конечного автомата (НКА, англ. nondeterministic finite automata, NFAs) с помощью сведения ДКА к НКА.

Формальное определение

Детерминированный конечный автомат является 5-кортежем , состоящим из

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

  1. , для
  2. .

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

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

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

Полные и неполные автоматы

Согласно вышеприведённому определению, детерминированные конечные автоматы всегда полные — они определяют переход для каждого состояния и для каждого входного символа.

В то время, как используемое определение является наиболее общим, некоторые авторы используют термин детерминированный конечный автомат для слегка другого понятия — автомата, который определяет самое большее один переход для каждого состояния и каждого входного символа. Функции перехода позволяется быть частично определенной. Если переход не определён, автомат останавливается.

Пример

Следующий пример является ДКА с двоичным алфавитом, который требует, чтобы вход содержал чётное число нулей.

где

  • и
  • определяется следующей таблицей переходов:
0
1
S1S2S1
S2S1S2

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

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

Свойства замкнутости

Автомат слева вверху распознаёт язык всех бинарных строк, содержащих по меньшей одну подстроку «00». Нижний автомат справа распознаёт все двоичные строки с чётным числом «1». Нижний левый автомат получается как производный из первых двух, он распознаёт пересечение обоих языков.

Если ДКА распознаёт языки, которые получаются путём применения операции на языки, распознаваемыми ДКА, то говорят, что ДКА замкнут относительно операции. ДКА замкнуты относительно следующих операций.

Для каждой операции оптимальное построение с учётом числа состояний определяется в исследовании позиционной сложности.

Поскольку ДКА эквивалентны недетерминированным конечным автоматам (НКА, англ. nondeterministic finite automata, NFA), эти замыкания могут быть доказаны с помощью свойств замыканий НКА.

Как моноид переходов

Работу заданного ДКА можно рассматривать как последовательность суперпозиций очень общей формулировки функций перехода на себя. Мы здесь построим такую функцию.

Для данного входного символа можно построить функцию перехода путём определения для всех . (Этот приём называется каррированием.) В этом ракурсе «действует» на состояние 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].

См. также

  • Детерминированный ациклический конечный автомат
  • Минимизация ДКА
  • Монадическая логика второго порядка
  • Сведение НКА к ДКА
  • Квантовый конечный автомат
  • Машины Тьюринга с движущейся вправо читающей головкой
  • Задача разделения слов
  • Машина Тьюринга
  • Двухсторонний детерминированный конечный автомат

Примечания

Литература

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.