Tool to calculate the rank of a permutation of a set. The permutation's rank is the number associated with it in the order of generation of the permutations.

Rank of a Permutation - dCode

Tag(s) : Combinatorics

dCode is free and its tools are a valuable help in games, maths, geocaching, puzzles and problems to solve every day!

A suggestion ? a feedback ? a bug ? an idea ? *Write to dCode*!

The rank of a permutation is an integer that represents the position of a specific permutation in the lexicographic order of all possible permutations of a set of distinct elements.

From the list of all possible permutations of a set (or arrangements), it is possible to sort this index in ascending order. The rank of a permutation is the position of that if in the sorted list.

__Example:__ The set `A,B,C` has for permutations:

0 | ABC |

1 | ACB |

2 | BAC |

3 | BCA |

4 | CAB |

5 | CBA |

Since it seems difficult to list all permutations when there are many items. There is a mathematical method to perform this calculation.

Take a permutation $ P $ in the set $ E $ of size $ t $.

__Example:__ The permutation `B,A,C` from the initial set `A,B,C` of size $ t = 3 $

For each letter, calculate the position $ p $ in the set $ E $, calculate $ s = p \times (t-1)! $ and remove the letter from the set $ E $ (size $ t $ decreases). The sum of $ s $ is the rank of the permutation.

__Example:__ `B` is in position $ 1 $ in `ABC`, $ s_B = 1 \times 2! = 2 $`A` is in position $ 0 $ in `AC`, $ s_A = 0 \times 1! = 0 $`C` is in position $ 0 $ in `C`, $ s_C = 0 \times 0! = 0 $`BAC` is at permutation rank $ s_B + s_A + s_C = 2 + 0 + 0 = 2 $

A source code that calculates the rank of an alphabetical permutation would be:`// Pseudo-code`

function rankPermutation(p) {

alphabet = "abcdefghijklmnopqrstuvwxyz"

length = length(p)

rank = 0

j = 0

for i = length-1 down to 0 {

letter = p[j++]

index = position(letter, alphabet)

alphabet = alphabet[0..index] + alphabet[index+1..]

rank += index * factorial(i);

}

return rank;

}

__Example:__ `QWERTYUIOPASDFGHJKLZXCVBNM` has for lexicographic rank `261329910883437428257896643`

dCode retains ownership of the "Rank of a Permutation" source code. Except explicit open source licence (indicated Creative Commons / free), the "Rank of a Permutation" algorithm, the applet or snippet (converter, solver, encryption / decryption, encoding / decoding, ciphering / deciphering, breaker, translator), or the "Rank of a Permutation" functions (calculate, convert, solve, decrypt / encrypt, decipher / cipher, decode / encode, translate) written in any informatic language (Python, Java, PHP, C#, Javascript, Matlab, etc.) and all data download, script, or API access for "Rank of a Permutation" are not public, same for offline use on PC, mobile, tablet, iPhone or Android app!

Reminder : dCode is free to use.

The copy-paste of the page "Rank of a Permutation" or any of its results, is allowed (even for commercial purposes) as long as you credit dCode!

Exporting results as a .csv or .txt file is free by clicking on the *export* icon

Cite as source (bibliography):

*Rank of a Permutation* on dCode.fr [online website], retrieved on 2024-11-05,

permutation,rank,order,index,number,arrangement

https://www.dcode.fr/permutation-rank

© 2024 dCode — El 'kit de herramientas' definitivo para resolver todos los juegos/acertijos/geocaching/CTF.

Feedback