Arrays 具有重复和限制的计数置换
我想计算重复的排列,并且只计算Arrays 具有重复和限制的计数置换,arrays,math,permutation,combinatorics,Arrays,Math,Permutation,Combinatorics,我想计算重复的排列,并且只计算3不同符号0,1,2,以及在1后面直接跟随no0的限制 例如: 有效:01202212 无效:10… 我计算了这些置换子集的计数 是(3^count(0))*(2^count(1))*(3^count(2)),但这是错误的。如果没有,我如何计算exakt计数?很明显: -长度K以1结尾的有效序列可能由以下内容组成 将1添加到任何长度为K-1的有效序列中 -长度K以2结尾的有效序列可能由以下内容组成 将2添加到任何长度为K-1的有效序列中 -长度K以0结尾的有效序列可
3
不同符号0,1,2
,以及在1
后面直接跟随no0
的限制
例如:
有效:01202212
无效:10…
我计算了这些置换子集的计数
是(3^count(0))*(2^count(1))*(3^count(2))
,但这是错误的。如果没有,我如何计算exakt计数?很明显:-长度K以1结尾的有效序列可能由以下内容组成
将1添加到任何长度为K-1的有效序列中 -长度K以2结尾的有效序列可能由以下内容组成
将2添加到任何长度为K-1的有效序列中 -长度K以0结尾的有效序列可能由以下内容组成
将0添加到以0或2结尾的长度为K-1的有效序列中 这么简单的Python程序
def valid123(n):
a = [[0]*3 for _ in range(n)]
a[0][0] = 1
a[0][1] = 1
a[0][2] = 1
summ = 3
for i in range(1, n):
a[i][0] = summ - a[i-1][1]
a[i][1] = summ
a[i][2] = summ
summ = sum(a[i])
return summ
for i in range(1,10):
print(i, valid123(i))
给予
相应的具有简单的递归表示a(n)=3*a(n-1)-a(n-2)
-斐波那契子集,并且存在一些闭合公式:
a(n) = (ap^n - am^n)/(ap-am), with ap := (3+sqrt(5))/2, am := (3-sqrt(5))/2
a(n) = (ap^n - am^n)/(ap-am), with ap := (3+sqrt(5))/2, am := (3-sqrt(5))/2