我试图用Chomsky Normal Form构建一个CFG,尽可能少地接受包含唯一字符串a ^ 21的语言。
我明白我可以转换
S - > AAAAAAAAAAAAAAAAAAAAA A - >一个
但有没有其他方法可以缩短该语言,然后将其转换为Chomsky Normal Form?
答案 0 :(得分:1)
我们可以非常轻松地表明,我们需要至少六个符号,希望通过识别我们每次生成时最多可以将生成的字符串长度加倍,并希望在CNF中为此语言生成CFG,我们必须从2 ^ 0开始:< / p>
A_21 := ...
A_16 := A_16 A_16
A_8 := A_4 A_4
A_4 := A_2 A_2
A_2 := A_1 A_1
A_1 := a
然后我们可以证明CNF中没有语法,其中六个产生了我们的目标语言。我们通过自下而上构建语法来开始论证。
A_1 := a
才能获得任何字符串。A_2 := A_1 A_1
才能获得长度大于1的字符串。A_3
或跳过它并生成A_4
或两者。我们在下面考虑这些案例。案例1:A_3
A_3 := A_2 A_1
。A_21 := X Y
形式之一。所以我们最多可以添加两个。即使我们添加了现在最大的作品 - A_6
和A_12
- 我们也无法根据需要生成A_21
(我们最多可以生成A_18 := A_6 A_12
。所以添加A_3
无法为我们提供在六个作品中生成语言的语法。案例2:A_4
A_4 := A_2 A_2
。A_21 := X Y
形式之一。所以我们最多可以添加两个。我们目前的选项为A_5
,A_6
和A_8
。由于我们针对上述案例1所述的相同原因,A_5
和A_6
将失败。但是,A_8
并没有因为这种推理而失败,因此我们添加了A_8 := A_4 A_4
。A_20, A_19, A_17
或A_13
。我们无法使用现有作品生成任何这些作品。因此我们排除了一个包含6个作品的语法。如果您尝试使用上述推理找到包含7个作品的语法,您会发现几个。既然我们知道CNF中有7个制作语法,而没有6个制作语法,你就完成了。以下是7个生产语法中的一些:
S := A_18 A_3
A_18 := A_9 A_9
A_9 := A_6 A_3
A_6 := A_3 A_3
A_3 := A_2 A_1
A_2 := A_1 A_1
A_1 := a
S := A_17 A_4
A_17 := A_9 A_8
A_9 := A_8 A_1
A_8 := A_4 A_4
A_4 := A_2 A_2
A_2 := A_1 A_1
A_1 := a
S := A_16 A_5
A_16 := A_8 A_8
A_8 := A_4 A_4
A_5 := A_4 A_1
A_4 := A_2 A_2
A_2 := A_1 A_1
A_1 := a
S := A_15 A_6
A_15 := A_9 A_6
A_9 := A_6 A_3
A_6 := A_3 A_3
A_3 := A_2 A_1
A_2 := A_1 A_1
A_1 := a
S := A_14 A_7
A_14 := A_7 A_7
A_7 := A_4 A_3
A_4 := A_3 A_1
A_3 := A_2 A_1
A_2 := A_1 A_1
A_1 := a
S := A_13 A_8
A_13 := A_8 A_5
A_8 := A_5 A_3
A_5 := A_3 A_2
A_3 := A_2 A_1
A_2 := A_1 A_1
A_1 := a
S := A_12 A_9
A_12 := A_9 A_3
A_9 := A_6 A_3
A_6 := A_3 A_3
A_3 := A_2 A_1
A_2 := A_1 A_1
A_1 := a
S := A_11 A_10
A_11 := A_10 A_1
A_10 := A_8 A_2
A_8 := A_4 A_4
A_4 := A_2 A_2
A_2 := A_1 A_1
A_1 := a
还有更多。困难的部分显示没有任何有6个制作。