如何为NFA制作州过渡表?

时间:2013-04-11 08:48:22

标签: java data-structures

我已经使用二维数组为DFA创建了转换表。例如,存储10个状态和两个转换。

transition = new int[10][2]; 

然而,对于NFA,我们有许多可能的过渡。下面的示例,当值0到来时,您可以转到S2或S3。所以,我不知道应该使用哪种Java结构。

我正在尝试为NFA创建一天的表,但我所做的所有方式都非常复杂。例如,使用,Hashtable,Set等。

请您分享一些代码示例或任何想法吗?

Table for an NFA

1 个答案:

答案 0 :(得分:1)

为每个状态使用bitset,并为每个转换使用按位或|。例如,S1 = 001,S2 = 010,S3 = 100.现在S2 | S3 = 110,因此您的{S2,S3}转换为110.如果用int表示,则允许最多32个状态;如果用long表示,则允许最多32个状态;对于更多状态(或更易于使用的按位操作),请使用BitSet

顺便提一下,任何NFA都可以转换为DFA,例如, http://www.cs.odu.edu/~toida/nerzic/390teched/regular/fa/nfa-2-dfa.html用于教程,因此这可能是另一种选择,具体取决于您在此处尝试做的事情。