2016-07-02 13 views
-1

与えられたK個のオブジェクトのセットでは、サイズN(ここでN> K)のすべてのセットを生成する。例えば、集合{1,2}(K = 2)から始めて、サイズN = 3のすべての集合を生成すると、{1,1,1} {1,1,2}、{ 1,2,1}、{2,1,1}、{2,2,1}、{2,1,2}、{1,2,2}、{2,2,2}。サイズKのオブジェクトのより小さいセットからサイズNのすべてのセットを生成する。

ケンホワイトについての研究:私の研究では、C(mn)(n < m)を扱うアルゴリズムしか出てこなかったが、与えられたセットのアイテムの並べ替えと組み合わせのアルゴリズム。私はコードを投稿していません。なぜなら、アルゴリズムがなければ、私は自分のコードを達成しようとしますか?

私の以前の投稿は明確ではありませんでした。努力するが、誰かが私のためにこのコードを書くことができますか?後でそれを拾うために戻ってください。 6月27日22時54分には本当にプロフェッショナルで有用でした。

+0

これは不可能な目標です。なぜなら、 '{2,2,2}'は可能なセットではないからです。代わりにリストを使って作業しているのであれば、問題は非常に扱いやすいですが、実行する作業が残っているかどうかは不明です。 M個のアイテムのセットからN回サンプリングするのは非常に簡単で、置き換えも簡単です。 – amalloy

+0

あなたは 'K'を' 0'から '(K^N) - 1'まで数えています。 – beaker

答えて

0

セットに注文を割り当てることができますので、すでにお持ち帰りしたことはありません。 K[0]がすべて0回発生し、が発生するすべてのセットから開始し、0回、最後にK[last]Nと表示されます。次に、K[last-1]1回などと表示された場合、既に割り当てられた要素の合計がNに達するたびに、検索が短絡することを考慮してください。

擬似コード:

addAllSets(N, K, 0, new int[K], new Set()) //Initial call 

addAllSets(int targetCount, int K, int index, int[] prefix, Set allSets){ 
    if (index < k): //We still have the rest of the elements to consider 
     for i in range 0 to targetCount - 1: 
      prefix[index] = i //Try it with i of this element 
      addAllSets(targetCount - i, K, index + 1, prefix.copy, allSets) //Recursively check remaining elements 
    prefix[index] = targetCount //Or just fill in the rest of the set with copies of this element 
    allSets.add(prefix) //Add this to the set of sets 

プレフィックス店舗の要素のいくつかの数(関数が呼び出されたときに、合計カウントは常にK - targetCountになります。)のために、我々は「それを埋める」すべての時間をカウントし、我々はそれを追加すべてのセットのセット

関連する問題