如何编写将读取FSM状态集的程序。输入数据将来自文本文件,格式为(状态输入下一状态),最后一行为最终状态。例如:
s0 a s1
s1 a s2
s2 a s2
s1
程序输出将是:
a)FSM生成的字符串列表。
b)程序可以确定FSM是DFA还是NDFA并打印结果
答案 0 :(得分:2)
我不打算给你一个编码解决方案,但是有一些想法。
首先,FSM需要启动状态和结束状态,因此您缺少重要信息。
如果您正在生成字符串列表,那么您可能正在处理接受有限数量字符串的非常有限的FSM子集。因此,尝试各种可能性是合理的;按照图表中的每条路径进行操作,并在达到最终状态时进行打印。
考虑DFSM与NDFSM的区别。如果有多种方法可以使用某些输入,那么这是不确定的。因此,当您构建图形时,如果您有一个节点具有两个相同的转换到不同的状态,那么这是非确定性的。由于任何非决定论都会使整个系统成为非确定性的,因此决定论只是完全没有非决定论。
因此,您可能希望从实际创建表示开始。想到两种简单的方法。更直观地说,您可以创建图表。最简单的方法是创建一个节点类,然后创建每个节点的对象,包含一对过渡和目的地。
我更喜欢表示FSM的方法是使用哈希映射/字典。将节点和转换用作键,目标作为值。这使导航相当容易。
祝你好运!编辑:在确定非决定论时,不要忘记考虑epsilon过渡(就像我刚刚做的那样。:))