我指的确切问题和问题的分布数计算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
无法识别相同的对象,因此存在大量的过度计数。
答案 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)
这是基本的递归逻辑:选择每个可能数量的球,然后重复剩余的球和一个更少的球。
列表粘贴方法将依赖于语言;我留下他们作为学生的练习。