글
XOR 교체 알고리즘
A/Algorithm
2011. 10. 27. 16:27
XOR 교체 알고리즘은 임시 변수를 두지 않고, 두 개의 변수를 배타적 논리합(XOR) 비트 연산을 이용하여 교체하는 알고리즘이다. 이 알고리즘은 컴퓨터 프로그래밍 분야에서 프로세서의 최적화 능력이 부족했을 때 대안으로 자주 사용되었다.
다음은 XOR 교체 알고리즘을 구현한 C 코드이다.
void swap(int *x, int *y) { if (*x != *y) { *x ^= *y; *y ^= *x; *x ^= *y; } }
이 코드는 두 포인터가 서로 다른 메모리 공간을 가리킬 때에만 교체 연산을 수행해서 문제를 제거한다.
이 코드는 종종 다음과 같은 형태로 쓰이기도 한다.
if (*x != *y) *x ^= *y ^= *x ^= *y;
실제 사용에서의 장단점
XOR 교체 알고리즘은 대부분의 현대적인 프로세서에서는 임시 변수를 사용하는 방법보다 더 느린데, 그 이유 중 하나로는 임시 변수를 사용하는 방법은 여러 명령어를 동시에 실행할 수 있도록 (명령어 수준 병렬성) 최적화하기가 더 쉽기 때문이다. XOR 교체 알고리즘은 3 연산 모두 데이터 의존성 (Read-After-Write)을 만들기에 반드시 순서대로만 실행해야한다. 따라서 현대 비순차 프로세서나 VLIW 컴파일러가 XOR 교체 알고리즘을 최적화할 수 있는 방법은 거의 없다.
반면, XOR 교체 알고리즘은 속도가 그리 빠르지 않아도 되고 메모리 (혹은 캐시) 사용을 최소화해야 하는 환경에서는 유용하게 사용될 수 있다. 따라서 이 방식은 임베디드 개발 환경에서 많이 이용된다.
'A > Algorithm' 카테고리의 다른 글
재밋는? 러시아 페인트공 알고리즘 (0) | 2011.10.27 |
---|---|
냅색(Knapsack:배낭) 문제 (0) | 2011.10.27 |
토끼와 거북이 알고리즘 (0) | 2011.10.27 |
욕심쟁이(Greedy) 알고리즘 (0) | 2011.10.27 |
리스트의 이차원 배열 (0) | 2011.10.13 |