给定一个2-swap置换枚举算法,如Steinhaus-Johnson-Trotter算法(但不一定是相邻项目),我想找到一种方法来执行以下操作:
[基础知识]一个函数,从起始向量[1,2,3..N]有效地进行所有排列(迭代和/或递归)交换前一个元素的2个元素。
一个函数,给定一些排列的索引[1,N!],可以很容易地计算它(我的意思是,找到它而不需要前面的那些)然后继续从那里开始。 / p>
相反,找到给定排列的索引与给定的开始索引相比。
换句话说,将2交换排列列表切分为任意大小的独立块的函数。
非常欢迎伪代码和/或类C代码。
链接到文章/书籍。
答案 0 :(得分:0)
我已经发布了Java代码here,用于Johnson-Trotter算法(具有Even' s加速)迭代而不是递归实现。
我认为这可以帮助您解决问题1,也可能还有2和3。