how to generate permutations of N numbers in K positions
26 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
I want to generate all permutations of N numbers in K places, where K is less than N (nPk) in matlab, I've searched online and already existing questions but couldn't find a functions which generates such permutations without repitition. There are some functions which do this with repitation.
For example if I've a vector [1 2 3 4] my N is 4 and my K is 2, then I want 12 permutations using the formula N!/(N-K)1 = 4!/(4-2)! = 12
[1,2]
[1,3]
[1,4]
[2,1]
[2,3]
[2,4]
[3,1]
[3,2]
[3,3]
[4,1]
[4,2]
[4,3]
These are the permutations which I want to generate. Kindly suggest me the solution.
0 Commenti
Risposta accettata
Stephen23
il 19 Feb 2019
Modificato: Stephen23
il 19 Feb 2019
Download Loginatorist's powerful FEX submission combinator:
and use it like this:
>> sortrows(combinator(4,2,'p'))
ans =
1 2
1 3
1 4
2 1
2 3
2 4
3 1
3 2
3 4
4 1
4 2
4 3
If you want to apply this to a vector that is not 1:N, simply use the output of combinator as indices into your vector.
0 Commenti
Più risposte (2)
Bruno Luong
il 22 Mar 2021
Modificato: Bruno Luong
il 22 Mar 2021
No loop, no extrenal file needed
N=5; K=3;
P=nchoosek(1:N,K);
P=reshape(P(:,perms(1:K)),[],K)
You might further sort the permutation so that the order is easily to follow
P = sortrows(P)
4 Commenti
Walter Roberson
il 24 Nov 2022
If you have an array P that is 2 or more dimensions (not a vector!), and you use P(A,B) where A and B might be arrays, then the result is the same as if you had used P(A(:), B(:)) -- so P(A(1),B(1)), P(A(2),B(1)), P(A(3),B(1)) up to P(A(end),B(1)) is the first column, then the second column would be P(A(1),B(2)), P(A(2),B(2)), P(A(3),B(2)) to P(A(end),B(2)), and so on -- all combinations of the elements in A with all of the elements in B, same as if A and B had been vectors rather than 2D arrays.
The shape of the result might be different if P is a vector instead of a 2D array.
Vedere anche
Categorie
Scopri di più su Matrix Indexing in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!