多项式大小CFG,使得单词中的每个终端偶数次出现(大字母表)

时间:2010-12-13 14:00:14

标签: context-free-grammar chomsky-normal-form

找到所有语言L的无上下文语法(CFG) 单词使得一个单词中的每个终端在可能大的字母表中偶数次出现Σ

<击> 我的长期是(唯一的非终结者是S):

  

S⟶| SS

     

x∈Σ:S⟶xSx

     

x,y∈Σ:S⟶xxSyy| yySxx | xySxy | xySyx | yxSyx | yxSyx

这是对的吗? 制作会产生正确的单词,它们会生成所有单词吗?

编辑:大字母表上的CFG可以描述一种语言,每个终端出现偶数次吗?

EDIT_2:如果存在解,那么Chomsky Normal Form是否可能是|Σ|中的多项式?

1 个答案:

答案 0 :(得分:1)

甚至有一种常规语法来实现这一目标。由于每个常规语法都是按照定义无上下文的,因此答案是“是”。也可以构造有限自动机,但是因为你要求语法......

以下是如何:回想一下常规语法允许形式A - &gt;的规则。 b C或A - &gt; b或A - >; epsilon,其中A和C是非终端,b是终端。这实质上意味着每个非终端生成一个终端和另一个非终端,它将生成其余的字符串;我们可以说每个非终端都会对它生成的字符串进行某种特性的编码。

现在考虑字母表Sigma的所有子集。由于Sigma应该是有限的,所以子集(powerset)也是如此。让这组非终端成为西格玛的主力。

从规则开始:{} - &gt;每个终端a {a}。 对于每个非终端X,添加规则X - &gt;如果a在X中,则为X- {a};或X - &gt;如果a不在X中,则为X + {a} (我正在写一些+和 - 为了设置联合和区别)。

最后,添加{} - &gt; epsilon(空字)。

语法在其非终端中精确编码出现在奇数中的终端组,因此必须再次“取消”。