我有一个M,它由三个子集A,B和C组成。
问题:我想计算M的所有可能子集S(1)... S(N),它们包含A,B和C元素之间所有可能的对,其方式是: :
{a1,a2}
和{b1,a1}
可以在一个子集S中,但不再有元素{{在这个子集S)中允许1}}; {a1,_} and {_,a1}
可以在一个子集S中发生),但是我希望获得C中所有可能数量的C元素的子集S.子集S. 例如,如果我们有{a,c}, {b,c}, {x,c}
,那么一些结果子集S将是(记住,它们应该包含元素对):
A = [a1,a2], B = [b1,b2], C = [c1,c2]
我倾向于认为首先我需要找到M的所有可能子集,其中只包含A的一个元素,B的一个元素和C - {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.
的1..N个元素。之后,我应该以某种方式从中生成(1)
对。但我不确定这是正确的策略。
所以,更详细的问题是:
答案 0 :(得分:1)
有一个sets
module*,但我怀疑你最好先考虑算法 - 它在Erlang中的实现是在此之后出现的问题(或不是)。 (也许你注意到它实际上是graph algorithm(比如,二分相匹配的东西),你会很高兴with Erlang's digraph
module。)
长话短说,当你想出一个算法时,Erlang很可能会被用来实现它。是的,对套装有一定的支持。但是对于需要“所有可能的子集”的问题的解决方案往往是指数级的(即,给定n
个元素,有2^n
个子集;对于每个元素,你要么在你的子集中都有它,因此坏。