用C语言实现NFA到DFA的转换过程
NFA (nondeterministic finite-state automata)是不确定性有限状态自动机的简写,NFA的定义为:
一个不确定性有限状态自动机由以下部分所组成:
A. 一个有限的输入字符集I
B. 一个有限的状态集S
C. 状态转换函数f: S x I -> P(S),P(S)为s的幂集
D. 一个结束状态集Q,Q是S的子集
E. 一个初始状态s0 (属于S)
F. 表示为A(I, S, f, Q, s0)
与NFA相对应,DFA (deterministic finite-state automata)表示确定性有限状态自动机。与NFA不同,DFA不存在Epsilon转换,并且每一个状态转换函数的值只对应一个状态,即一个状态输入一个字符,只能有一个状态相对应。
NFA与DFA的区别
显然,DFA更加适合我们进行字符串匹配,因为输入一个字符,总能从一个状态确定地转换为另一个状态,直到终结状态。NFA一个输入可能对应多个状态,因此需要进行回溯,先尝试一条路径,发现走不通,再回退到原来的状态尝试另外一条路径,显然匹配算法不如DFA简单。
给定一个NFA,总有一个DFA与之对应,即一个NFA可以转换成一个等价的DFA,我们将使用子集构造算法实现NFA到DFA的转换。
1