Я хотел бы сгенерировать powerset P(S)
из набора 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 (спасибо!):
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 !, но как я могуточно рассчитать?