我正在尝试在两个DFA之间进行交叉产品,但它们都是不完整的DFA' s。
以下图片是我提出的两个不完整DFA之间的交叉产品交叉的答案。字母表是{a,b,c,d,e}。
它是否正确或它们是否完整的事实改变了一切?
答案 0 :(得分:1)
如果您正在构建交叉产品以找到联合,那么它们不完整的事实会使您的工作变得不同;但是,对于交叉点,您仍然可以使用此基本方法。但是,你犯了一些错误:
让我们从左上角开始,查看状态A1
之外的所有转换:
首先,您有一个标记为c
的状态转换,从状态A1
到状态A2
。但是,这是不正确的,因为顶部DFA中没有A
到A
的转换,标有c
。然后,您有一个标记为a
的转换,从状态A1
转移到自身。这也是不正确的,因为没有从州1
过渡到标有a
的任何内容。同样地,没有从标有1
的州b
转出,因此也会使您从A1
转换为B1
无效。
使用不完整的DFA并制作这样的交叉产品时,只有状态为(p,q)
且状态为p
且状态为q
的状态∅
时才会有外边缘状态A
具有传出边缘。
因此,没有转换超出启动状态。此时,我们可以停止工作,因为没有转换超出启动状态,没有任何意义 - 生成的DFA不匹配任何内容。
如何解决这个问题的另一种可能性是首先通过添加非接受状态来完成两个DFA(我称之为状态∅
)。对于不存在不同传出边缘的每个字母,该状态应该从每个状态到达它。例如,在第一个DFA中,c
,d
和e
会有∅
到∅
的边缘。此外,每封信都应该有A1
到A∅
的边缘。现在两个DFA都已完成。
执行此操作后,您最终得到a
的边缘:B∅
b
,∅1
c
,∅∅
({1}}和d
e
和A1
。其余部分留作练习,但如果你完全画出来,你会再次发现从∅
到任何接受状态都没有路径。
如果您正在构建交叉产品以找到联合,那么事先让DFA完成是您需要做的事情 - 允许简单地丢弃任何涉及{{{}的交叉点的交叉点。 1}}在DFA中,因为到达∅
意味着你永远不会达到接受状态,但是你需要保留它们,因为某些涉及∅
的状态可能会接受状态跨产品。 (你仍然可以抛弃状态∅∅
和任何边缘)