How can I generate a binary matrix of permutations
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Hi, I'd like to ask for help on generating a binary matrix of permutations given several variables:
The first being the number of "ones" per row (n). The second being the length of each row (m). For example, if I was asked to generate a binary matrix given n = 2 and m = 4 the matrix generated should look like the following:
0011
0101
0110
1001
1010
1100
I've been asked to prepare a list of all permutations to select n=23 items out of a list of m=30.
I first thought of generating a matrix of binary numbers incrementing by 1:
0000
0001
0010
0011...
Then going through each row and checking the sum of ones. If that sum equals n then store that row vector in another variable and build my desired matrix that way. This is not efficient though. I am now thinking of something along the lines of this pseudo-code:
for i = 1 to 2^30
x = convert i to binary
if (count of ones in x) = n then y = x
I hope the problem is correctly phrased and I apologies for the simplicity of this question or if it has previously been asked - I'm a complete novice both in Matlab and in using this forum. Your help would be much appreciated.
Greg
2 Kommentare
jgg
am 14 Dez. 2015
I think it might be easier to do an interative loop.
Start with like (in your example) 1100
Then iterate backwards by "moving" the rightmost-1 to the right.
1100
1010
1001
0110
0101
0011
You should be able to do this by recursion; that's definitely going to be better than try to perform billions of operations.
Akzeptierte Antwort
Andrei Bobrov
am 14 Dez. 2015
Bearbeitet: Andrei Bobrov
am 14 Dez. 2015
n = 2;
m = 4;
ii = nchoosek(1:m,n);
k = size(ii,1);
out = zeros(k,m);
out(sub2ind([k,m],(1:k)'*ones(1,n),ii)) = 1;
4 Kommentare
DGM
am 27 Dez. 2023
Other than a binary array, it's unclear what you're asking for, or if it's even related to this thread.
Given that everyone in this thread has been inactive for at least a year, it's not likely they're going to respond. If you have a question, open a new thread and ask a question. Be clear about what you want. Provide an example of your expected inputs and outputs.
DGM
am 6 Apr. 2024
Wow. I've had this tab open for over three months. I'm just going to take a wild stab at answering anyway.
I'm going to interpret this as to say that we want a binary, possibly logical array A of size NxN, where the column vector at column n is a binary representation of 2^n. For sake of plausible convention, I'm assuming a zero-based indexing. Each column vector is ordered LSB first.
N = 8; % the number of columns
A = rot90(dec2bin(2.^(0:N)) == '1')
This all seems like a sound interpretation of the question, but the fact that this is just
A = eye(N)
... suggests that:
- my interpretation was wrong
- the task was not clearly described
- the solution was truly trivial
or possibly all of the above.
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Logical finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!