0

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

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

4

1 回答 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

于 2020-02-17T04:43:58.690 回答