ternary string--一道组合数学题
题:用0,1,2三个字符组成n长的字符串,连续出现两个0或两个1的字符串有多少种?
符号说明:f(n)表示符合要求的n长字符串数,f0(n),f1(n),f2(n)分别表示以0,1,2结尾的符合要求的n长字符串数
用递归,考察n长字符串最后一个元素:
(1)若为2,则前n-1个元素恰对应一个符合要求(即连续出现两个0或两个1)的字符串,有f(n-1)个
(2)若为0,则考察倒数第二个元素,(1)若为0,则前n-2个元素任意取,有3n-2个符合要求的字符串;(2)若为1,则前n-1个字符是以1结尾的符合要求的长为n-1的字符串,有f1(n-1)个;(3)若为2,则前n-1个字符是以2结尾的符合要求的长为n-1的字符串,有f2(n-1)个
(3)若为1,类似(2)的分析
得到递归式如下
这个式子貌似不好解,可以考虑问题的反面,即既不出现00又不出现11的n长字符串有多少个?然后用3n减去这个值就得到原问题的解
用g(n)表示符合要求的n长字符串数,g0(n),g1(n),g2(n)分别表示以0,1,2结尾的既不出现00又不出现11的n长字符串数,称既不出现00又不出现11为“性质G”
分析是类似的,仍然考虑末尾的取值
(1)若为2,则前n-1个元素恰对应一个满足性质G的字符串,有g(n-1)个
(2)若为0,则倒数第二个元素必不为0,(1)若为1,则前n-1个字符是以1结尾的符合性质G的长为n-1的字符串,有g1(n-1)个;(3)若为2,则前n-1个字符是以2结尾的符合性质G的长为n-1的字符串,有g2(n-1)个
(3)若为1,类似(2)的分析
得到递归式:
写成矩阵形式:
这个是挺好解的,手工用特征值特征向量来求矩阵n-1次幂,也可以用计算机来解,下面是wanbo同学用mathematica解得的结果:
其中长长的表达式就是g(n),最终结果就是3n-g(n)