我想生成一个 set 的P(S)
powerset S
。我只想P(S)
拥有等于某个大小的子集。
例如,如果我们有S = [1,2,3,4]
,那么limited_powerset(S,3)
将是[[1,2,3],[2,3,4],[1,3,4],[1,2,4]].
Hynek Pichi Vychodil提供了一个在 Erlang 中生成通用 powerset 的好例子(谢谢!):
generate([]) -> [[]];
generate([H|T]) -> PT = generate(T),
generate(H, PT, PT).
generate(_, [], Acc) -> Acc;
generate(X, [H|T], Acc) -> generate(X, T, [[X|H]|Acc]).
如何修改它以仅具有特定大小的子集?引入一个 Limit 变量并将最后一行更改为
case length([X|H]) < Limit of
true ->
ps(X, T, Acc, Limit);
false ->
ps(X, T, [[X|H]|Acc],Limit)
end.
没有帮助。
PS我猜子集的数量会小于N!但我怎么能准确地计算出来呢?