以下问题与数学有关。问题是,如何计算非重复排列中元素的索引。例子,
A = {a,b,c}那么置换是3!= 6因此:(a,b,c);(a,c,b);(b,a,c);(b,c, a);(c,a,b);(c,b,a)
我研究了在该排列中获取元素索引的算法。在Internet中,只有重复排列算法。(b,c,a)的索引显然在从零开始的列表中。是否有一种简单的方法可以直接通过公式直接计算位置?我不需要来自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