【发布时间】:2012-05-21 10:35:08
【问题描述】:
我如何找到可以重新排列数字序列(可能包含类似项目)的方式的数量,以使数字不会放置在与其或类似数字相同的位置。
例如,[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 库可以生成我们想要的所有排列。
【问题讨论】:
标签: python permutation combinatorics