当前位置: 首页 > 知识库问答 >
问题:

如何并行计算k个集合位的所有组合?

笪烨
2023-03-14

我想有效地计算一个n位数字(在我的例子中,n=36)的所有组合,并且设置了精确的k位。

unsigned long long permute(unsigned long long val, unsigned long long i)
{
    int ffs = __builtin_ffsll(val);
    val |= (val - 1);

    // Do something here with `i` to produce the i'th combination, rather than the next one.

    return (val + 1) | (((~val & -(~val)) - 1) >> ffs);
}

共有1个答案

林铭
2023-03-14

您可以按照以下示例实现它:

long to_combination(int k, int N) {
  if (N == 0) {
    return (1L<<k)-1;
  }
  int n;
  for (n=k; C(n,k)<=N; n++)
    ;
  n--;
  return (1L<<n) | to_combination(k-1, N - C(n,k));
}

调用to_composition(5,72)返回331(101001011二进制格式,表示{8,6,3,1,0}),如示例所示。

 类似资料:
  • 问题内容: 我想编写一个函数,该函数以字母数组作为参数,并选择多个字母。 假设您提供8个字母的数组,并希望从中选择3个字母。然后您将获得: 返回由3个字母组成的数组(或单词)。 问题答案: 格雷码您会遇到的一个问题当然是记忆力,而且很快,您的集合中会有20个元素出现问题-20 C 3 =1140。而且,如果要遍历集合,最好使用修改后的灰色代码算法,因此您不必将所有代码都保存在内存中。这些将根据之前

  • 问题内容: 说,有两个哈希集,如何计算它们的交集? 问题答案: 使用以下方法: 如果要保留集合,请创建一个新集合以保存交集: 该的的说,这正是你想要的: 仅保留此集合中包含在指定集合中的元素(可选操作)。换句话说,从该集合中删除所有未包含在指定集合中的元素。如果指定的集合也是一个集合,则此操作将有效地修改此集合,以使其值为两个集合的交集。

  • 我有一个基于代理的模拟,其中有一个名为的集合,它包含每天出现的新感染的数量。收藏看起来有点像这样: 第1天:0 第2天:3 第4天:3 第5天:6 第6天:1 。.. 计算和的语法是:-返回给定集合中值的和。 对于我的特定示例,这将是,但我不确定应该在'value'参数中放入什么。有人能帮我一下吗?

  • 本文向大家介绍Java 通过位运算求一个集合的所有子集方法,包括了Java 通过位运算求一个集合的所有子集方法的使用技巧和注意事项,需要的朋友参考一下 Java没有自带的求一个集合的所有子集的方法,我们可以通过集合的子集规律来求。 一个集合的所有子集等于2^该集合的长度。比如{c,b,a}的长度为3,这个集合的子集就有8个。 这句话看起来很简单,但同时也隐含着高深的哲理。其实一个集合的所有集合,和

  • 北卡罗来纳州彩票提供了几场平局游戏,其中两场是选3和选4。在0和9(含9)之间分别选择3或4位数字,数字可以重复(例如,9-9-9是有效的组合)。在这个例子中,我将使用Pick3,因为它更容易使用,但我试图使它成为一个通用的解决方案,可以使用任何数量的数字。 选3和选4的一个特点是“1选1”,这意味着如果至少有一个号码比你的票上的号码高1或低1,你就赢了一个奖。

  • 问题内容: 我想找到一组整数的子集。这是具有回溯功能的“子集总和”算法的第一步。我已经编写了以下代码,但是没有返回正确的答案: 例如,如果我要计算set = {1,3,5}的子集,则我的方法的结果是: 我希望它产生: 我认为问题出在零件list.removeAll(list);中。但我不知道如何纠正它。 问题答案: 你想要的就是Powerset。这是一个简单的实现: 我将为你提供一个示例,说明该算