performance - 用 Lexigraphic 的重复计算排列

标签 performance algorithm permutation combinatorics factorial

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

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

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

我想计算这些元素中 20 个的排列,索引为 nn 是 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/

相关文章:

java - 仅当字符串包含每个列表中的单词时才匹配的正则表达式

Javascript/Jquery 在循环中获取位置很慢

algorithm - 如何将其转换为图形算法?

c++ - 将一个数字提高到一个巨大的指数

javascript - 如何在 JavaScript 中获取字符串与给定替换的所有组合?

c++ - c++中的k排列

javascript - 在 CSS 文件之后下载本地脚本,而不是外部文件

c# - C#中foreach循环的性能优化

java - 从 Java 字符串中去除所有不可打印字符的最快方法

java - Java中的基本方向算法