【问题标题】:Find all multisets for permutations of a dataset查找数据集排列的所有多重集
【发布时间】:2015-09-29 20:38:48
【问题描述】:

我有一个包含 7 个元素的 php 数据集,为简单起见,我们可以假设它如下:

$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)}

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

【问题讨论】:

    标签: php algorithm combinatorics multiset


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-01-28
      • 2013-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-18
      • 1970-01-01
      相关资源
      最近更新 更多