Расчет индекса элемента в неповторяющейся перестановке - PullRequest
0 голосов
/ 14 февраля 2020

Следующий вопрос о математике. Дело в том, как рассчитать индекс элемента в неповторяющейся перестановке. Например,

A = {a, b, c} Тогда перестановка равна 3! = 6, поэтому: (a, b, c); (a, c, b); (b, a, c); (b, c, a); (c, a, b); (c, b, a)

Я искал алгоритм для получения индекса элемента в этой перестановке. В inte rnet присутствуют только повторяющиеся алгоритмы перестановок. Индекс (b, c, a) находится в этом нулевом списке, очевидно, 3. Есть ли простой способ вычислить позицию непосредственно по формуле? Мне не нужны itertools от python. Поскольку я использую очень большие перестановки (пример 120!), Я однажды испортил функцию перестановок python itertools, чтобы получить индекс элемента через итератор списка. Но результаты были утомительными. Мне нужно математическое решение, чтобы получить индекс напрямую. Спасибо за чтение.

1 Ответ

0 голосов
/ 17 февраля 2020

Некоторые подсказки:
У вас есть n! перестановок. Обратите внимание, что (n-1)! перестановки начинаются с первого элемента (a), следующие (n-1)! перестановки начинаются со второго элемента (b) и т. Д.

Таким образом, вы можете вычислить первый член ранга перестановки как (n-1)! * Ord(P[0]) где Ord дает порядковый номер первого элемента перестановки в начальной последовательности (0 для a, 1 для b et c).

Затем продолжите работу со вторым элементом, используя множитель (n-2)! и и т. д.

Не забудьте исключить использованные элементы из заказа - для вашего примера используется b, поэтому на втором этапе c имеет индекс 1, а не 0, рейтинг объявления равен 2!*1 + 1!*1 + 0! * 0 = 3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...