【问题标题】:Cross product of incomplete DFA's不完全 DFA 的叉积
【发布时间】:2017-01-17 16:32:21
【问题描述】:

我正在尝试在两个 DFA 之间进行叉积,但它们都是不完整的 DFA。

下图是我对两个不完整 DFA 之间的叉积的交集得出的答案。字母表是 {a,b,c,d,e}。

这是正确的还是它们不完整的事实改变了一切?

【问题讨论】:

  • 第一个 DFA 只接受以 a 或 b 开头的字符串。第二个 DFA 只接受以 c 开头的字符串。因此,相交语言将拒绝所有输入。您能否详细说明两个 DFA 的叉积的定义?你如何确定叉积的接受状态?是两者都接受(交集)还是两者都接受(并集)?

标签: dfa cross-product


【解决方案1】:

如果您正在构建叉积以找到并集,那么它们不完整的事实确实会使您的工作有所不同;但是,对于交叉点,您仍然可以使用这种基本方法。但是,你犯了一些错误:

让我们从左上角开始,看看状态A1之外的所有转换:

首先,您有一个标记为c 的状态转换,从状态A1 到状态A2。但是,这是不正确的,因为在标有 c 的顶部 DFA 中没有从 AA 的转换。然后,你有一个标记为a 的转换,它从状态A1 到它自己。这也是不正确的,因为没有从状态1 到任何标记为a 的转换。同样,没有从标记为 b 的状态 1 转换出来,因此也使您从 A1B1 的转换无效。

当使用不完整的 DFA 并生成这样的叉积时,只有状态 (p,q) 和状态 p 和状态 q 都有出边的字母时,您将只有状态 (p,q) 的出边。

因此,没有从开始状态转移。此时,我们可以停止工作,因为没有从起始状态转换,没有意义 - 生成的 DFA 不匹配。

解决此问题的另一种可能性是首先通过添加非接受状态(我将此状态称为)使两个 DFA 都完成。对于每个没有不同输出边缘的字母,该状态应该有一个从每个状态到它的边缘。例如,在第一个 DFA 中,对于 cde,将有一条从 A 的边。此外,每个字母都应该有从 的边。现在两个 DFA 都已完成。

当您执行此操作时,您最终会在A1 之外找到边缘:A∅ 用于aB∅ 用于b∅1 用于c∅∅ 用于de。剩下的留作练习,但如果你把它完全抽出来,你会再次发现从A1 到任何接受状态都没有路径。

实际上,如果您正在构建叉积以找到联合,则首先完成两个 DFA 是您需要做的 - 有了交集,就可以简单地丢弃任何一个 DFA 中涉及 的状态,因为达到 意味着您永远不会达到接受状态,但是对于联合,您需要保留它们,因为涉及 的某些状态可能正在接受叉积的状态。 (您仍然可以丢弃状态 ∅∅ 和任何优势)

【讨论】:

  • 非常完整和有用的答案!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多