Этот вопрос состоит из двух частей, хотя, поскольку я пытаюсь приспособиться к реализации Prolog, решение одного из них, вероятно, немедленно приведет к решению другого.Как я могу вычислить n-ю перестановку (или рассказать лексикографический порядок данной перестановки)?
- Учитывая перестановку из списка целых чисел
{1,2,...,N}
, как я могу сказать, что индекс этой перестановки в лексикографическом порядке? - Предоставлено число
k
, как я могу рассчитатьk
-я перестановка чисел{1,2...,N}
?
Я ищу алгоритм, который может сделать это разумно лучше, чем просто итерация next permutation
функцию k
раз. Afaik должно быть возможно напрямую вычислить оба из них.
Что я додумал до сих пор, так это то, что, глядя на цифры слева, я могу сказать, сколько перестановок было перед каждым номером в определенном индексе, а затем каким-то образом их объединить, но я не совсем уверен, это приводит к правильному решению.
Вот один ответ для получения индекса http://stackoverflow.com/questions/24215353/how-to-find-the-index-of-a-k-permutation-from-n-elements/24234429#24234429 –