MATLAB中向量的第n个排列

时间:2014-03-07 10:32:29

标签: matlab vector permutation

假设我有一个这样的整数向量:

A = [1 2 3]

我需要的是向量A的第n个排列。我们现在的n数字向量具有n!个排列,例如A的一些排列是:

[1 2 3]
[1 3 2]
[2 1 3]
[2 3 1]
...

是否有用于计算第n个排列的内置函数?如果没有,有人可以给我一个有效的计算算法吗?任何建议都将受到高度赞赏

4 个答案:

答案 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)

烫发(v)适用于n!案例,

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)})