把M位的2^M种不同的0-1串按圆排列划分(3)终结

来源:互联网 发布:galgame资讯软件 编辑:程序博客网 时间:2024/04/30 04:17

接上篇

对循环的解析原理就是把n分解成n个数相加的种类。

对循环的解析如下(以M=6为例):

上篇的杨辉三角数是:1,6,15,20,15,6,1

对应的1的个数是0,1,2,3,4,5,6

由于0和1的对称性,只需分析1的个数是0,1,2,3的情况。

0个1,自然只有一个,自成一组

1个1的情况,只能分解成1为1,因而这个循环中只有一个特征串:100000,可以表示6个串

2个1的情况,按第一篇的介绍,可以表示成(0,4),把它分解成2个数相加的情况为三种情况:4 = 0 + 4,对应特征串110000,可表示6个串; 4 = 1 + 3,对应特征串101000,可表示6个串;4 = 2 + 2,对应特征串100100.,可表示3个串(因为对称)。总数: 6 + 6 + 3 = 15。

3个1的情况, ,按第一篇的介绍,可以表示成(0,0,3),把它分解成3个数相加的情况为四种情况:3 = 0 + 0 + 3,对应的特征串111000,可表示6个串; 3 = 0 + 1 + 2,对应特征串110100,可表示6个串; 3 = 0 + 2 + 1,对应的特征串110010,可表示6个串; 3 = 1+ 1 +1,对应特征串101010, 可表示2个串;  总数:6 + 6 + 6 + 2 = 20。

对于任意的M位数,都可以这样分解,从而得到所有的特征串。

至于,分解(M - n)为n个数的和的形式的算法,在此不提供。见谅!


原创粉丝点击