2017-11-17 159 views
1

我提到的具體問題以及該問題的分佈數量計算爲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無法識別相同的對象,所以存在大量重複計數。

回答

0

很簡單......之類的。

function alloc(balls, boxes): 

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

這是基本的遞歸邏輯:挑選每個可能數量的球,然後重複其餘的球和少一個盒子。

列表粘貼方法將取決於語言;我把它們留給學生練習。

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] 
相關問題