J'ai écrit une fonction qui calcule les permutations d'un tableau [a, b, c, ...] à partir d'un index, par exemple:inverse Permutation Index
0 -> a b c
1 -> a c b
2 -> b a c
3 -> b c a
4 -> c a b
5 -> c b a
par cette fonction récursive:
function factorial(n) { return n <= 1 ? 1 : n*factorial(n-1); }
function permutation(ar, n) {
if (ar.length == 1) return [ar[0]];
var x = factorial(ar.length-1); // get first element
return ar.splice(Math.floor(n/x),1).concat(permutation(ar, n % x))
}
maintenant, je suis à la recherche d'une fonction qui prend l'indice d'une permutation pour obtenir l'indice de la permutation inverse, à savoir
index perm reversed reversed index
**0** -> a b c -> c b a -> **5**
**1** -> a c b -> b c a -> **3**
**2** -> b a c -> c a b -> **4**
**3** -> b c a -> a c b -> **1**
**4** -> c a b -> b a c -> **2**
**5** -> c b a -> a b c -> **0**
I peut calculer toutes les permutations, calculer leur inverse et construire son index, mais il semble qu'il devrait y avoir une façon mathématique d'obtenir l'indice de la permutation inverse sans le calculer.
Je sais que je peux construire un index (hashmap) sur les éléments inversés, mais pour cela je devrais les calculer tous (imaginez que le tableau des permutations n'était pas 3 mais 300 éléments). J'étais intéressé si je pouvais juste en connaissant l'index d'une entrée calculer l'indice de l'entrée inverse (sans même calculer la permutation elle-même). –