【问题标题】:Index of a permutation排列的索引
【发布时间】:2014-05-25 12:32:11
【问题描述】:

我最近在阅读有关 Lehmer 代码以及如何使用它们将 index 映射到对应于该 indexpermutation 并意识到它们对于快速生成排列非常有用。有谁知道如何使用算法来做到这一点,以及这种方法的限制是什么,我想我们不能超过 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 ]

感谢您的帮助。

【问题讨论】:

  • 请注意,您在此处描述的不是排列...
  • 确实你是对的。我只是想写一个简单的例子来帮助更好地说明我的想法。

标签: algorithm matlab permutation representation


【解决方案1】:

每个索引的向量是索引的基数 3 表示(减一) 函数 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

【讨论】:

  • 代码上面是哪种编程语言?有人可以用C程序写同样的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 2012-03-27
  • 2020-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-29
相关资源
最近更新 更多