【发布时间】:2011-10-29 09:04:48
【问题描述】:
我有一个集合 M,它由三个子集 A、B 和 C 组成。
问题: 我想计算 M 的所有可能子集 S(1)...S(N),其中包含 A、B 和 C 元素之间的所有可能对,其方式为:
- 对于一对中的两个位置中的每一个,A 和 B 的元素只能在一对中出现一次(即
{a1,a2}和{b1,a1}可以在一个子集 S 中,但不允许更多元素{a1,_} and {_,a1}出现在这个子集 S); - C 的元素可以在子集 S 中发生 1-N 次(即
{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)。但我不确定这是不是正确的策略。
所以,更详细的问题是:
- 如果集合 M 的元素是整数,在 Erlang 中创建集合和查找子集的最佳方法是什么?
- 是否有现成的工具可以在 Erlang 中查找集合的子集?
- 是否有任何现成的工具可以在 Erlang 中生成集合中所有可能的元素对?
- 如何在 Erlang 中解决上述问题?
【问题讨论】: