【问题标题】:nth permutation of a vector in MATLABMATLAB中向量的第n次排列
【发布时间】:2014-03-07 10:32:28
【问题描述】:

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

A = [1 2 3]

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

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

是否有计算第 n 次排列的内置函数?如果没有,谁能给我一个有效的算法来计算它?任何建议将不胜感激

【问题讨论】:

  • 烫发([1 2 3])?对于 N,perms(1:N),我认为可能可行。
  • @Divakar 非常感谢,perms() 这就是我需要的!

标签: matlab vector permutation


【解决方案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, :);

【讨论】:

    【解决方案2】:

    如果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
    

    【讨论】:

      【解决方案3】:

      perms(v) 适用于 n!情况,

      http://www.mathworks.de/matlabcentral/fileexchange/11462-npermutek/content/npermutek.m 适用于 n^n 或 n^k 情况。

      【讨论】:

        【解决方案4】:

        如果你喜欢用更少的代码来做事,你也可以这样做:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-05-06
          • 2019-04-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多