计算非重复排列中元素的索引

Calculating the index of an element in non-repetitive permutation

下面的问题是关于数学的。问题是,如何计算非重复排列中元素的索引。例如,

A={a,b,c} 那么排列是 3!=6 因此:(a,b,c);(a,c,b);(b,a,c);(b ,c,a);(c,a,b);(c,b,a)

我研究了算法以获取此排列中元素的索引。在互联网上只有重复排列算法。 (b,c,a) 的索引在这个从零开始的列表中,显然是 3。有没有简单的方法可以直接通过公式计算位置? 我不需要 python 中的 itertools。因为我使用了非常大的排列。(示例 120!)我曾使用 python 的 itertools 排列函数来获取列表迭代器上元素的索引。但结果令人厌倦。我需要一个数学解决方案来直接获取索引。 感谢阅读。

一些线索:
您有 n! 个排列。请注意,(n-1)! 排列从第一个元素 (a) 开始,下一个 (n-1)! 排列从第二个元素 (b) 开始,依此类推。

因此您可以将排列秩的第一项计算为 (n-1)! * Ord(P[0]),其中 Ord 给出初始序列中排列第一个元素的序号(0 表示 a,1 表示 b 等)。

然后使用 (n-2)! 乘数继续处理第二个元素,依此类推。

不要忘记从订单中排除使用过的元素 - 对于您的示例,使用了 b,因此在第二阶段 c 具有索引 1 而不是 0 , 广告评级为 2!*1 + 1!*1 + 0! * 0 = 3