将n个球的所有可能分布枚举成k个框

时间:2017-11-17 22:18:24

标签: algorithm matlab combinations permutation combinatorics

我指的确切问题和问题的分布数计算here。我有兴趣明确地了解这些发行版。

例如,有5个球和3个盒子:一个分布是框1中的2个球,框2中的2个,框3中的1个,称为221,现在我想列出所有这些可能的分布: -

212

131

104

。 。

一种方法是运行matlab命令:perms([0,0,0,0,0,1,1,1])。这基本上产生了5个球和2个棒的所有排列。但由于命令perms无法识别相同的对象,因此存在大量的过度计数。

2 个答案:

答案 0 :(得分:0)

您可以使用unique()删除perms()生成的相同行:

A = unique(perms([0,0,0,0,0,1,1,1]), 'rows');
% `A` will contain all combinations, not permutations, of [0,0,0,0,0,1,1,1]

答案 1 :(得分:0)

非常简单......有点。

function alloc(balls, boxes):

    if boxes = 1
        return [balls]
    else
       for n in range 0:balls
           return alloc(balls-n, boxes-1)

这是基本的递归逻辑:选择每个可能数量的球,然后重复剩余的球和一个更少的球。

列表粘贴方法将依赖于语言;我留下他们作为学生的练习。

相关问题