주판 정렬(bead sort)은 비드 소트(beadsort), 중력 정렬(gravity sort), 구슬 정렬 등으로도 불리는 자연 정렬(natural sorting) 알고리즘이다. 2002년 조슈아 J. 아룰라난담(Joshua J. Arulanandham), 크리스티안 S. 칼루데(Cristian S. Calude), 마이클 J. 디니언(Michael J. Dinneen)이 개발하여 이론 컴퓨터 과학 유럽 협회 게시판(The Bulletin of the European Association for Theoretical Computer Science)에 발표하였다.
원리
주판 정렬은 주판의 막대에 꿰어진 구슬(비드)들이 중력의 영향을 받아 아래로 떨어지는 자연 현상을 모델로 한다. 각 막대(수직 기둥)에 대응하는 양의 정수의 개수만큼 구슬을 꿰어 놓은 뒤, 구슬들이 중력에 의해 아래로 떨어지도록 하면 맨 아래 행부터 차례로 더 큰 값이 채워져 전체가 정렬되는 원리이다.
구체적으로, 정렬 대상이 되는 양의 정수들을 각 행에 구슬의 개수로 표현한다. 이후 구슬이 중력에 의해 아래쪽 행으로 떨어지면, 각 행은 입력 집합의 원소들을 오름차순(시각화에 따라서는 내림차순)으로 재배열한 결과를 나타내게 된다.
이 알고리즘의 기본 원리는 계수 정렬(counting sort)과 유사하다고 알려져 있다. 각 기둥에 놓인 구슬의 개수는 해당 기둥의 인덱스 값과 같거나 큰 원소의 개수에 대응한다.
복잡도
주판 정렬의 시간 복잡도는 구현 방식에 따라 여러 수준으로 구분된다.
- O(1): 모든 구슬이 동시에 떨어진다고 가정하는 추상적인 경우로, 실제 구현에서는 불가능하다.
- O(√n): 중력을 반영한 물리적 모형에서 구슬이 떨어지는 시간이 최대 높이의 제곱근에 비례하는 경우이다.
- O(n): 구슬을 한 행씩 이동시키는 경우로, 아날로그·디지털 하드웨어 구현에서 사용된다.
- O(S) (S는 입력 집합의 원소들의 합): 각 구슬을 개별적으로 하나씩 이동시키는 소프트웨어 구현의 경우이다.
디지털 및 아날로그 하드웨어 구현에서는 정렬 시간이 O(n)을 달성할 수 있지만, 소프트웨어 구현에서는 일반적으로 훨씬 느리며 양의 정수만 정렬할 수 있다. 또한 최상의 경우에도 O(n²)의 공간이 필요하다.
주판 정렬은 비교 기반 정렬 알고리즘의 최악 경우 하한인 O(n log n)보다 빠르게 수행될 수 있는 드문 정렬 알고리즘 중 하나이다. 이는 정렬 키가 항상 양의 정수라는 구조적 특성을 활용하기 때문에 가능하며, 이 점에서 비둘기집 정렬(pigeonhole sort)과 유사한 속성을 가진다.
사용 가능 맥락
주판 정렬은 양의 정수 집합을 정렬하는 데 사용되며, 값의 범위가 작은 데이터에 특히 효율적일 수 있다. 그러나 소프트웨어 구현에서는 공간 복잡도가 크고 실제 처리 성능이 낮아 실용적인 용도보다는 자연 컴퓨팅(natural computing)의 한 사례로서 이론적·교육적 가치가 강조되는 경향이 있다.
참고 사항
정렬 알고리즘은 컴퓨터 과학에서 검색, 중복 제거, 통계 처리 등 광범위한 데이터 처리 작업의 전처리 단계로 사용되는 기본 개념으로, 주판 정렬은 그중 자연 현상을 모방한 독특한 방식의 정렬 알고리즘으로 분류된다.