排列索引

时间:2014-05-25 12:32:12

标签: algorithm matlab permutation representation

我最近在阅读有关Lehmer代码以及它们如何用于将索引映射到与索引对应的置换并实现它们对于快速生成排列非常有用。有谁知道如何使用算法完成这个,以及这种方法的限制是什么,我想我们不能超过index = 1.7977e + 308,但仍然看起来是一个非常有趣的方法。

所以基本上可以说我们已经

perm
  1   0 0 0
  2   0 0 1
  3   0 0 2
  4   0 1 0
  5   0 1 1
  6   0 1 2
     ...

我们应该能够推断[0 1 0]的索引是4, 或索引6对应于[0 1 2]

感谢您的帮助。

1 个答案:

答案 0 :(得分:6)

每个索引的向量是索引的基数3表示(减1) 函数dec2basebase2dec可用于此,只需稍微调整即可将sting输出转换为所需格式

向量索引

index=4; % input index
n=3;     % length of vector 

vec=str2num([dec2base(index-1,3,n)].').'
vec=

     0     1     0

向量索引

vec=[0,1,2]; % input vector
vecstr=strcat(['' vec(:)+'0'].');
index=base2dec(vecstr,3)+1

index =

     6