2011-12-27 9 views
1

私は、特定の方法でセットのパーティションを生成したいと思います。これらのパーティションを生成する過程でサイズNではないすべてのパーティションをフィルタリングする必要があります。一般的な解決策は "Generate all “unique” subsets of a set (not a powerset)"です。特定のサイズのセットパーティションを生成するにはどうすればよいですか?

[a,b,c] 
[a,b] 
[c] 
[d,e,f] 
[d,f] 
[e] 

、以下「ユニーク」要素:以下の部分集合との組Sについて

a, b, c, d, e, f 

N = 2あるべき引数で実行している関数/メソッドの結果:

[[a,b,c], [d,e,f]] 

次のパーティションは基礎となるデータ構造は重要ではなく、アレイ、セットまたは何であってもよい

[[a,b,c], [d,f], [e]] 
[[a,b], [c], [d,e,f]] 
[[a,b], [c], [d,f], [e]] 

:関数/メソッドによってフィルタリングされます。


理由:すべてのパーティションを生成する関数/メソッドではなく、計算集約的であるので、私は、私はすべてのパーティションの完全なセットを持って前にいくつかのパーティションをフィルタリングする必要があります。


"Generating the Partitions of a Set" によると、可能なパーティションの数が膨大なことができます:44152005855084346 23のための要素。私のデータは開始セットの50〜300個の要素なので、どこにでも保存する前に、サイズがN以外のパーティションをフィルタリングする必要があります。

+1

あなたは 'Set'オブジェクト、または配列を使用していますか? –

+0

なぜ 'N = 2'は3つの要素を持つセットを生成するのですか?ゼロベースのカウントを使用していますか?それとも、結果セット内のサブセットの数ですか? – Phrogz

+0

@m_x、私は配列を使用します。 – skanatek

答えて

0

あなたがリンクされていることフレデリックチャンで与えられるように、partitionsを持っているたら:

partitions.select{|partition| partition.length == 2} 
+0

ありがとうございますが、この世代のプロセスでパーティションをフィルタリングする必要があるという事実のために、この明白な解決策を使用することはできません。 – skanatek

関連する問題