计算非重复排列中元素的索引
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
下面的问题是关于数学的。问题是,如何计算非重复排列中元素的索引。例如,
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