如何在Java中创建有限状态机

时间:2012-06-16 06:50:03

标签: java fsm state-machine

如何编写将读取FSM状态集的程序。输入数据将来自文本文件,格式为(状态输入下一状态),最后一行为最终状态。例如:

    s0   a   s1
    s1   a   s2 
    s2   a   s2 
    s1 

程序输出将是:

a)FSM生成的字符串列表。

b)程序可以确定FSM是DFA还是NDFA并打印结果

1 个答案:

答案 0 :(得分:2)

我不打算给你一个编码解决方案,但是有一些想法。

首先,FSM需要启动状态和结束状态,因此您缺少重要信息。

如果您正在生成字符串列表,那么您可能正在处理接受有限数量字符串的非常有限的FSM子集。因此,尝试各种可能性是合理的;按照图表中的每条路径进行操作,并在达到最终状态时进行打印。

考虑DFSM与NDFSM的区别。如果有多种方法可以使用某些输入,那么这是不确定的。因此,当您构建图形时,如果您有一个节点具有两个相同的转换到不同的状态,那么这是非确定性的。由于任何非决定论都会使整个系统成为非确定性的,因此决定论只是完全没有非决定论。

因此,您可能希望从实际创建表示开始。想到两种简单的方法。更直观地说,您可以创建图表。最简单的方法是创建一个节点类,然后创建每个节点的对象,包含一对过渡和目的地。

我更喜欢表示FSM的方法是使用哈希映射/字典。将节点和转换用作键,目标作为值。这使导航相当容易。

祝你好运!

编辑:在确定非决定论时,不要忘记考虑epsilon过渡(就像我刚刚做的那样。:))