数学では、次数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を含む)のリスト。順列は常に平方根を持ちます。
入力と出力が一貫している限り、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が奇数であると言うのは正しいでしょうか?
—
ニール
@ニールはい。それ以外の場合、順列は奇数のスワップとして表されます。
—
jimmy23013
ああ、それはそれを置くよりはるかに良い方法です。
—
ニール