【问题标题】:Algorithm that checks if a context free grammar generates infinite language that a DFA rejects检查上下文无关语法是否生成 DFA 拒绝的无限语言的算法
【发布时间】:2017-09-01 08:29:56
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: algorithm context-free-grammar formal-languages automaton


    【解决方案1】:

    给定 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 - 删除不必要和无用的符号。然后,在非终结符号之间创建一个依赖树。如果任何剩余的(生产性)非终结符号依赖于自身,即存在循环,则该语言是无限的。否则,语言是有限的(如果没有生产性符号剩余,则为空)。

    【讨论】:

    • 最后一个问题。这个算法的复杂时间是O(n^2)吧?
    • @JackFenn 好问题;我需要对每个步骤进行一些挖掘,以了解整体复杂性是什么。 O(n^2) 至少应该是最坏情况下的下限,因为如果原始 DFA 和 PDA 具有相同数量的状态,则不同语言的 PDA 具有那么多状态。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多