在数学上,阶数n的置换 σ是从整数1 ... n到其自身的双射函数。此清单:
2 1 4 3
表示置换σ,使得σ(1)= 2,σ(2)= 1,σ(3)= 4,σ(4)= 3。
置换σ的平方根是一个置换,当应用于自身时,得出σ。例如,2 1 4 3
具有平方根τ = 3 4 2 1
。
k 1 2 3 4
τ(k) 3 4 2 1
τ(τ(k)) 2 1 4 3
因为对于所有1≤k≤n,τ(τ(k))= σ(k)。
输入项
由n > 0个整数组成的列表,都在1到n之间(包括1和n),表示一个排列。排列将始终具有平方根。
只要输入和输出一致,就可以使用0 ... n-1列表。
输出量
排列的平方根,也作为数组。
限制条件
您的算法必须在n的多项式时间内运行。这意味着您不能只遍历所有n!n阶排列。
允许任何内置函数。
测试用例:
请注意,许多输入具有多个可能的输出。
2 1 4 3
3 4 2 1
1
1
3 1 2
2 3 1
8 3 9 1 5 4 10 13 2 12 6 11 7
12 9 2 10 5 7 4 11 3 1 13 8 6
13 7 12 8 10 2 3 11 1 4 5 6 9
9 8 5 2 12 4 11 7 13 6 3 10 1
我要说的是,对于具有平方根的置换,如果它包含长度为m的n个周期,那么n是偶数还是m是奇数?
—
尼尔2016年
@尼尔是的。否则,排列可以表示为交换的奇数个。
—
jimmy23013 '16
啊,是的,这是一种更好的放置方式。
—
Neil