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