PermutationGroup Group - 置换群


问题

包含个元素的排列,元素范围为且互不相同。另一个包含个元素的数组,元素范围也是且互不相同。且

排列在数组上的置换操作为(其中),称的置换准则。对中的所有元素按照数组的对应下标上的值进行置换称为一次置换操作。例如

在置换准则

进行一次置换后得到

求包含个元素的排列在置换准则下经过次置换操作后得到的排列。

解法

显然暴力次循环的时间复杂度过高,不予采用。

对于上面例子的排列及置换准则

对于第个元素,第次置换后,即

对于第个元素,第次置换后,即

对于第个元素,第次置换后,即

对于第个元素,第次置换后,即

次置换后的和第次置换后的相同,即。可以看出置换操作存在周期性。本题例子中,第个元素的置换周期为,即(其中)。

只要确定所有元素的置换周期,就可以跳过次暴力循环。设为包含个元素的排列上平均每个元素的置换周期,则该算法的时间复杂度为


源码

PermutationGroup.h

PermutationGroup.cpp

测试

PermutationGroupTest.cpp