집합 분할 알고리즘 벤치마크와 실용적 선택 가이드
초록
본 논문은 집합 분할(벨 수) 문제에 대한 근사식과 네 가지 비재귀 알고리즘을 실험적으로 비교한다. 작은 n 부터 큰 n 까지 벨 수를 정확히 계산하거나 근사하는 공식들을 제시하고, Hutchinson, Semba, Er, Djokic 등 네 알고리즘의 실행 시간을 다양한 컴파일러·OS 환경에서 측정한다. 결과적으로 Djokic et al. (1989) 알고리즘이 가장 빠르고 구현이 간단함을 확인하고 실무 적용을 권장한다.
상세 분석
이 연구는 집합 분할을 필요로 하는 최적화·스케줄링·패키징 문제를 배경으로, 먼저 벨 수 Bₙ 의 급격한 성장 특성을 강조한다. 저자는 재귀식 Bₙ = 1 + ∑_{k=1}^{n‑1} C(n‑1, k) B_k 을 소개하고, 실제 계산에 편리하도록 20개의 정확값을 표로 제공한다. 이후 Moser‑Wyman 공식과 Lambert W 함수를 이용한 근사식 B*ₙ 을 도입한다. 이 식은 n=2~50 구간에서 상대오차가 0.3 % 이하이며, n≤7에서는 정수 부분이 정확히 일치한다는 점에서 실용성이 뛰어나다. 또한 Berend‑Tassa의 상한 Bₙ < ⌊0.792 n log(n+1)⌋ⁿ 을 검증했는데, 작은 n 에서는 오차가 15 % 이내지만 n이 커질수록 과대평가가 심해진다.
알고리즘 비교에서는 재귀적 구현이 오버헤드로 인해 비효율적임을 지적하고, 비재귀(반복) 방식에 초점을 맞춘다. 네 가지 후보는 다음과 같다. (1) Hutchinson(1963) – Knuth이 재인용한 고전적 방법으로, 구현은 간단하지만 실행 속도가 가장 느리다. (2) Semba(1984) – 빠른 순회 구조를 사용해 중간 규모 n 에서 좋은 성능을 보인다. (3) Er(1988) – Gray‑code 아이디어를 변형했지만 실제 구현에서는 Semba와 비슷한 수준이다. (4) Djokic et al.(1989) – 완전 반복적이며 메모리 접근 패턴이 최적화돼 가장 짧은 실행 시간을 기록한다.
벤치마크는 Linux·Windows, GCC·ICC·MSVC 등 세 가지 컴파일러와 다양한 최적화 레벨(O2, O3)을 조합해 수행했다. 결과는 운영체제·컴파일러에 따라 절대적 속도가 변동하지만, 상대적 순위는 일관되게 Djokic > Semba ≈ Er > Hutchinson이다. 특히 ICC가 GCC보다 Djokic 알고리즘에서 2배 가량 빠른 점이 눈에 띈다. 하드웨어‑특화 최적화는 경우에 따라 오히려 성능 저하를 일으킬 수 있음을 언급한다.
결론적으로, 실무에서 n 이 17~18 이하인 경우 전체 분할을 열거하는 것이 가능하고, 이때는 Djokic 알고리즘을 사용하고 컴파일러 최적화는 최소 O2 수준을 유지하는 것이 바람직하다. 제한된 블록 크기 p 를 갖는 ‘제한 집합 분할’ 문제는 별도 연구가 필요하며, Gray‑code 기반 알고리즘도 향후 벤치마크 대상이 될 수 있다.
댓글 및 학술 토론
Loading comments...
의견 남기기