假设我有一个这样的整数向量:
A = [1 2 3]
我需要的是向量A
的第n个排列。我们现在的n
数字向量具有n!
个排列,例如A
的一些排列是:
[1 2 3]
[1 3 2]
[2 1 3]
[2 3 1]
...
是否有用于计算第n个排列的内置函数?如果没有,有人可以给我一个有效的计算算法吗?任何建议都将受到高度赞赏
答案 0 :(得分:1)
我从@Divakar的评论中找到了答案(特别感谢@Divakar)
我需要的是:
% this my vector 1, 2, 3 , ..., N
A = 1 : N;
P = perms(A);
% nth permutation of A is nth row of P
nthPerm = P(n, :);
答案 1 :(得分:0)
如果A
只是琐碎的序列1:N
,正如@Divakar所说,命令
perms(1:N)
产生你需要的排列。
如果A
是一个内容为通用且长度为N
的数组,perms
可用于获取允许排列的索引,即
A_permutations = A(perms(1:N))
示例:
给定的
A =
3 7 9
A(perms(1:3))
9 7 3
9 3 7
7 9 3
7 3 9
3 7 9
3 9 7
答案 2 :(得分:0)
http://www.mathworks.de/matlabcentral/fileexchange/11462-npermutek/content/npermutek.m 适用于n ^ n或n ^ k情况。
答案 3 :(得分:0)
如果你喜欢用较少的代码行做事,你也可以这样做:
A=1:N;
nthPerm=getfield(perms(A),{n,A})
请注意,这仅在A=1,2,3,...,N
时有效。对于A
的不同值,您必须将其更改为:
A=1:N;
nthPerm=getfield(perms(A),{n,1:length(A)})