/ / encontre combinações possíveis com condições específicas - arrays, matlab, combinações, combinatória

encontrar combinações possíveis com condições específicas - arrays, matlab, combinações, combinatória

Eu quero calcular todas as combinações possíveis de 1:16 com 10 subconjuntos.

combos = combntns(1:16,10)

Mas a condição é que os combos retornados tenham no mínimo 1 membro dos seguintes vetores:

V1=1:4,V2=5:8,V3=9:12,V4=13:16,

Qualquer solução?

Respostas:

2 para resposta № 1

Com esse tamanho de problema, você pode gerar todas as combinações e selecionar aquelas que atendem aos requisitos:

n = 16;  %// number of elements to choose from
c = 10;  %// combination size
s = 4;   %// size of each group (size of V1, V2 etc)

combos = nchoosek(1:n, c);
ind = all(any(any(bsxfun(@eq, combos, reshape(1:n, 1,1,s,[])),2),3),4);
combos = combos(ind,:);

Isso pode ser generalizado para elementos genéricos e vetores de condição arbitrária, assumindo todos os vetores são do mesmo tamanho:

elements = 1:16;                    %// elements to choose from
c = 10;                             %// combination size
vectors = {1:4, 5:8, 9:12, 13:16};  %// cell array of vectors

s = numel(vectors{1});
combos = nchoosek(elements, c);
ind = all(any(any(bsxfun(@eq, combos, reshape(cat(1,vectors{:}).", 1,1,s,[])),2),3),4); %"
combos = combos(ind,:);