【发布时间】: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:既然您已经找到了答案,请随时将其发布为您问题的答案。这将对其他人有所帮助,并将此问题排除在“未回答”队列之外。