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 。如果没有上下文,有人可以帮助我建立上下文无关的语法吗?
答案 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)^R
由x(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
的形式。