我有一个关于组合学的问题,特别是排列和lexigraphic索引。我已经计算了过去给定一个lexigraphic索引的集合的排列,但这些是 没有 重复的排列。
现在我想用 重复来计算给定的lexigraphic索引 的排列。我的问题是我不知道如何通过重复来处理排列的lexigraphic索引。
假设我有以下元素集“{A,B,C,D,E,F,G,H}
我想计算20个这些元素的排列,其中lexigraphic指数为n
; n
是64位数。如何确定lexigraphic索引?我还可以使用阶乘基础方法吗?
答案 0 :(得分:1)
假设您有8个元素(如示例所示),这意味着您需要3位索引。要定义长度为20的排列,您需要3*20=60
位。
来自v
的整数值[0,2^60)
将定义所有具有重复的排列,其中v & 7
将是排列中第一项的索引,(v & (7 << 3) >> 3)
- 索引第二个元素,等等......
答案 1 :(得分:0)
你的集合的大小是8,你的长度是20,所以完全有8 8 ^ 20个排列。如果你想计算第n个排列,你可以一点一点地简单地确定。即第一位是&#39; A&#39;如果n小于7 ^ 20,则&#39; B&#39;如果n在[7 ^ 20,2 * 7 ^ 20]等范围内