1

指定されたセットの nCr の組み合わせを生成する Java 実装が必要です。たとえば、セットが {"java","php",".net","python"} の場合、プログラムは、指定されたセットのすべての可能な nCr セットを返す必要があります。

4

1 に答える 1

4

ゴスパーのハックを適応させると、これは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;
}
于 2012-08-14T04:24:16.560 に答える