향상된 제자리 연관 정렬로 구분 정수 효율적 정렬

향상된 제자리 연관 정렬로 구분 정수 효율적 정렬

초록

본 논문은 기존 제자리 연관 정렬 기법을 개선하여, 서로 다른 정수들만으로 이루어진 배열을 추가 메모리 없이 O(n) 시간에 정렬하는 알고리즘을 제시한다. 특히 워드 길이 w 에 대해 m < (w‑1)·n 인 경우 최악·평균·최선 모두 O(n) 시간 복잡도를 보이며, m ≥ (w‑1)·n 일 때는 O(n + m/(w‑1))의 시간 복잡도를 달성한다.

상세 분석

이 논문은 기존에 제안된 ‘제자리 연관 정렬(in‑place associative sort)’ 기법을 심층적으로 재검토하고, 그 한계를 극복하기 위한 두 가지 핵심 아이디어를 도입한다. 첫 번째는 정수 키가 서로 구분된(distinct) 경우에 한해, 키 자체를 직접 수정(modifiable)할 수 있다는 점을 활용해 메모리 오버헤드를 완전히 제거하는 것이다. 기존 방법은 재귀적 분할 T(n)=T(n/2)+O(n) 구조를 갖고 있었으며, 이는 이론적으로 O(n)이라 하더라도 실제 호출 스택과 반복적인 스캔으로 인한 상수 팩터가 크게 작용했다. 두 번째 아이디어는 워드 길이 w 와 입력 범위 m 의 관계를 정밀히 분석해, w‑log n 대신 w‑1 이라는 보다 큰 비트를 활용함으로써 한 번에 처리할 수 있는 키의 개수를 늘린다. 이는 ‘비트 마스크’를 이용해 여러 키를 하나의 워드에 압축 저장하고, 비트 연산으로 빠르게 위치를 계산하는 방식이다. 결과적으로, m < (w‑1)·n 인 경우에는 모든 키를 한 번의 선형 스캔만으로 정확히 제자리 배치할 수 있어, 최악·평균·최선 모두 O(n) 시간에 정렬이 가능해진다. m ≥ (w‑1)·n 일 때는 추가적인 ‘버킷’ 역할을 하는 워드 블록을 순차적으로 할당하고, 각 블록당 w‑1 개의 키를 처리함으로써 전체 복잡도를 O(n + m/(w‑1)) 으로 제한한다. 이때 평균적인 경우(키가 균등 분포)에는 버킷 할당 비용이 거의 사라져 O(m/(w‑1)) 시간만 소요된다. 알고리즘은 전체 과정에서 O(1)개의 임시 변수만을 사용하므로, 메모리 사용량이 입력 크기에 독립적이다. 또한, 키가 읽기 전용인 경우와 달리 키 자체를 수정할 수 있는 상황에서만 적용 가능하다는 전제 조건이 명시되어 있다. 이와 같은 설계는 현대 64비트 아키텍처에서 w=64 인 경우, m 이 63·n 까지 확장될 수 있음을 의미한다. 따라서 대규모 데이터베이스나 스트리밍 환경에서 메모리 제약이 심한 상황에서도 높은 정렬 효율을 기대할 수 있다.