En mathématiques, une permutation σ d'ordre n est une fonction bijective des entiers 1 ... n à elle-même. Cette liste:
2 1 4 3
représente la permutation σ telle que σ (1) = 2, σ (2) = 1, σ (3) = 4 et σ (4) = 3.
Une racine carrée d'une permutation σ est une permutation qui, appliquée à elle-même, donne σ . Par exemple, 2 1 4 3
a la racine carrée τ = 3 4 2 1
.
k 1 2 3 4
τ(k) 3 4 2 1
τ(τ(k)) 2 1 4 3
car τ ( τ (k)) = σ (k) pour tout 1≤k≤n.
Contribution
Une liste de n > 0 entiers, tous compris entre 1 et n inclus, représentant une permutation. La permutation aura toujours une racine carrée.
Vous pouvez utiliser une liste de 0 ... n-1 à la place tant que vos entrées et sorties sont cohérentes.
Production
Racine carrée de la permutation, également sous forme de tableau.
Restrictions
Votre algorithme doit s'exécuter en temps polynomial en n . Cela signifie que vous ne pouvez pas simplement parcourir tous les n ! permutations d'ordre n .
Tous les builtins sont autorisés.
Cas de test:
Notez que de nombreuses entrées ont plusieurs sorties possibles.
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
la source
Réponses:
Perl,
124122 octetsComprend +3 pour
-alp
Exécutez avec la permutation basée sur 1 sur STDIN:
rootperm.pl
:La complexité est O (n ^ 3)
la source
Mathematica, 165
167octetsUne fonction sans nom.
Semi-non golfé:
la source
Prolog - 69 caractères
Explication:
la source