关于有限状态机的状态
about states of finite state machine
问题是令 sigma =(1,2,3,$)。我需要绘制它的图表,当总和 >_5 时输出 1。超过5则结转。
我想知道在这种情况下会是什么状态。我可以让 A = 我看过 1 B = 我看过 2,C = 我看过 3 和 D = 接受状态吗?
您不需要跟踪当前总和。您只需要跟踪总和模 5。
一种方法是让您的状态 space 为 A0、A1、A2、A3、A4 和 B0、B1、B2。如果进入"A"状态,则输出0,如果进入"B"状态,则输出1。
您的状态转换取决于您看到的下一个数字。例如:
- 如果你在A1,你看到的下一个数字是2,你跳转到A3,输出0。
- 如果你在A4,你看到的下一个数字是1,你跳转到B0,输出1。
- 如果你在B2,你看到的下一个数字是1,你输入A3,输出0。
- 如果你在B2,你看到的下一个数字是3,你输入B0,输出1。
一般来说,假设您处于状态 XY,其中 X 是 A 或 B,Y 是 0、1、2、3 或 4。设 D 是您看到的下一个数字。您将进入的下一个状态将是 X'Y',其中:
- 如果 D + Y < 5,则 X' 是 A。
- 如果 D + Y >= 5,则 X' 是 B。
- Y' 是 D + Y 模 5。
不,您不能只使用三种状态。到目前为止,您的 FSM 必须以某种方式继续计算输入值的当前总和。问题是 FSM 没有记忆(那将是另一种自动机),因此它必须是每个可能的数字组合的一个状态,这些数字的计算结果是所有可能的总和。
即:您需要一个表示 ("the current sum is 0") 的状态。让该状态为状态 0。这将是您的初始状态。其他状态将是 "the current sum is 1"(状态 1)、"the current sum is 2"(状态 2)、....、"the current sum is 5"(状态 5)、"the current sum is 6"(状态 6)等(不,您不需要无限数量的状态,例如,从状态 5 开始,值为 1 的转换将您再次引导到状态 1。
从状态 0,通过 1 的转换将您带到状态 1。通过 2 的转换到状态 2,然后通过 3 的转换到状态 3。很简单,不是吗?
例如,从状态 3 开始,带 1 的转换会引导您到转换 4,带 2 的转换到状态 5,这是一个接受状态,从状态 3 到状态 6 的转换,这也是一个接受状态。
再举个例子:从状态6开始,带1的转换带你到...状态2。没错:状态6意味着当前总和为6,超过1中的5。所以这就像转换 1,但它是一个可接受的状态,所以从状态 6 的转换去到与从状态 1 的转换去的相同的地方。这将帮助您构建 FSM。
实际上,较大的状态数是由您可以与1,2和3相加且第一次溢出5的最大值决定的。那将是 1+1+1+1+3 = 7。所以你需要定义从状态 0 到状态 7,当然还有检测到 $ 时的最终状态。
问题是令 sigma =(1,2,3,$)。我需要绘制它的图表,当总和 >_5 时输出 1。超过5则结转。
我想知道在这种情况下会是什么状态。我可以让 A = 我看过 1 B = 我看过 2,C = 我看过 3 和 D = 接受状态吗?
您不需要跟踪当前总和。您只需要跟踪总和模 5。
一种方法是让您的状态 space 为 A0、A1、A2、A3、A4 和 B0、B1、B2。如果进入"A"状态,则输出0,如果进入"B"状态,则输出1。
您的状态转换取决于您看到的下一个数字。例如:
- 如果你在A1,你看到的下一个数字是2,你跳转到A3,输出0。
- 如果你在A4,你看到的下一个数字是1,你跳转到B0,输出1。
- 如果你在B2,你看到的下一个数字是1,你输入A3,输出0。
- 如果你在B2,你看到的下一个数字是3,你输入B0,输出1。
一般来说,假设您处于状态 XY,其中 X 是 A 或 B,Y 是 0、1、2、3 或 4。设 D 是您看到的下一个数字。您将进入的下一个状态将是 X'Y',其中:
- 如果 D + Y < 5,则 X' 是 A。
- 如果 D + Y >= 5,则 X' 是 B。
- Y' 是 D + Y 模 5。
不,您不能只使用三种状态。到目前为止,您的 FSM 必须以某种方式继续计算输入值的当前总和。问题是 FSM 没有记忆(那将是另一种自动机),因此它必须是每个可能的数字组合的一个状态,这些数字的计算结果是所有可能的总和。
即:您需要一个表示 ("the current sum is 0") 的状态。让该状态为状态 0。这将是您的初始状态。其他状态将是 "the current sum is 1"(状态 1)、"the current sum is 2"(状态 2)、....、"the current sum is 5"(状态 5)、"the current sum is 6"(状态 6)等(不,您不需要无限数量的状态,例如,从状态 5 开始,值为 1 的转换将您再次引导到状态 1。
从状态 0,通过 1 的转换将您带到状态 1。通过 2 的转换到状态 2,然后通过 3 的转换到状态 3。很简单,不是吗?
例如,从状态 3 开始,带 1 的转换会引导您到转换 4,带 2 的转换到状态 5,这是一个接受状态,从状态 3 到状态 6 的转换,这也是一个接受状态。
再举个例子:从状态6开始,带1的转换带你到...状态2。没错:状态6意味着当前总和为6,超过1中的5。所以这就像转换 1,但它是一个可接受的状态,所以从状态 6 的转换去到与从状态 1 的转换去的相同的地方。这将帮助您构建 FSM。
实际上,较大的状态数是由您可以与1,2和3相加且第一次溢出5的最大值决定的。那将是 1+1+1+1+3 = 7。所以你需要定义从状态 0 到状态 7,当然还有检测到 $ 时的最终状态。