【问题标题】:Calculating the index of an element in non-repetitive permutation计算非重复排列中元素的索引
【发布时间】:2020-02-14 17:04:53
【问题描述】:

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

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

【问题讨论】:

  • 谷歌rank and unrank permutations

标签: math formula permutation non-repetitive


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-06
    • 2023-03-11
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 2019-08-01
    相关资源
    最近更新 更多