查找数据集排列的所有多重集

时间:2015-07-10 23:42:13

标签: php algorithm combinatorics multiset

我在PHP中有一个包含7个元素的数据集,为简单起见,我们可以假设它具有以下内容:

$S = array("A", "B", "C", "D", "E", "F", "G");

我试图在S中为每个多集的变量(可指定)元素数生成所有多重集的列表。

例如,如果我想要所有包含2个元素的多个集合,它将输出以下内容(为简单起见省略引号):

{(A,A),(A,B),(A,C),(A,D),(A,E),(A,F),(A,G),(B,B),(B,C),(B,D),
    (B,E),(B,F),(B,G),(C,C),(C,D),(C,E),(C,F),(C,G),(D,D),(D,E),
    (D,F),(D,G),(E,E),(E,F),(E,G),(F,F),(F,G),(G,G)}

我知道multichoose公式可以找到多重集[a,b] = [n-1,k] for (a+b)!/(a!b!)的数量,但不知道如何自己生成实际的多重集。

1 个答案:

答案 0 :(得分:1)

要枚举n multichoose k,枚举n + k-1选择k,然后将结果的位置i减去i(从0开始索引)。

例如,要枚举3 multichoose 3,枚举5选择3并映射

012 -> 000
013 -> 001
014 -> 002
023 -> 011
024 -> 012
034 -> 022
123 -> 111
124 -> 112
134 -> 122
234 -> 222.