Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 具有重复和限制的计数置换_Arrays_Math_Permutation_Combinatorics - Fatal编程技术网

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
后面直接跟随no
0
的限制

例如:

有效:
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