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

问题描述 投票:0回答:1

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

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的排列功能,以获取列表迭代器上元素的索引。但是结果很疲倦。我需要一个数学解决方案来直接获取索引。感谢您的阅读。

math formula permutation non-repetitive
1个回答
0
投票

一些线索:您有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

© www.soinside.com 2019 - 2024. All rights reserved.