Math 如何计算将一种排列转换为另一种排列的循环?

Math 如何计算将一种排列转换为另一种排列的循环?,math,cycle,combinatorics,permutation,Math,Cycle,Combinatorics,Permutation,我正在寻找一种算法,该算法给定一个序列的两个排列(例如,[2,3,1,4]和[4,1,3,2])来计算将第一个序列转换为第二个序列所需的时间(例如,[[0,3],[1,2]) mathworld的链接说Mathematica的ToCycle函数可以做到这一点,但遗憾的是,我手头没有Mathematica许可证。。。我很乐意收到任何指向FOSS语言或数学软件包中算法实现的指针 谢谢 我在这里找到了一个解决方案,它只需要调整以将索引重新映射到第二次排列所建立的排序顺序…感谢您为您的问题发布此链接。我

我正在寻找一种算法,该算法给定一个序列的两个排列(例如,
[2,3,1,4]
[4,1,3,2]
)来计算将第一个序列转换为第二个序列所需的时间(例如,
[[0,3],[1,2]

mathworld的链接说Mathematica的ToCycle函数可以做到这一点,但遗憾的是,我手头没有Mathematica许可证。。。我很乐意收到任何指向FOSS语言或数学软件包中算法实现的指针


谢谢

我在这里找到了一个解决方案,它只需要调整以将索引重新映射到第二次排列所建立的排序顺序…

感谢您为您的问题发布此链接。我很想知道您是如何调整算法以将第一个循环转换为第二个循环的。如果你能更清楚地说明你是如何准确地绘制地图的,我将不胜感激indices@Noah16这是9年前的事了,所以我记不起细节了。。。但我想我的意思是你需要“规范化”排列。这将是重命名数字(或给它们一个别名),使第一个序列自然有序。以我的问题为例,我们希望
[2,3,1,4]
看起来像
[1,2,3,4]
所以我们有一个映射
2:1,3:2,1:3,4
,然后在应用映射之后,第二个序列看起来像
[4,3,2,1]
(即原始序列中数字的索引,而不是它们的值)。在运行解决查找周期问题的任何算法后,只需应用反向映射(以获得实际值而不是索引)。我不理解这部分:(然后在应用映射之后,第二个序列看起来像[4,3,2,1])…提前感谢