MATLAB中向量的n次置换
假设我有一个整数向量,如下所示:MATLAB中向量的n次置换,matlab,vector,permutation,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个置换的内置函数?如果没有,谁能给我一个有效的算法来计算它?如果A只是@Divakar所说的微不足道的序列1:N,任何建议都将受到高度赞赏 perms(1:N) 生成所需的排列 如果A是一个数组,其内容为泛型,长度为N,perms可用于获得允许排列的索引
A = [1 2 3]
我需要的是向量A的n次排列。正如我们现在看到的,n
数字的向量有n代码>排列,例如A
的一些排列是:
[1 2 3]
[1 3 2]
[2 1 3]
[2 3 1]
...
是否有用于计算第n个置换的内置函数?如果没有,谁能给我一个有效的算法来计算它?如果A
只是@Divakar所说的微不足道的序列1:N
,任何建议都将受到高度赞赏
perms(1:N)
生成所需的排列
如果A
是一个数组,其内容为泛型,长度为N
,perms
可用于获得允许排列的索引,即
A_permutations = A(perms(1:N))
例如:
给定
perms(v)适用于n!案例
适用于n^n或n^k情况 我从@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, :);
如果你喜欢用更少的代码行来做事情,你也可以做:
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)})
perms([1,2,3])?对于N,perms(1:N),我想可能有用。@Divakar非常感谢,伙计,perms()
这就是我需要的!
A=1:N;
nthPerm=getfield(perms(A),{n,1:length(A)})