bin(n)bin(2 ^(k + 1)* n +1)^ R上下文自由吗?

时间:2019-02-11 06:28:25

标签: context-free-grammar regular-language pumping-lemma pushdown-automaton

bin是二进制中最短的数字

bin(n)bin(2 ^(k + 1)* n +1)^ R上下文是否自由?

k,n属于自然数。

我知道bin(n)bin(n + 1)^ R是上下文无关的,但我不知道如何解决bin(n)bin(2 ^(k + 1)* n +1)^ R 。如果没有上下文,有人可以帮助我建立上下文无关的语法吗?

2 个答案:

答案 0 :(得分:1)

假设x^R意味着x颠倒了,那么您正在寻找以下形式的字符串

n1(many zeros)(n)^R

由于在这种情况下,“许多零”只是一个正则表达式0*,因此您可以将n(n+1)^R的任何语法改编成这种语言,并且仍然没有上下文。

让我们看一下n = 5,k = 2

n = 101
2^(k+1) = 2^3 = 1000
1000 * 101 is 101000
101000 + 1 is 101001
101001^R is 100101

最后一个字符串是

n1(zeroes)n^R
101100101

答案 1 :(得分:0)

问题是bin(n)bin(2^(k+1) * n + 1)^R语言是否与上下文无关。我用bin(n)来表示自然数n的二进制表示形式,没有任何前导零。

假设bin(n') = x。在这里,x是一个以1开头的有限二进制字符串。让我们确定bin(2 ^(k + 1)* n + 1)的样子。首先,请注意,将一个数字乘以2会在该数字的二进制表示形式的末尾加上一个零。与使用十进制时乘以十相同。乘以2 ^(k + 1)将添加k + 1个零。由于k是自然数,因此必须添加至少一个零。向该数字加1会将最低有效位从0翻转到1。最终结果是bin(2^(k+1) * n + 1) = x(0^k)1

语言bin(n)bin(2^(k+1) * n + 1)^Rx(x(0^k)1)^R形式的字符串组成。我们可以通过反转每个串联的子字符串和串联顺序来分布^R,以查看这些字符串的形式为x1(0^k)(x^R)。我们注意到这些字符串的最外层部分以任意二进制字符串x开头,以x^R结尾;我们可以使用与上下文无关的语法来处理此问题,就像处理回文语言一样。最里面的组件是1(0^k),它描述了常规语言10*;我们当然可以通过CFG来处理。有效的CFG如下:

S := 0S0 | 1S1 | T
T := T0 | 1

得出此结论的主要见解是确定(bin(2^(k+1) * x + 1)^R的形式。