======State machine (Государственная машина)====== Конечный автомат — это математическая абстракция, используемая для разработки алгоритмов. Конечный автомат считывает набор входных данных и переходит в другое состояние на основе этих входных данных. Состояние — это описание состояния системы, ожидающей выполнения перехода. Переход — это набор действий, которые необходимо выполнить при выполнении условия или получении события. На диаграмме состояний кружки представляют каждое возможное состояние, а стрелки представляют переходы между состояниями. Глядя на конечное состояние, вы можете кое-что различить в серии входных данных, ведущих к этому состоянию. Существует два типа основных конечных автоматов: детерминированный конечный автомат Этот тип допускает только один возможный переход для любого разрешенного входа. Это похоже на [[software:development:web:docs:Glossary:Statement|утверждение]] «если» : это ''if x then doThis else doThat'' невозможно. Компьютер должен выполнить один из двух вариантов. недетерминированный конечный автомат Учитывая некоторое состояние, ввод может привести к более чем одному другому состоянию. Рисунок 1: Детерминированный конечный автомат. {{ :software:development:web:docs:glossary:statemachine1.png?200 |}} Машина переходит из состояния 1 в состояние 2 для входа X и из состояния 1 в состояние 3 для входа Y. На рисунке 1 состояние начинается в Состоянии 1; состояние меняется на состояние 2 при вводе «X» или на состояние 3 при вводе «Y». Рисунок 2: Недетерминированный конечный автомат. {{ :software:development:web:docs:glossary:statemachine2.png?200 |}} Машина может оставаться в состоянии 1, переходя в себя, или может переходить из состояния 1 в состояние 2 для входа X. На рисунке 2 при наличии входного сигнала «X» состояние может сохраниться или измениться на состояние 2. Обратите внимание, что любое [[software:development:web:docs:Glossary:Regular_expression|регулярное выражение]] может быть представлено конечным автоматом.