【问题标题】:Best way to calculate the number of unique orderings of a multiset计算多重集的唯一排序数的最佳方法
【发布时间】:2014-04-23 14:38:21
【问题描述】:

我正在寻找一种更好地计算以下内容的方法。 问题是我不知道这种组合的名称。 首先我想如果我有 3 个“a”和 2 个“b”, 然后我可以每次将 b 放在 a+1 个位置 _a_a_a_ ,对于 (a+1)^b 次,但是位置 0 然后 1 或 1 然后 0 的选择顺序是相同的:即“baba”。

我已经想出了这种递归方式来计算它。

/* find all permutations of a non unique sequence of 0s and 1s
... "a"s and "b"s etc... */
/* e.g. how many ways to arange 4 apples and 3 oranges, 35 */

int *perms(int a, int b){
    static int total = 0;
    if(!a && !b){
        total++;
        return 0;
    }
    if(a > 0){
        perms(a-1,b);
    }
    if(b > 0){
        perms(a,b-1);
    }
    return &total;
}

我有一种强烈的感觉,我可以做得更好。

【问题讨论】:

  • 所以我应该一直在寻找“多重集合的排列”,在这种情况下,我的答案是 (a+b)! / (a! * b!) .谢谢!
  • Donald Knuth 和“计算机编程的艺术”是你的杰作。拉尔斯曼有它。
  • @mbowden:既然您已经找到了答案,请随时将其发布为您问题的答案。这将对其他人有所帮助,并将此问题排除在“未回答”队列之外。

标签: c math


【解决方案1】:

由 cmets 中的 larsmans 给出的答案是 (a+b)! / (a! * b!) 或

factorial(a + b) / (factorial(a) * factorial(b))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多