【发布时间】:2012-05-21 16:51:23
【问题描述】:
我正在为自动机理论做作业,我必须确定一个单词是否被确定性有限自动机的转移函数接受
我有这个输入文件:
6 8 0 2
2
5
0 0 a
0 1 a
1 1 b
1 2 c
1 3 c
3 4 d
4 4 d
4 5 d
3
aaabcccc
aabbbbcdc
acdddddd
输入以4个整数开头,第一个是自动机的状态数,接下来是自动机的转移数,第三个数字是初始状态,然后是最终状态数。然后是最终状态(在示例中,最终状态是 2 和 5)。
然后是 N 行(N 是转换的数量),每行有 2 个整数和一个字符 I、J 和 C,表示转换的状态,即从状态 i 到状态 J 的转换字符 C。在这一行之后是一个整数 S,它将包含要测试的字符串的数量,然后是 S 行与相应的字符串。
这个程序的输出应该是:
Case #2:
aaabcccc Rejected
aabbbbcdc Rejected
acdddddd Accepted
它应该说明字符串是被接受还是被拒绝。到目前为止,我只对输入进行了编码。
我不知道如何最方便地表示自动机。我应该简单地使用数组吗?我会对数组应用什么逻辑?在事先不知道自动机字母表的情况下,有什么办法可以做到吗?我需要一个数据结构来表示自动机吗?我对这个任务有点坚持,并且想要一些想法,一些伪代码或想法来完成它。代码是另一种语言吗?我不想要这个解决方案,因为我想做我的任务,但如果我可以使用一些帮助
【问题讨论】:
-
我不是该主题的专家,可能会在这里提出一个愚蠢的问题。为什么你有两个转换,你从同一个状态开始,你到达不同的状态,相同的事件/字符触发转换?这意味着状态本身也有内部状态?
-
@sergico:这就是为什么这样的图被称为非确定性的,有时会有几个转换。因此,您需要一些回溯。所有这样的自动机都可以用(更大的)确定性自动机来表示,但它可能不值得计算。