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

在java中生成给定集合的nCr组合[已关闭]

淳于凯
2023-03-14

我想要java实现生成给定集的nCr组合。例如,如果set是{"java","php",". net","python"}程序应该返回给定集的所有可能的nCr集。

共有1个答案

方博
2023-03-14

改编Gosper的黑客,这工作到n = 64。

List<String> inputs;
List<List<String>> ncr = new ArrayList<List<String>>();
for (long x = (1 << r) - 1; (x >>> r) == 0;) {
  // x contains a 1 bit for each input we should choose;
  // iterate over the 1 bits of x
  long y = x;
  List<String> combination = new ArrayList<String>();
  for (int i = Long.numberOfTrailingZeros(y);
       y != 0; i = Long.numberOfTrailingZeros(y)) {
    combination.add(inputs.get(i));
    y &= ~(1 << i);
  }
  long u = x & -x;
  long v = u + x;
  x = v + ((v ^ x) / u) >>> 2;
}
 类似资料:
  • 问题内容: 我正在尝试使用 生成器 在Python中构建给定集合的子集列表。说我有 作为输入,我应该有 作为输出。我该如何实现? 问题答案: 最快的方法是使用itertools,尤其是链和组合: 如果需要生成器,只需使用yield并将元组变成集合: 然后简单地:

  • 我的数组包含从0到整数的随机唯一数。最大值。 如何生成唯一的id/签名(int)来唯一地标识每个数组,而不是搜索每个数组并检查每个数字。 例如 每个数组可以有不同的长度,但数字在数组中不重复,可以在其他数组中重复。每个数组的唯一id的目的是通过id来识别它,以便快速进行搜索。数组包含组件的id,数组的唯一签名/id将标识其中包含的组件。 此外,无论数组中的值的顺序如何,生成的id应该是相同的。像{

  • 问题内容: 我有一个n维数组,如下所示: 在此数组中,元素表示低值和高值。例如:指 我需要使用上面给出的范围生成所有值的组合。例如我想要 我已经尝试了以下方法来获得想要的东西: 笛卡尔函数取自使用numpy来构建两个数组的所有组合的数组 我需要做 几百万遍 。 我的问题:是否有 更好/有效的 方法来做到这一点? 问题答案: 我认为您正在寻找的是。不幸的是,这会以与所需格式不同的格式返回数组,因此您

  • 我想从给定的比赛列表(如“法国-德国”)中生成可能性的总数。这样,总结果将是3种可能的结果,即本例{主队获胜,他们平局,或客队获胜}。 可能的结果将是3 另一个例子是[‘法国-德国’、‘西班牙-意大利’] 可能的结果数为9 下面是我的代码 列表中项目的输出为 这很好,但随着列表项数的增加,它不起作用。如有任何帮助,请提前感谢:)

  • 问题内容: 我试图理解这些术语的含义。我举了一些例子,例如: 汇总:Facebook 有一个 用户 组成:facebook 中的 每个用户 都有一个 会话。 协会:人们 使用 浏览器 但是我对 具有 和 使用我的 示例感到困惑。为什么不能是用户 使用 Facebook帐户或Facebook 使用 会话来认证用户? 就OOP而言,这是错误的吗?我在哪里想念这个概念? 问题答案: 该 使用 关系意味着

  • 问题内容: 我有一个项目{a,b,c,d}的列表,当我需要生成所有可能的组合时, 您可以选择任意数量的项目 顺序不重要(ab = ba) 空集不被考虑 如果我们抓住可能性,那就应该是 我使用了以下递归方法: 当数组大时,有没有更有效的方法? 问题答案: 将组合视为一个二进制序列,如果所有4个都存在,则得到1111,如果缺少第一个字母,则得到0111,依此类推。对于n个字母,我们将得到2 ^ n -