数字が同じ場所に配置されないように、または同様の数字が配置されたのと同じ場所に配置されないように、一連の数字(同様のアイテムを含む可能性がある)を再配置できる方法の数を見つけるにはどうすればよいですか。
たとえば、[0,0,0,1,1,1]
は 1 つの方法でのみ再配置でき、それは[1,1,1,0,0,0]
です。
[0,0,0,1,1,1,1]
どうにもアレンジできません。
[1,2,2,14]
2 つの方法で配置できます[2,1,14,2], [2,14,1,2]
。
[1,1,2,2,14]
4 つの方法で配置できます[14,2,1,1,2], [2,2,14,1,1], [2,2,1,14,1], [2,14,1,1,2]
。
数学の解決策は利用可能ですが、プログラミングの概念を使用して簡単な方法を考えていました。数学コードは、このようなものです.. (すみません、正しい形式で投稿できませんでした)
∫∞0 Ln1(x)..Lnr(x)e−xdx
ここで、r は項目の数、ni は項目 i の出現回数、Lk は k 番目のラゲール多項式です。たとえば、1,1,2,2,14 の場合、r=3、n1=2、n2=2、n3=1 なので、符号までの再配置の数は
∫∞0 L2(x)L2(x)L1(x)e−xdx
= ∫∞0 12(x2−4x+2)12(x2−4x+2)(1−x)e−xdx
= ∫∞0(−14x5+94x4−7x3+9x2−5x+1)e−xdx
= −4
しかし、私たちが望むようにすべての順列を生成できる Python ライブラリがあるかどうかを考えていました。