5
xor-swap을 두 개 이상의 변수, 예를 들어 n
변수로 확장하려고했습니다. 그러나 나는 아무데도 가지고있어 3*(n-1)
보다 낫다.xor-swap을 두 개 이상의 변수로 확장 할 수 있습니까?
x1
및 x2
이처럼를 교환 할 수 있습니다
swap(x1,x2) {
x1 = x1^x2;
x2 = x1^x2;
x1 = x1^x2;
}
을 그래서, 당신은 값 v1
... vn
와 x1
... xn
을 가정합니다. 분명히 당신은 연속적으로 적용 스왑하여 값을 "회전"할 수 있습니다
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
xors가 남습니다.
더 빠른 알고리즘은 xor 및 할당 만 사용하고 추가 변수는없는 것으로 알고 있습니까?
나는 3 개 변수 방법을 회전하는 "XOR 프로그램"에 대한 무차별 검색을 해봤하고있는 가장 짧은 6 개의 배타적 논리합을 연산이었다. 아마도 일반적으로 아무것도 증명하지는 못 하겠지만 좋은 징조는 아닙니다. – harold
@harold 4도 확인했는데 5가 그 순간에 실행 중입니다 ... –
@harold : 5는 12 스왑 = 4 * 3에서 발견됩니다. 아마도 카운터 예제가 아닌 증명을 검색하는 것이 가장 좋습니다. –