EssayAI
Блог
Блог
Естественные науки

Автоматы Мура и Мили: отличия, формулы и примеры

11 июня 2026Время чтения: 8 минут
#автомат мили#автомат мура#конечный автомат#граф состояний#теория автоматов

Конечный автомат - это математическая модель устройства, которое читает входные символы по одному, переходит между конечным числом состояний и выдаёт выходные символы. Два классических типа таких автоматов - автомат Мили и автомат Мура - отличаются ровно одним: тем, от чего зависит выход. У Мили выход определяется парой «состояние плюс входной символ» и приписан к дуге перехода, у Мура выход зависит только от состояния и приписан к самому состоянию. Это маленькое различие тянет за собой всё остальное: число состояний, длину выходной строки и удобство построения схемы. Ниже разберём оба типа на одном живом примере - распознавателе подстроки «11» - выведем формулы функций выхода, покажем граф и таблицу переходов и объясним частые ошибки. Чтобы сразу почувствовать разницу, переключите тип автомата в калькуляторе ниже и проследите, как меняется выходная дорожка.

Что такое конечный автомат

Формально конечный автомат с выходом задаётся набором из шести элементов: множество состояний QQ, входной алфавит Σ\Sigma, выходной алфавит Δ\Delta, функция переходов δ\delta, функция выхода и начальное состояние q0q_0. Функция переходов одинакова у обоих типов: δ:Q×ΣQ\delta : Q \times \Sigma \to Q говорит, в какое состояние перейти из текущего по прочитанному символу. Различие только в функции выхода.

Слева автомат Мили: метка на дуге читается как вход дробь выход, единица загорается прямо в момент перехода по второй единице пары. Справа автомат Мура: выход написан внутри состояния, и подсветка выхода зажигается только после того, как автомат пришёл в состояние-акцептор

Для распознавателя подстроки «11» вход и выход двоичные: Σ=Δ={0,1}\Sigma = \Delta = \{0, 1\}. Выход 1 означает «только что прочитаны две единицы подряд». Автомату достаточно помнить, была ли предыдущая буква единицей, поэтому базовых состояний всего два: S0S_0 - предыдущий символ не единица (или это начало строки), и S1S_1 - предыдущий символ был единицей.

Автомат Мили: выход на дуге

В автомате Мили функция выхода зависит и от состояния, и от входного символа:

λ:Q×ΣΔ.\lambda : Q \times \Sigma \to \Delta.

Это значит, что выход «привязан» к переходу: одна и та же дуга всегда даёт один и тот же символ. Для нашего распознавателя нужны всего два состояния. Переходы и выходы такие:

S00/0S0,S01/0S1,S10/0S0,S11/1S1.\begin{aligned} S_0 \xrightarrow{\,0\,/\,0\,} S_0, \quad & S_0 \xrightarrow{\,1\,/\,0\,} S_1, \\ S_1 \xrightarrow{\,0\,/\,0\,} S_0, \quad & S_1 \xrightarrow{\,1\,/\,1\,} S_1. \end{aligned}

Запись на дуге читается как «вход / выход». Единица выдаётся ровно на одной дуге - S11/1S1S_1 \xrightarrow{1/1} S_1, когда автомат уже находится в S1S_1 (предыдущая буква была единицей) и приходит ещё одна единица. Именно в этот такт замечена пара «11». Длина выходной строки у автомата Мили всегда равна длине входной строки: один прочитанный символ - один выданный.

Граф автомата Мили с двумя состояниями: на дуге S1 по входу 1 стоит метка 1 дробь 1, она и выдаёт единицу при распознавании пары
Граф автомата Мили с двумя состояниями: на дуге S1 по входу 1 стоит метка 1 дробь 1, она и выдаёт единицу при распознавании пары

Автомат Мура: выход в состоянии

В автомате Мура функция выхода зависит только от состояния:

ω:QΔ.\omega : Q \to \Delta.

Выход теперь нельзя «спрятать» на конкретной дуге - он определяется тем, где автомат оказался. Поэтому двух состояний уже не хватает: состояние S1S_1 означает «предыдущая буква единица», но из него по единице нужно выдать 1, а из него же по нулю - 0, а выход не может зависеть от входа. Решение - добавить третье состояние S2S_2 с выходом 1, в которое автомат попадает ровно тогда, когда замечена пара «11»:

ω(S0)=0,ω(S1)=0,ω(S2)=1.\omega(S_0) = 0, \qquad \omega(S_1) = 0, \qquad \omega(S_2) = 1.

Переходы при этом устроены так, что по единице из S1S_1 или S2S_2 автомат идёт в S2S_2, а по нулю из любого состояния - в S0S_0. Есть и вторая особенность: автомат Мура выдаёт символ выхода стартового состояния ещё до чтения первого символа входа. Поэтому при входной строке длины nn выходная строка имеет длину n+1n + 1. Это хорошо видно в калькуляторе: переключите тип на «автомат Мура» - дорожка выхода станет на одну клетку длиннее и сдвинется относительно входа.

Граф состояний и таблица переходов

Граф состояний - это ориентированный граф: вершины это состояния, дуги это переходы, помеченные входными символами. У Мили на дугу добавляют ещё и выход через дробь, у Мура выход пишут внутри вершины. Состояние-акцептор (с выходом 1) часто рисуют двойным кружком. Тот же автомат удобно задать таблицей переходов. Для автомата Мили:

Состояниевход 0вход 1
S0S_0S0S_0 / 0S1S_1 / 0
S1S_1S0S_0 / 0S1S_1 / 1

В ячейке стоит «следующее состояние / выход». Для автомата Мура выход выносят в отдельный столбец, потому что он не зависит от входа:

Состояниевыходвход 0вход 1
S0S_00S0S_0S1S_1
S1S_10S0S_0S2S_2
S2S_21S0S_0S2S_2

Граф и таблица - две записи одного и того же автомата; в задачах обычно требуют обе.

Преобразование Мили в Мур и обратно

Автоматы Мили и Мура эквивалентны по выразительной силе: любой язык, который распознаёт один тип, распознаёт и другой. Поэтому их всегда можно преобразовать друг в друга.

При переходе от Мили к Муру выход с дуги «вносят» внутрь состояния. Если в состояние входят дуги с разными выходами, его приходится расщепить на несколько копий - по одной на каждое значение выхода. Поэтому число состояний у Мура обычно больше или равно числу состояний у Мили (в нашем примере было 2, стало 3). Обратно, при переходе от Мура к Мили выход состояния переносят на все входящие в него дуги, и лишние состояния часто можно слить - автомат Мили компактнее.

Преобразование автомата Мили в Мур: состояние с разными выходами входящих дуг расщепляется на две копии, число состояний растёт
Преобразование автомата Мили в Мур: состояние с разными выходами входящих дуг расщепляется на две копии, число состояний растёт

Практический вывод: Мили обычно требует меньше состояний и реагирует на вход в тот же такт, поэтому удобен для компактных распознавателей. Мур проще проектировать аппаратно - выход снимается прямо с регистра состояния и не «дёргается» в середине такта, что важно для синхронных цифровых схем.

Частые ошибки

  • Считать, что выходные строки совпадают посимвольно. У Мура выход на один символ длиннее: первый символ это выход стартового состояния до чтения входа. Значимая часть совпадает, но строки сдвинуты на такт.
  • Пытаться построить Мур с тем же числом состояний, что у Мили. Если в одно состояние входят дуги с разными выходами, его обязательно нужно расщепить - иначе выход в состоянии определить нельзя.
  • Писать выход у Мура на дуге. У Мура выход приписан только к состоянию. Метка на дуге это лишь входной символ.
  • Забывать про начальный выход у Мура. Автомат Мура выдаёт символ ещё до первого входа - это часть выходной строки, его нельзя пропускать.
  • Путать функцию переходов и функцию выхода. Переходы δ\delta у обоих типов одинаковы; различается только функция выхода (λ\lambda против ω\omega).

FAQ

Чем автомат Мили отличается от автомата Мура? У Мили выход зависит от состояния и входного символа и стоит на дуге перехода (λ(q,x)\lambda(q, x)). У Мура выход зависит только от состояния и стоит в вершине (ω(q)\omega(q)). Из-за этого Мур обычно требует больше состояний, а его выходная строка на один символ длиннее.

Можно ли любой автомат Мили преобразовать в автомат Мура? Да. Оба типа эквивалентны по выразительной силе. При преобразовании выход переносят с дуг в состояния, при необходимости расщепляя состояния с разными выходами входящих дуг, поэтому число состояний может вырасти.

Почему у автомата Мура выходная строка длиннее, чем у Мили? Мур выдаёт выход стартового состояния ещё до чтения первого символа, поэтому при входе длины nn получается n+1n + 1 выходных символов. У Мили каждый прочитанный символ даёт ровно один выходной, и длины совпадают.

Коротко

Автоматы Мура и Мили различаются только функцией выхода: у Мили выход λ(q,x)\lambda(q, x) зависит от состояния и входа и стоит на дуге, у Мура выход ω(q)\omega(q) зависит лишь от состояния и стоит в вершине. Из-за этого Мур обычно требует больше состояний и выдаёт строку на символ длиннее (есть выход стартового состояния). Функция переходов у обоих одинакова, а сами автоматы эквивалентны и преобразуются друг в друга. Граф состояний и таблица переходов - две равноправные записи одного автомата, которые в задачах требуют составить вместе.

Доверьте текст нейросети EssayAI

Открыть EssayAI

Бесплатно, на русском языке и без VPN

Читайте также