O(1) 시간 인접 멀티셋 조합 생성
초록
본 논문은 멀티셋 조합을 인접하게(두 위치만 1씩 차이) 생성하는 O(1) 시간 알고리즘을 제시한다. 기존 Walsh 방식은 비인접 순열을 만들었으나, 저자는 ‘뒤틀린 렉시코 트리(twisted lexico tree)’라는 새로운 구조를 도입해 순회하면서 상수 시간에 다음 조합을 얻는다. 이 트리는 각 노드의 짝·홀수에 따라 가지를 뒤집어 Gray code와 유사한 인접성을 보장한다. 알고리즘은 반복적 구현으로 메모리 오버헤드가 작고, 각 단계에서 변경되는 원소 수가 고정되어 있다.
상세 분석
논문은 먼저 멀티셋 조합(multiset combination)의 정의와 기존 O(1) 시간 생성 알고리즘들의 한계를 명확히 짚는다. 전통적인 조합 생성은 사전식(lexicographic) 순서에 따라 진행되며, 인접성(두 조합이 한 원소만 교체되는 형태) 보장은 어렵다. Walsh가 제시한 방법은 “비인접” Gray code 형태로, 한 단계에서 여러 원소가 동시에 변한다. 이는 하드웨어 구현이나 실시간 시스템에서 전이 비용을 크게 만든다.
저자는 이를 극복하기 위해 ‘렉시코 트리(lexicographic tree)’를 기본 구조로 삼고, 각 노드에 ‘패리티(parity)’ 속성을 부여한다. 패리티가 짝수이면 자식들을 왼쪽→오른쪽 순서로, 홀수이면 오른쪽→왼쪽 순서로 탐색하도록 ‘뒤틀(twist)’한다. 이 과정에서 트리의 깊이와 각 레벨의 선택 가능한 값들의 범위가 정확히 맞물려, 현재 조합에서 다음 조합으로 이동할 때 반드시 두 위치만 바뀌게 된다.
핵심 아이디어는 “한 번에 하나의 증가·감소 연산만 수행한다”는 점이다. 트리의 현재 노드가 짝수 패리티이면 가장 작은 가능한 증가를, 홀수이면 가장 큰 가능한 감소를 적용한다. 이렇게 하면 전체 탐색이 깊이‑우선(DFS) 형태가 되지만, 스택 대신 단순한 배열과 인덱스 변수만으로 구현 가능해 메모리 사용이 O(k) (k는 조합의 크기) 로 제한된다.
시간 복잡도 분석에서는 각 단계에서 수행되는 연산을 정확히 5~7개의 기본 연산(비교, 증감, 배열 접근)으로 한정한다. 따라서 입력 크기와 무관하게 ‘상수 시간’이라는 정의에 부합한다. 또한, 변경되는 원소 수가 항상 2개이므로 전이 비용이 일정하고, 하드웨어 파이프라인이나 병렬 처리에 유리한 특성을 가진다.
알고리즘의 일반화 가능성도 논의된다. 뒤틀린 렉시코 트리 구조는 조합뿐 아니라 순열, 부분집합, k-조합 등 다양한 조합 객체에 적용 가능하며, 패리티 규칙만 바꾸면 다른 인접성 조건(예: 한 자리만 바꾸는 Gray code)도 구현할 수 있다.
마지막으로 구현상의 세부 사항을 제시한다. ‘next()’ 함수는 현재 조합을 저장한 배열 A와 각 레벨의 현재 선택값을 가리키는 포인터 P를 사용한다. 패리티는 레벨 번호의 비트 연산으로 빠르게 계산되며, 트리 전이를 위한 ‘carry’와 ‘borrow’ 절차는 단일 루프 안에서 처리된다. 실험 결과는 기존 Walsh 기반 구현보다 평균 전이 시간에서 30%~45% 정도 개선되었으며, 메모리 사용량도 절반 수준으로 감소했다는 점을 강조한다.
이러한 설계는 이론적 흥미를 넘어 실시간 스케줄링, 암호화 키 생성, 대규모 시뮬레이션 등 인접 전이가 필수적인 응용 분야에 직접적인 영향을 미친다.