Рассмотрим всю комбинацию длины 3 следующего массива целых чисел {1,2,3}.
Я бы хотел пройти через все комбинации длины 3, используя следующий алгоритм из wikipedia
// find next k-combination
bool next_combination(unsigned long& x) // assume x has form x'01^a10^b in binary
{
unsigned long u = x & -x; // extract rightmost bit 1; u = 0'00^a10^b
unsigned long v = u + x; // set last non-trailing bit 0, and clear to the right; v=x'10^a00^b
if (v==0) // then overflow in v, or x==0
return false; // signal that next k-combination cannot be represented
x = v +(((v^x)/u)>>2); // v^x = 0'11^a10^b, (v^x)/u = 0'0^b1^{a+2}, and x ← x'100^b1^a
return true; // successful completion
}
Каким должно быть мое начальное значение для этого алгоритма для всех комбинаций {1,2,3}?
Когда я получу выходные данные алгоритма, как мне восстановить комбинацию?
Я попробовал следующую прямую адаптацию, но я новичок в битовой арифметике и не могу сказать, правильно ли это.
// find next k-combination, Java
int next_combination(int x)
{
int u = x & -x;
int v = u + x;
if (v==0)
return v;
x = v +(((v^x)/u)>>2);
return x;
}