1

我所说的复杂组是指并非所有值都不同的组。也就是说,如果一个普通组是1,2,3,4,5,6,7(其中不同组合的数量是7C0+7C1+7C2...=2^7),那么一个例子复群是 1,1,1,3,3,5,7。如何计算可以从这些组中生成多少种不同的组合(顺序无关紧要)?

编辑:澄清这一点。例如,如果我们取 7C1=7,那么我们发现它不能应用于复杂的组。那是因为我们得到了 7 个不同的组,但其中一些是相等的(1=1=1 和 3=3),所以实际上只有 4 个不同的组(1,3,5,7)。

换句话说,在简单的 1,1,2 的情况下,简单的 2^3 会考虑这些组:

{},{1},{1},{2},{1,1},{1,2},{1,2},{1,1,2} = 8

我需要的是一种计算不同组数量的方法(我认为 {1,2}={2,1})。那会考虑这些:

{},{1},{2},{1,1},{1,2},{1,1,2} = 6

4

1 回答 1

2

它是集合中唯一元素 (counts+1) 的乘积。

Explanation :对于每个唯一数字,它可以出现zerok次,其中k是数字的重复次数。因此,每个唯一编号都有[0..k]ie 总(k+1)选项。所以它是集合中唯一元素(计数+1)的乘积。

For {1,1,2}: count+1 for 1= 2+1= 3and count+1 for 2= 1+1=2
所以答案是3*2 = 6

因为{1,1,1,3,3,5,7}它是(3+1)*(2+1)*(1+1)*(1+1) = 4*3*2*2 = 48

一个python3代码:

>>> import collections
>>> A = [1,1,1,3,3,5,7]
>>> def countComplexGroups(A):
...     count = collections.Counter(A)
...     rt = 1
...     for i in count: rt*=count[i]+1
...     return rt
...
>>> print(countComplexGroups(A))
48
于 2013-07-20T15:20:55.877 回答