我提到的具體問題以及該問題的分佈數量計算爲here。我有興趣明確知道這些分佈。枚舉n個球的所有可能分佈爲k個盒子
例如,有5個球和3個盒子:一個分配是盒子1中的2個球,盒子2中的2個,盒子3中的1個,被稱爲221,現在我想列出所有這些可能的分佈: -
。 。 。
一種方法是,我運行matlab命令:perms([0,0,0,0,0,1,1,1])
。這基本上產生了5個球和2支球的所有排列。但由於命令perms
無法識別相同的對象,所以存在大量重複計數。
我提到的具體問題以及該問題的分佈數量計算爲here。我有興趣明確知道這些分佈。枚舉n個球的所有可能分佈爲k個盒子
例如,有5個球和3個盒子:一個分配是盒子1中的2個球,盒子2中的2個,盒子3中的1個,被稱爲221,現在我想列出所有這些可能的分佈: -
。 。 。
一種方法是,我運行matlab命令:perms([0,0,0,0,0,1,1,1])
。這基本上產生了5個球和2支球的所有排列。但由於命令perms
無法識別相同的對象,所以存在大量重複計數。
很簡單......之類的。
function alloc(balls, boxes):
if boxes = 1
return [balls]
else
for n in range 0:balls
return alloc(balls-n, boxes-1)
這是基本的遞歸邏輯:挑選每個可能數量的球,然後重複其餘的球和少一個盒子。
列表粘貼方法將取決於語言;我把它們留給學生練習。
可以使用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]