A конечный автомат (FSM ) или конечный автомат (FSA, множественное число: автоматы), конечный автомат, или просто конечный автомат, представляет собой математическую модель вычислений. Это абстрактная машина, которая может находиться ровно в одном из конечного числа состояний в любой момент времени. FSM может переходить из одного состояния в другое в ответ на некоторые входы ; переход из одного состояния в другое называется переходом. Автомат определяется списком его состояний, его начального состояния и входов, запускающих каждый переход. Конечные автоматы бывают двух типов - детерминированные конечные автоматы и недетерминированные конечные автоматы. Детерминированный конечный автомат может быть сконструирован эквивалентным любому недетерминированному.
Поведение конечных автоматов можно наблюдать на многих устройствах в современном обществе, которые выполняют заранее определенную последовательность действий в зависимости от последовательности событий, с которыми они представлены. Простыми примерами являются торговые автоматы, которые выдают продукты при внесении правильной комбинации монет, лифты, чья последовательность остановок определяется этажами, запрашиваемыми пассажирами, светофоры, которые изменяют последовательность, когда машины ждут, и кодовые замки, которые требуют ввода последовательности чисел в правильном порядке.
Конечный автомат имеет меньшую вычислительную мощность, чем некоторые другие модели вычислений, такие как машина Тьюринга. Различие в вычислительной мощности означает, что есть вычислительные задачи, которые машина Тьюринга может выполнять, а конечный автомат - нет. Это связано с тем, что память конечного автомата ограничена количеством состояний, которые она имеет. Конечные автоматы изучаются в более общей области теории автоматов.
Примером простого механизма, который можно смоделировать с помощью конечного автомата, является турникет. Турникет, используемый для контроля доступа к метро и аттракционам, представляет собой ворота с тремя вращающимися рычагами на уровне пояса, одна из которых находится напротив входа. Первоначально руки заблокированы, блокируя вход, не позволяя посетителям пройти. Если положить монету или жетон в прорезь турникета, рычаги разблокируются, и один клиент сможет пройти через него. После того, как покупатель проходит, руки снова блокируются, пока не будет вставлена другая монета.
Турникет, рассматриваемый как конечный автомат, имеет два возможных состояния: Заблокирован и Разблокирован . Есть два возможных входа, которые влияют на его состояние: вставка монеты в прорезь (coin ) и нажатие на рычаг (push ). В заблокированном состоянии нажатие на руку не имеет никакого эффекта; независимо от того, сколько раз вводится вход push, он остается в заблокированном состоянии. Вставка монеты, то есть предоставление автомату ввода coin, меняет состояние с Locked на Unlocked . В разблокированном состоянии добавление дополнительных монет не имеет никакого эффекта; то есть предоставление дополнительных входных данных coin не изменяет состояние. Тем не менее, клиент, проталкивая рычаги, давая на вход push, возвращает состояние обратно на Заблокировано .
Конечный автомат турникета может быть представлен таблицей перехода между состояниями , отображающие для каждого возможного состояния переходы между ними (на основе входных данных, переданных в машину) и выходы, являющиеся результатом каждого входа:
Текущее состояние | Вход | Следующее состояние | Выход |
---|---|---|---|
Заблокировано | coin | Разблокировано | Разблокирует турникет, чтобы покупатель мог пройти через него. |
push | Locked | None | |
Unlocked | coin | Unlocked | None |
push | Заблокировано | Когда клиент протолкнется, турникет запирается. |
Конечный автомат турникета также может быть представлен направленным графом, который называется диаграммой состояний (см. Выше). Каждое состояние представлено узлом (кружок). Ребра (стрелки) показывают переходы из одного состояния в другое. Каждая стрелка помечена входом, который запускает этот переход. Вход, который не вызывает изменения состояния (например, вход coin в состоянии Unlocked ), представлен круговой стрелкой, возвращающейся в исходное состояние. Стрелка в узле Заблокировано от черной точки указывает, что это начальное состояние.
Состояние - это описание состояния системы, ожидающей выполнения перехода. Переход - это набор действий, которые должны выполняться при выполнении условия или при получении события. Например, при использовании аудиосистемы для прослушивания радио (система находится в состоянии «радио») получение стимула «следующая» приводит к переходу к следующей станции. Когда система находится в состоянии «CD», «следующий» стимул приводит к переходу к следующей дорожке. Одинаковые стимулы запускают разные действия в зависимости от текущего состояния.
В некоторых представлениях конечного автомата также можно связать действия с состоянием:
Используются несколько типов таблиц переходов между состояниями. Наиболее распространенное представление показано ниже: комбинация текущего состояния (например, B) и ввода (например, Y) показывает следующее состояние (например, C). Полная информация о действии не описана в таблице напрямую и может быть добавлена только с помощью сносок. Определение конечного автомата, включающее полную информацию о действиях, возможно с использованием таблиц состояний (см. Также виртуальный конечный автомат ).
Текущее. состояниеВход | Состояние A | Состояние B | Состояние C |
---|---|---|---|
Вход X | ... | ... | ... |
Вход Y | ... | Состояние C | ... |
Вход Z | ... | ... | ... |
Унифицированный язык моделирования имеет обозначение для описания конечных автоматов. Конечные автоматы UML преодолевают ограничения традиционных конечных автоматов, сохраняя при этом их основные преимущества. Конечные автоматы UML представляют новые концепции иерархически вложенных состояний и ортогональных областей, одновременно расширяя понятие действий. Конечные автоматы UML имеют характеристики как машин Мили, так и машин Мура. Они поддерживают действия, которые зависят как от состояния системы, так и от инициирующего события, как в машинах Мили, а также действия входа и выхода, которые являются связаны с состояниями, а не переходами, как в машинах Мура.
Язык спецификаций и описания является стандартом из ITU, который включает графические символы для описания действий при переходе:
SDL встраивает базовые типы данных, называемые «абстрактными типами данных», язык действий и семантику выполнения, чтобы сделать конечный автомат исполняемым.
Существует большое количество вариантов для представления конечного автомата, такого как показанный на рисунке 3.
В дополнение к их использованию при моделировании реактивного представленные здесь системы, конечные машины играют важную роль во многих областях, включая электротехнику, лингвистику, информатику, философию, биологию, математика, программирование видеоигр и логика. Конечные автоматы - это класс автоматов, изучаемый в теории автоматов и теории вычислений. В информатике конечные автоматы широко используются для моделирования поведения приложений, проектирования аппаратных цифровых систем, программной инженерии, компиляторов, сетей. протоколы, а также изучение вычислений и языков.
Конечные автоматы можно подразделить на акцепторы, классификаторы, преобразователи и секвенсоры.
Принимающие (также называемые детекторами или распознавателями ) производят двоичный вывод, указывая, принят ли принятый ввод. Каждое состояние акцептора либо принимает, либо не принимает. После получения всех входных данных, если текущее состояние является состоянием приема, вход принимается; в противном случае он отклоняется. Как правило, вводом является последовательность символов (знаков); действия не используются. Начальное состояние также может быть состоянием приема, и в этом случае акцептор принимает пустую строку. Пример на рисунке 4 показывает акцептор, который принимает строку "nice". В этом акцепторе единственное принимающее состояние - это состояние 7.
(возможно, бесконечный) набор последовательностей символов, называемый формальным языком, является обычным языком, если есть некий акцептор, который принимает именно этот набор. Например, набор двоичных строк с четным числом нулей является обычным языком (см. Рис. 5), в то время как набор всех строк, длина которых является простым числом, не является.
Акцептор может также можно описать как определение языка, который будет содержать каждую строку, принимаемую акцептором, но ни одну из отклоненных; этот язык принимается принимающей стороной. По определению, языки, принимаемые акцепторами, являются обычными языками.
. Проблема определения языка, принимаемого данным акцептором, является примером - самого по себе обобщения проблемы кратчайшего пути к графы с ребрами, взвешенными элементами (произвольного) полукольца.
Пример принимающего состояния показан на рис.5: детерминированный конечный автомат (DFA), который определяет, есть ли двоичная входная строка содержит четное количество нулей.
S1(который также является начальным состоянием) указывает состояние, в котором было введено четное количество нулей. S 1, следовательно, является состоянием приема. Этот акцептор завершит работу в состоянии принятия, если двоичная строка содержит четное количество нулей (включая любую двоичную строку, не содержащую нулей). Примеры строк, принимаемых этим акцептором: ε (пустая строка ), 1, 11, 11..., 00, 010, 1010, 10110 и т. Д.
Классификаторы - это обобщение акцепторов, которые производят n-арный вывод, где n строго больше двух.
Преобразователи выдают выходной сигнал на основе заданного входа и / или состояния с использованием действий. Они используются для управляющих приложений и в области вычислительной лингвистики.
В управляющих приложениях различают два типа:
Секвенсоры (также называемые генераторами ) - это подкласс акцепторов и преобразователей, которые имеют однобуквенный ввод алфавит. Они создают только одну последовательность, которую можно рассматривать как выходную последовательность выходных сигналов акцептора или преобразователя.
Еще одно различие между детерминированным (DFA ) и недетерминированные (NFA, GNFA ) автоматы. В детерминированном автомате каждое состояние имеет ровно один переход для каждого возможного входа. В недетерминированном автомате вход может привести к одному, более чем одному или отсутствию перехода для данного состояния. Алгоритм построения набора мощности может преобразовать любой недетерминированный автомат в (обычно более сложный) детерминированный автомат с идентичной функциональностью.
Конечный автомат с одним состоянием называется «комбинаторным автоматом». Он разрешает действия только при переходе в состояние. Эта концепция полезна в тех случаях, когда требуется несколько конечных автоматов для совместной работы, и когда удобно рассматривать чисто комбинаторную часть как форму конечного автомата, подходящую для инструментов проектирования.
Есть и другие наборы семантики, доступные для представления конечных автоматов. Например, есть инструменты для моделирования и проектирования логики для встроенных контроллеров. Они объединяют иерархические конечные автоматы (которые обычно имеют более одного текущего состояния), потоковые графы и таблицы истинности на одном языке, что приводит к другому формализму и набору семантики. Эти диаграммы, как и оригинальные конечные автоматы Харела, поддерживают иерархически вложенные состояния, ортогональные области, действия состояний и переходные действия.
В соответствии с общей классификацией, найдены следующие формальные определения.
Детерминированный конечный автомат или детерминированный конечный автомат - это пятерка , где:
для обоихДля детерминированных и недетерминированных автоматов принято позволять быть частичной функцией, т. е. необязательно определять для каждой комбинации и . Если конечный автомат находится в состоянии , следующим символом будет и не определено, тогда может объявить об ошибке (т.е. отклонить ввод). Это полезно в определениях общих конечных автоматов, но менее полезно при преобразовании машины. Некоторые алгоритмы в их стандартной форме могут потребовать общих функций.
Конечный автомат имеет ту же вычислительную мощность, что и машина Тьюринга, которая ограничена таким образом, что его голова может выполнять только операции «чтения» и всегда должна двигаться слева направо.. То есть каждый формальный язык, принятый конечным автоматом, принимается такой ограниченной машиной Тьюринга, и наоборот.
A Конечный преобразователь является следовательной , где:
Если функция вывода зависит от состояния и символа ввода (), это определение соответствует модели Мили и может быть смоделировано как машина Мили. Если функция вывода зависит только от состояния (), это определение соответствует модели Мура и может быть смоделировано как машина Мура. Конечный автомат без функции вывода вообще известен как полуавтомат или система перехода.
. Если мы не будем принимать во внимание первый выходной символ автомата Мура, , то его можно легко преобразовать в эквивалентную машину Мили для вывода, установив функцию вывода для каждого перехода Мили (т. е. пометив каждый край) выходной символ, заданный для состояния Мура назначения. Обратное преобразование менее прямолинейно, поскольку состояние машины Мили может иметь разные выходные метки на входящих переходах (краях). Каждое такое состояние должно быть разделено на несколько состояний машины Мура, по одному для каждого выходного символа инцидента.
Оптимизация конечного автомата означает поиск машины с минимальным количеством состояний, выполняющей то же самое. функция. Самый быстрый из известных алгоритмов, делающий это, - это алгоритм минимизации Хопкрофта. Другие методы включают использование таблицы импликации или процедуры редукции Мура. Кроме того, ациклические FSA можно минимизировать за линейное время.
В цифровой схеме конечный автомат может быть построен с использованием программируемое логическое устройство, программируемый логический контроллер, логические вентили и триггеры или реле. Более конкретно, для аппаратной реализации требуется регистр для хранения переменных состояния, блок комбинационной логики, который определяет переход состояния, и второй блок комбинационной логики, который определяет вывод FSM. Одной из классических аппаратных реализаций является контроллер Ричардса.
. В машине Медведева выход напрямую связан с триггерами состояния, что минимизирует временную задержку между триггерами и выходом.
Через Кодирование состояния для конечных автоматов с низким энергопотреблением может быть оптимизировано для минимизации энергопотребления.
Для создания программных приложений с конечными автоматами обычно используются следующие концепции:
Конечные автоматы часто используются в интерфейсе компиляторов языков программирования. Такой интерфейс может содержать несколько конечных автоматов, которые реализуют лексический анализатор и синтаксический анализатор. Начиная с последовательности символов, лексический анализатор строит последовательность языковых токенов (таких как зарезервированные слова, литералы и идентификаторы), из которых анализатор строит синтаксическое дерево. Лексический анализатор и синтаксический анализатор обрабатывают регулярные и контекстно-свободные части грамматики языка программирования.
Также известны процессы конечных цепей Маркова. как подмены конечного типа.
На Викискладе есть средства массовой информации, связанные с Конечный автомат. |