Рассмотрим список всех перестановок в лексикографическом порядке. Этот список содержит N! перестановок. При этом его можно разбить по первому элементу на N непрерывных групп по (N-1)! перестановок.
Таким образом, определить первый элемент перестановки с номером M (начиная с 0) можно как К
1=⌊M/(N-1)!⌋ (также, начиная с 0). Внутри группы перестановка будет иметь номер M'=M mod (N-1)!.
Вычеркнем найденный элемент из списка и повторим вычисления, пока не найдём все элементы.
Пример:
Элементы: (a, b, c, d).
Перестановка M=11 (начиная с 0).
Список (a, b, c, d). K
1 = ⌊11/3!⌋ = 1. Элемент 'b'. M' = 10 mod 3! = 5.
Список (a, c, d). K
2 = ⌊5/2!⌋ = 2. Элемент 'd'. M' = 5 mod 2! = 1
Список (a, c). K
3 = ⌊1/1!⌋ = 1. Элемент 'c'. M' = 1 mod 1! = 0
Список (a). K
4 = ⌊0/0!⌋ = 1. Элемент 'a'.
Получили перестановку (b, d, c, a).
Сгенерируем все перестановки и проверим правильность:0: a, b, c, d
1: a, b, d, c
2: a, c, b, d
3: a, c, d, b
4: a, d, b, c
5: a, d, c, b
6: b, a, c, d
7: b, a, d, c
8: b, c, a, d
9: b, c, d, a
10: b, d, a, c
11: b, d, c, a
12: c, a, b, d
13: c, a, d, b
14: c, b, a, d
15: c, b, d, a
16: c, d, a, b
17: c, d, b, a
18: d, a, b, c
19: d, a, c, b
20: d, b, a, c
21: d, b, c, a
22: d, c, a, b
21: d, c, b, a