在DFA中,我们可以通过对两个自动机的状态进行叉积,并接受那些在两个初始自动机中都被接受的状态来进行两个自动机的交集操作。
联合操作类似进行。然而,虽然我可以很容易地使用epsilon转换在NFA中执行并集操作,但如何执行它们的交集操作呢?
在DFA中,我们可以通过对两个自动机的状态进行叉积,并接受那些在两个初始自动机中都被接受的状态来进行两个自动机的交集操作。
联合操作类似进行。然而,虽然我可以很容易地使用epsilon转换在NFA中执行并集操作,但如何执行它们的交集操作呢?
可能有点晚,但因为我今天遇到了类似的问题,所以想分享一下。首先要理解交集的含义。在这里,它意味着给定字符串e,e应该被两个自动机都接受。
考虑以下自动机:
直观地说,m=m1∩m2是接受同时包含'11'和'00'作为子串的字符串的自动机。这个想法是同时模拟两个自动机。
现在让我们正式定义交集。
m=(Q, Σ, Δ, q0, F)
让我们从定义m的状态开始; 如上所述,这是m1和m2中状态的笛卡尔积。因此,如果我们将a1,a2作为m1中状态的标签,将b1,b2作为m2中的状态,则Q将包含以下状态:a1b1,a2b1,a1b2,a2b2。此产品构造背后的思想是跟踪我们在m1和m2中的位置。构建产品自动机的另一种选择是允许更复杂的接受标准。通常,当NFA到达一组接受终态中的任何一个时,它会接受输入字符串。这可以扩展为状态的布尔组合。具体而言,您为交集构造自动机,就像为联合构造自动机一样,但是只有在两个自动机中都处于(相应的)接受终态时,才认为所得到的自动机接受输入字符串。