2017-11-17 12 views
1

私が参照している正確な問題と問題の分布の数はhereと計算されます。私はこれらの分布を明示的に知ることに興味があります。k個のボックスにn個のボールのすべての可能な分布を列挙します。

たとえば、5つのボールと3つのボックスがあります。1つの分布は、ボックス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) 

これは、基本的な再帰ロジックです。ボールの可能な数量を選択し、残りのボールと1つのボックスの数を少なくします。

リスト貼り付けの方法は言語に依存します。私は学生のための運動としてそれらを残す。

0

あなたはperms()によって生成された同じ行を取り除くためにunique()を使用することができます。

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] 
関連する問題