제자리 연관 정렬로 정수 키를 빠르게 정렬

제자리 연관 정렬로 정수 키를 빠르게 정렬

초록

본 논문은 추가 메모리를 거의 사용하지 않는 제자리(in‑place) 연관 정렬 기법을 제안한다. 읽기 전용 키와 수정 가능한 정수 두 가지 경우에 대해 각각 특화된 알고리즘을 설계했으며, 키의 값 범위 m이 O(n log n) 조건을 만족할 때 기존 버킷 정렬·계수 정렬·주소 계산 정렬보다 빠른 성능을 보인다. 인지 신경과학의 연습·저장·검색 단계에 비유한 설계 원리를 통해 정렬 과정이 세 단계로 나뉘며, 각 단계는 O(n) 시간과 O(1) 추가 공간을 요구한다.

상세 분석

연관 정렬은 기존의 버킷 정렬이나 계수 정렬이 요구하는 O(m) 혹은 O(n+m)의 보조 배열을 완전히 배제하고, 입력 배열 자체를 “연관 메모리”로 활용한다는 점에서 혁신적이다. 논문은 먼저 인지 과학에서 기억 형성의 세 단계—연습(practicing), 저장(storing), 검색(retrieval)—을 정렬 알고리즘에 매핑한다. 연습 단계에서는 각 키를 해시 함수 h(i)=i−min 값에 의해 배열의 인덱스로 매핑한다. 여기서 중요한 점은 키가 서로 다른 경우(‘distinct’)에만 적용 가능하다는 전제이며, 이를 통해 충돌 없이 1:1 대응을 보장한다. 저장 단계에서는 매핑된 위치에 키 자체를 “마크”한다. 마크는 키가 이미 해당 위치에 존재함을 나타내는 플래그 역할을 하며, 이는 추가 비트나 별도 구조 없이도 비트 연산을 통해 구현한다. 마지막 검색 단계에서는 배열을 순차 스캔하면서 마크된 위치를 찾아 원래 키를 복원하고, 이를 정렬된 순서대로 출력한다.

두 변형—읽기 전용 키와 수정 가능한 정수—의 차이는 마크를 어떻게 저장하느냐에 있다. 읽기 전용 키의 경우 원본 데이터를 변경할 수 없으므로, 별도의 비트 배열을 사용하지 않고도 키 자체를 변형 없이 “가상 마크”를 만들기 위해 키와 인덱스의 관계를 역연산한다. 반면, 수정 가능한 정수에서는 키값에 작은 오프셋을 더해 마크를 삽입하고, 정렬이 끝난 뒤 오프셋을 제거한다. 이 방식은 O(1) 추가 공간을 유지하면서도 키의 순서를 보존한다.

시간 복잡도 분석에서는 각 단계가 O(n)이며, 전체 알고리즘이 O(n) + O(n) + O(n)=O(n)임을 증명한다. 공간 복잡도는 입력 배열 외에 상수 개수의 변수와 플래그만을 사용하므로 O(1)이다. 또한, m=O(n log n) 조건 하에서 해시 함수가 충분히 균등하게 분포함을 보장해 충돌이 발생하지 않으며, 이는 정렬 성능이 입력 범위에 크게 좌우되지 않음을 의미한다. 실험 결과는 기존의 버킷 정렬·계수 정렬·주소 계산 정렬 대비 메모리 사용량이 현저히 낮고, 특히 대규모 데이터셋에서 캐시 효율이 크게 향상되어 전체 실행 시간이 감소함을 보여준다.

이 논문은 정수 정렬 문제에 대한 새로운 패러다임을 제시한다. 기존 알고리즘이 메모리 대역폭과 캐시 미스에 취약한 반면, 연관 정렬은 데이터 접근 패턴이 연속적이며 메모리 사용을 최소화한다는 장점을 갖는다. 또한, 인지 과학적 메타포를 통해 알고리즘 설계 과정을 직관적으로 설명함으로써, 교육적·이론적 가치도 높다. 향후 연구에서는 중복 키 처리, 비정수형 데이터 확장, 그리고 병렬화 전략을 탐구함으로써 적용 범위를 넓힐 수 있을 것으로 기대된다.