Iは3つのサブセットA、BおよびCから成るセットMを有するErlangの制約を持つセットの3つのサブセットからすべての可能なペアを見つけるには?
問題:すべて含むMのすべての可能なサブセットS(1)、... S(N)を計算したいようにA、BおよびCの要素との間の可能なペア:AとBの
- 要素が対に一度だけ二つの位置のそれぞれについて一対で起こることができる(すなわち
{a1,a2}
あり、{b1,a1}
はであることができます1つのサブセットSが、このサブセットS内にはこれ以上の要素{a1,_} and {_,a1}
は許されない。 - Cの要素はサブセットSで1-N回起こることがあります(つまり、サブセットSでは
{a,c}, {b,c}, {x,c}
が発生する可能性があります)が、サブセットSではCのすべての要素のサブセットSを取得したいと考えています。 例えば
、我々はA = [a1,a2], B = [b1,b2], C = [c1,c2]
、Sは以下のようになり結果のサブセットの後、いくつかの(彼らは要素のペアが含まれている必要があり、覚えている)がある場合:
- {a1,b1}, {b1,a2}, {a2,b2}, {b2,c1};
- {a1,b1}, {b1,a2}, {a2,b2}, {b2,c1}, {c1,c2};
- {a1,c1}, {c1,a2}, {c1,b2}, {b1,c1};
- etc.
を私が最初に私が見つける必要があると考える傾向がありますAの1つの要素のみを含むMのすべての可能なサブセット、Bの1つの要素、およびCの1..N要素を含む。その後、私は何とかペアのセットを生成する必要があります(2)
から。しかし、私はこれが正しい戦略であるとは確信していません。
ので、より精巧な質問は次のようになります。
- セットを作成して、設定されたMの整数の要素場合Erlangでサブセットを見つけるための最善の方法は何ですか?
- Erlangでセットのサブセットを見つけるための既製のツールはありますか?
- アーランにある要素のすべての可能なペアを生成する既成のツールはありますか?
- Erlangの上記の問題をどうやって解決できますか?
約2^nサブセットを指摘してくれてありがとう。説明された問題は、おそらくグラフアルゴリズムでは解決できません(したがって私は質問しました)。 – skanatek
パワーセットはセットのセットなので、['sofs'](http://www.erlang.org/doc/man/sofs.html)モジュールは、数学的である一方、役に立つかもしれません。 Erlangでパワーセットを構築するためのリストベースのアルゴリズムについては、[こちらをご覧ください](http://rosettacode.org/wiki/Category:Erlang)を参照してください。 (ここからは 'sets'''from_list'とおそらく' fold'を使ってすべての部分集合を繰り返し処理できます) –