我一直在尝试将异或交换扩展到两个以上的变量,例如n
变量。但我没有得到比这更好的地方3*(n-1)
.
对于两个整型变量x1
and 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
异或,留给我们(n-1)*3
xors.
是否存在仅使用异或和赋值并且没有已知其他变量的更快算法?