O (N) implementation
This is based on Zn Eyal Schneider mapping! → P (n)
def get_permutation(k, lst):
N = len(lst)
while N:
next_item = k/f(N-1)
lst[N-1], lst[next_item] = lst[next_item], lst[N-1]
k = k - next_item*f(N-1)
N = N-1
return lst
O (N ^ 2), . , -, . ( ), , Fisher-Yates, . , (N! - k) k, , k [0, N!], N! - k.
"" . , . .
0 N! . , ( ), n- . , .
. S = {a b c d}, S . p - , (b a c d), p S, b a, a c, c d d b. q - , (d b c a), pq , q, p, (d a b)(c). , q d b p b a, pq d a. , pq , b d c. 1 , .
.
- .
(a b)(c d) (c d)(a b) - .
(a b c) = (b c a) = (c a b)
, , , . , , ( , ). , . , , , , p > q q > p, p = q.
O (N! logN! + N!) . (EDIT: , , , ), n'th. , .