我有一个关于组合学的问题,特别是排列和词典索引。我在过去计算了一个给定词典索引的集合的排列,但这些排列没有重复。
现在我想计算给定词典索引与 重复的排列。我的问题是我不知道如何通过重复处理排列的词典索引。
假设我有以下元素集"{A,B,C,D,E,F,G,H}
我想计算这些元素中 20 个的排列,索引为 n
; n
是 64 位数字。如何确定词典索引?我还能使用阶乘基础方法吗?
最佳答案
假设您有 8 个元素(如您的示例),这意味着您需要 3 位用于索引。要定义长度为 20 的排列,您需要 3*20=60
位。
所以整数值 v
来自 [0,2^60)
将定义所有带有重复的排列,其中 v & 7
将是排列中第一项的索引,(v & (7 << 3) >> 3)
- 第二个元素的索引,依此类推...
关于performance - 用 Lexigraphic 的重复计算排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14555700/