用重复的Lexigraph算法计算排列

时间:2013-01-28 05:00:37

标签: performance algorithm permutation combinatorics factorial

我有一个关于组合学的问题,特别是排列和lexigraphic索引。我已经计算了过去给定一个lexigraphic索引的集合的排列,但这些是 没有 重复的排列。

现在我想用 重复来计算给定的lexigraphic索引 的排列。我的问题是我不知道如何通过重复来处理排列的lexigraphic索引。

假设我有以下元素集“{A,B,C,D,E,F,G,H}

我想计算20个这些元素的排列,其中lexigraphic指数为n; n是64位数。如何确定lexigraphic索引?我还可以使用阶乘基础方法吗?

2 个答案:

答案 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]等范围内