Effacer les filtres
Effacer les filtres

Advance combination of sets and subsets

1 vue (au cours des 30 derniers jours)
hassan
hassan le 29 Avr 2014
Modifié(e) : hassan le 29 Avr 2014
Hi
I am having trouble in solving a combination problem as follows, For example:
There are 4 sets each having different sub parts
set(A) = ['A1' 'A2' 'A3' 'A4' 'A5' 'A6'];
set(B) = ['B1' 'B2' 'B3' 'B4' 'B5'];
set(C) = ['C1' 'C2' 'C3' 'C4'];
set(D) = ['D1' 'D2' 'D3' 'D4'];
Based original code of combination:
combos = combntns(set,subset);
now the question is: I have sub part of sets and I want combination of subparts of sets for subset=4 ,where same sub parts of a set should not be in the same combination. The problem is that by running original code, sub parts of single set also is getting combined, but this is not the right for me. the result should be as follow:
['A1' 'B1' 'C1' 'D1'],
['A1' 'B2' 'C1' 'D1'],
['A1' 'B3' 'C1' 'D1'],
['A2' 'B1' 'C1' 'D3'],
['A3' 'B3' 'C2' 'D3'],
['A5' 'B5' 'C4' 'D2'],
...
AND GO ON.....
but original code creates this: [A1 A2 C1 D1], or [A1 B1 B2 D1], ..... which is not true because sub part of set is repeated in single combination (for example B1 and B2 in the same combination).
i would appreciate if someone can put me through right direction.
Regards

Réponses (1)

the cyclist
the cyclist le 29 Avr 2014
Modifié(e) : the cyclist le 29 Avr 2014
Here is one straightforward implementation:
% Put in actual values here. I just used 1:6, etc, for testing.
A = 1:6;
B = 1:5;
C = 1:4;
D = 1:3;
S = nan(numel(A)*numel(B)*numel(C)*numel(D),4);
rowcount = 0;
for i1 = 1:numel(A)
for i2 = 1:numel(B)
for i3 = 1:numel(C)
for i4 = 1:numel(D)
if not(i1==i2 || i1==i3 || i1==i4 || i2==i3 || i2==i4 || i3==i4)
rowcount = rowcount + 1;
S(rowcount,:) = [A(i1) B(i2) C(i3) D(i4)];
end
end
end
end
end
S(rowcount+1:end,:) = [];
Notice that I preallocate quite a bit more memory than I need, because I was too lazy to figure out how many rows you'll need. I think it might be (shortest vector)^(number of sets), but I am not sure.

Catégories

En savoir plus sur Discrete Math dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by