Нет, вы не можете использовать только три состояния. Ваш FSM должен каким-то образом продолжать подсчитывать текущую сумму входных значений. Проблема в том, что FSM не имеет памяти (это был бы другой тип автоматов), поэтому он должен быть одним из состояний для каждой возможной комбинации чисел, которые оцениваются во всех возможных суммах.
То есть: вам нужно состояние, которое означает («текущая сумма равна 0»). Пусть это состояние будет состоять из 0. Это будет ваше начальное состояние. Другие состояния будут «текущая сумма равна 1» (состояние 1), «текущая сумма равна 2» (состояние 2), ...., «текущая сумма равна 5» (состояние 5), «текущая сумма равна 6 "(состояние 6) и т. Д. (Нет, вам не понадобится некоторое число состояний, например, из состояния 5, переход со значением 1 приведет вас снова к состоянию 1.
Из состояния 0 , переход с 1 приводит вас к состоянию 1. Переход с 2, к состоянию 2 и переход с 3 в состояние 3. Легко, не так ли?
Из состояния 3, например, переход с 1 ведет вас к переходу 4, переход с 2 в состояние 5, который является принимающим состоянием, и переход с 3 в состояние 6, что также является принятым состоянием.
Чтобы привести еще один пример: из состояния 6 переход с 1 приводит вас к состоянию 2. Это правильно: состояние 6 означает, что текущая сумма равна 6, что превышает 5 в 1. Таким образом, это похоже на переход 1, но это принятое состояние, поэтому переходы из состояния 6 переходят в те же места, что и переходы из состояния 1. Это поможет вам построить свой FSM.
Фактически, большее число состояний определяется наибольшим значением, которое вы можете суммировать с 1,2 и 3, которое переполняет 5 в первый раз. Это будет 1 + 1 + 1 + 1 + 3 = 7. Поэтому вам нужно определить из состояния 0 в состояние 7 и, конечно, конечное состояние при обнаружении $.
В вашем вопросе говорится «когда текущая сумма больше или равна 5». Поэтому вам нужно будет отслеживать, какова текущая сумма; поэтому вам понадобится другое состояние для каждой возможной суммы, и вам понадобится переход состояния для каждой комбинации «Я только что видел X и сумму того, что я видел с момента последнего выхода a 1 - Y ". Начните рисовать их на листе бумаги, и все должно стать ясным. – moonshadow
Благодарим вас за комментарий: D. Я думал об этом несколько минут, но я не могу понять, как отслеживать текущую сумму. Единственный инструмент, который у меня есть для этого вопроса, - «вход/выход». Можете ли вы привести мне пример такой диаграммы? – oliver
Подождите! Вы только что изменили вопрос, и теперь ваши принятые состояния - это те, в которых сумма меньше 5? –