how to generate permutations of N numbers in K positions
107 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Ali Danish
el 19 de Feb. de 2019
Comentada: Subzero
el 31 de Mzo. de 2023
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 comentarios
Respuesta aceptada
Stephen23
el 19 de Feb. de 2019
Editada: Stephen23
el 19 de Feb. de 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 comentarios
Más respuestas (2)
Bruno Luong
el 22 de Mzo. de 2021
Editada: Bruno Luong
el 22 de Mzo. de 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 comentarios
Walter Roberson
el 24 de Nov. de 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.
Ver también
Categorías
Más información sobre Discrete Math en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!