다중 레벨 루프 없는 다중집합 순열 생성 알고리즘

다중 레벨 루프 없는 다중집합 순열 생성 알고리즘

초록

본 논문은 다중집합(멀티셋) 순열을 O(1) 시간에 하나씩 생성하는 루프‑리스 알고리즘을 제안한다. 기존 알고리즘들과 달리 두 개의 트리 탐색 기반 루프‑리스 기법을 다중 레벨로 결합해 새로운 순열 순서를 만든다. 메모리 사용은 O(n)이며, 구현이 단순하고 실제 실행 속도도 기존 방법보다 우수하다. 또한 이 기법을 주차 함수(parking functions) 생성에도 확장한다.

상세 분석

이 논문은 “루프‑리스(loop‑less)”라는 개념을 핵심 설계 원칙으로 삼는다. 루프‑리스 알고리즘은 각 출력 단계에서 고정된 상수 시간만을 사용해 다음 상태를 계산하므로, 전통적인 반복문이나 재귀 호출에 의존하는 방법보다 예측 가능한 성능을 제공한다. 저자들은 먼저 기존의 두 가지 루프‑리스 기법, 즉 “트리 순회 기반 순열 생성”과 “다중집합 전용 순열 전이 규칙”을 상세히 분석한다. 첫 번째 기법은 순열을 생성 트리의 전위 순회 형태로 바라보며, 각 노드에서 가능한 교환(스와핑)이나 회전 연산을 미리 정의한다. 두 번째 기법은 다중집합의 중복 원소를 고려해, 동일 원소 간 교환이 의미 없는 경우를 배제하고 최소한의 상태 전이만을 허용한다.

논문의 핵심 기여는 이 두 기법을 “다중 레벨” 구조로 결합한 점이다. 외부 레벨에서는 다중집합의 각 원소 종류별로 블록을 구성하고, 내부 레벨에서는 각 블록 내에서 순열을 생성한다. 블록 간 전이는 O(1) 연산인 “블록 교환”으로 구현되고, 블록 내부 전이는 기존 루프‑리스 순열 알고리즘과 동일하게 상수 시간에 수행된다. 이렇게 하면 전체 순열 공간을 완전 탐색하면서도 매 단계마다 일정한 연산량만 필요하게 된다.

알고리즘의 메모리 요구량은 O(n)이다. 이는 각 원소에 대한 현재 위치와 블록 경계 정보를 저장하는 배열 몇 개와, 전이 규칙을 담은 작은 테이블 정도만 필요함을 의미한다. 기존의 O(n·log n) 혹은 O(n²) 메모리를 요구하는 방법과 비교해 현저히 효율적이다.

시간 복잡도 분석에서는 각 순열 생성 단계가 정확히 5~7개의 기본 연산(인덱스 계산, 조건 검사, 교환 등)으로 구성된다는 실험적 증거를 제시한다. 따라서 이론적으로도 O(1) 시간 보장이 성립한다. 또한 구현상의 간결성 때문에 캐시 친화성이 높아 실제 실행 시 CPU 파이프라인 스톨을 최소화한다.

응용 부분에서는 주차 함수 생성 문제에 알고리즘을 적용한다. 주차 함수는 n개의 차가 각각 1부터 n까지의 번호를 가진 주차 공간에 들어가는 경우의 수를 세는 조합 구조이며, 이는 다중집합 순열의 특수한 형태로 볼 수 있다. 저자들은 기존에 복잡한 백트래킹이나 동적 계획법을 사용하던 방식을, 제안된 루프‑리스 알고리즘으로 O(1) 시간에 한 단계씩 생성함으로써 전체 열거 시간을 크게 단축한다. 실험 결과, n=12 정도의 규모에서도 기존 방법 대비 3배 이상 빠른 성능을 기록한다.

전체적으로 이 논문은 루프‑리스 설계 철학을 다중집합 순열이라는 복합 구조에 성공적으로 확장했으며, 알고리즘 이론과 실용적 구현 사이의 격차를 메우는 좋은 사례라 할 수 있다.