独立切片的2交换排列

时间:2014-06-22 22:31:28

标签: algorithm permutation

给定一个2-swap置换枚举算法,如Steinhaus-Johnson-Trotter算法(但不一定是相邻项目),我想找到一种方法来执行以下操作:

  1. [基础知识]一个函数,从起始向量[1,2,3..N]有效地进行所有排列(迭代和/或递归)交换前一个元素的2个元素。

  2. 一个函数,给定一些排列的索引[1,N!],可以很容易地计算它(我的意思是,找到它而不需要前面的那些)然后继续从那里开始。 / p>

  3. 相反,找到给定排列的索引与给定的开始索引相比。

  4. 换句话说,将2交换排列列表切分为任意大小的独立块的函数。

    非常欢迎伪代码和/或类C代码。

    链接到文章/书籍。

    参考:http://rosettacode.org/wiki/Permutations_by_swapping

1 个答案:

答案 0 :(得分:0)

我已经发布了Java代码here,用于Johnson-Trotter算法(具有Even' s加速)迭代而不是递归实现。

我认为这可以帮助您解决问题1,也可能还有2和3。