1. 程式人生 > >把M位的2^M種不同的0-1串按圓排列劃分(3)終結

把M位的2^M種不同的0-1串按圓排列劃分(3)終結

接上篇

對迴圈的解析原理就是把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個數的和的形式的演算法,在此不提供。見諒!