i-й элемент k-й перестановки
(0 <= i < n)
k-й перестановки(0 <= k < n!)
последовательности 0..n-1?Любой порядок перестановок может быть выбран, он не должен быть лексикографическим. Есть алгоритмы, которые создаютk
ая перестановка вO(n)
(увидеть ниже). Но здесь полная перестановка не нужна, просто ееi
элемент Есть ли алгоритмы, которые могут сделать лучше, чемO(n)
?
Есть алгоритмы, которые создаютk
ая перестановка, работая с массивом размераn
(см. ниже), но требования к пространству могут быть нежелательны для большихn
, Есть ли алгоритм, который требует меньше места, особенно когда толькоi
элемент нужен?
Алгоритм, который строитk
ая перестановка последовательности0..n-1
со временема также космическая сложностьO(n)
:
def kth_permutation(n, k):
p = range(n)
while n > 0:
p[n - 1], p[k % n] = p[k % n], p[n - 1]
k /= n
n -= 1
return p
Источник:http://webhome.cs.uvic.ca/~ruskey/Publications/RankPerm/MyrvoldRuskey.pdf