如何找到可以重新排列数字序列(可能包含类似项目)的方式的数量,以便数字不会放置在与其或类似数字相同的位置。
例如,[0,0,0,1,1,1]
只能以一种方式重新排列,即[1,1,1,0,0,0]
.
[0,0,0,1,1,1,1]
不能以任何方式安排。
[1,2,2,14]
可以以两种方式排列,即[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 库可以根据我们的需要生成所有排列。