Algorithm 将n个球的所有可能分布枚举到k个框中

Algorithm 将n个球的所有可能分布枚举到k个框中,algorithm,matlab,combinations,permutation,combinatorics,Algorithm,Matlab,Combinations,Permutation,Combinatorics,我指的正是这个问题,并且计算了这个问题的分布数。我对明确了解这些分布很感兴趣 例如,有5个球和3个盒子:一个分布是盒子1中的2个球,盒子2中的2个,盒子3中的1个,称为221。现在我想列出所有这些可能的发行版:- 212 131 104 。 . 一种方法是运行matlab命令:perms([0,0,0,0,0,1,1])。这基本上会生成5个球和2个杆的所有排列。但是,由于命令perms无法识别相同的对象,因此存在大量的过度计数。您可以使用来清除perms()生成的相同行。: 您可以使用删除由p

我指的正是这个问题,并且计算了这个问题的分布数。我对明确了解这些分布很感兴趣

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

212

131

104

。 .

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

您可以使用来清除
perms()生成的相同行。

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


很简单。。。有点

function alloc(balls, boxes):

    if boxes = 1
        return [balls]
    else
       for n in range 0:balls
           return alloc(balls-n, boxes-1)
这是基本的递归逻辑:选择每个可能的球数,然后在剩余的球上重复,少一个盒子


列表粘合方法将取决于语言;我把它们留给学生做练习。

非常简单。。。有点

function alloc(balls, boxes):

    if boxes = 1
        return [balls]
    else
       for n in range 0:balls
           return alloc(balls-n, boxes-1)
这是基本的递归逻辑:选择每个可能的球数,然后在剩余的球上重复,少一个盒子

列表粘合方法将取决于语言;我把它们留给学生做练习