Можно ли расширить xor-swap более чем на две переменные?

Я пытался расширить xor-swap более чем на две переменные, скажемn переменные. Но я нигде не получил это лучше, чем3*(n-1).

Для двух целочисленных переменныхx1 а такжеx2 вы можете поменять их местами так:

swap(x1,x2) {
  x1 = x1 ^ x2;
  x2 = x1 ^ x2;
  x1 = x1 ^ x2;
}

Итак, предположим, у вас естьx1 ...xn со значениямиv1 ...vn, Очевидно, что вы можете «вращать» значения, последовательно применяя своп:

swap(x1,x2);
swap(x2,x3);
swap(x3,x4);
...
swap(xm,xn); // with m = n-1

Вы закончите сx1 = v2, x2 = v3...,xn = v1.

Какие расходыn-1 свопы, каждая стоимость3 Xors, оставляя нас с(n-1)*3 операцию XOR.

Более быстрый алгоритм использует только xor и присваивание, а дополнительные переменные не известны?

Ответы на вопрос(1)

Ваш ответ на вопрос