Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 2-交换置换的独立切片_Algorithm_Permutation - Fatal编程技术网

Algorithm 2-交换置换的独立切片

Algorithm 2-交换置换的独立切片,algorithm,permutation,Algorithm,Permutation,给定一个2交换置换枚举算法,如Steinhaus–Johnson–Trotter算法(但不一定是相邻项),我想找到一种方法来执行以下操作: [基础]一个函数,从起始向量[1,2,3..N]有效地进行所有置换(迭代和/或递归),从上一个置换中交换2个元素 一个函数,给定某个置换[1,N!]的索引,可以很容易地计算它(我的意思是,不需要沿着前面的那些进行查找),然后继续从那里开始 相反,找到一个给定排列与一个同样给定的起始排列的索引 换句话说,函数用于将2-swap置换列表分割为任意大小的独立块 伪

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

  • [基础]一个函数,从起始向量[1,2,3..N]有效地进行所有置换(迭代和/或递归),从上一个置换中交换2个元素

  • 一个函数,给定某个置换[1,N!]的索引,可以很容易地计算它(我的意思是,不需要沿着前面的那些进行查找),然后继续从那里开始

  • 相反,找到一个给定排列与一个同样给定的起始排列的索引

  • 换句话说,函数用于将2-swap置换列表分割为任意大小的独立块

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

    还有文章/书籍的链接

    参考:

    我已经发布了Johnson Trotter算法的Java代码(带有偶数的加速),该算法是迭代实现的,而不是递归实现的

    我想这可能会帮助你回答你的第一个问题,也可能是第二个和第三个问题