2

我有一个 DFA A 和一个 CFG G,然后我必须检查 G 是否生成了 A 不接受(被 A 拒绝)的无限词,以及一个不错的复杂度时间。

我想用 CFG 构建一个图,如果它包含一个有向循环,那么就会产生一个无限的语言。顶点是变量,对于每个产品,我都会画一些边。输入都是被 DFA 拒绝的单词,当我找到一个循环时,我可以说 CFG 生成了被 DFA A 拒绝的无限语言。

我不知道如何在算法中转换它,或者如果我的建议不正确,我必须创建一个新的。

编辑:我可以将我的 cfg 转换为 CNF,然后转换为 DFA(使用 chomsky)。之后,我尝试找到一个循环。但是我转换后的 dfa 的状态可能比我的 dfa a 少……我认为我需要如何在我的 cfg 中获得 DFA A 拒绝的单词。

4

1 回答 1

3

给定 CFG G,构造 PDA B。给定 DFA A 和 PDA B,构造 PDA C 使得 C 接受 L(C) = L(B) \ L(A),其中 \ 是集差。现在,L(C) 正好是 PDA B 接受的词的语言(因此由 CFG G 生成)但不被 DFA A 接受,即拒绝。

现在,问题是 B 的语言是否是无限的。我们做得到。一种方法是将 PDA 转换回 CFG,然后将 CFG 放入 CNF - 删除不必要和无用的符号。然后,在非终结符之间创建一个依赖树。如果任何剩余的(生产性)非终结符号依赖于自身,即存在循环,则该语言是无限的。否则,语言是有限的(如果没有生产符号剩余,则为空)。

于 2017-04-06T14:39:06.433 回答