Ⅰ. 서론
s1, s2, ⋯, sn의 n개 숫자를 갖고 있는 다중 집합(multiset) s, \(\begin{aligned}\sum_{i=1}^{n} s_{i}=T\end{aligned}\)를 m=3/n개 상자로 분할하는 문제를 3-분할 문제(3-partition problem, TPP)라 한다. TPP에서 각 상자는 정확하게 T/3의 용량(capacity, Ck)과 3개 숫자만을 채워야 하는 제약조건을 만족해야한다.[1-3]
TPP는 다항시간으로 정확한 해(최적 해)를 찾을 수 있는 규칙을 가진 알고리즘이 알려져 있지 않아 NP-완전(NP-complete)으로 분류된 난제이다.[2,4]
TPP의 해를 구하는 방법으로는 Ang[5]의 최대와 최소 숫자(max-min)와 나머지 1개 숫자의 합으로 상자를 채워나가는 방법, Rai와 Vairaktarakis[4]의 0-1 정수계획법, Li와 Ding[2]의 Min-max와 Max-min 3-분할법, Panahi et al.[3]의 정수선형계획법을 이용한 병렬 알고리즘, Codechef[6]의 동적계획법(dynamic programming, DP)과 Jain과 Chaudhari[7]의 비트기법(bit wise technique) 등이 있다.
이들 중 DP는 가능한 모든 경우 수를 찾아야 하는 전수탐색 법으로 지수시간이 소요된다. 반면에 Ang[5]의 Max-min법이 적용하기가 가장 쉬우나 매칭 수행횟수는 n회+α이다.
본 논문은 주어진 S를 내림차순으로 정렬하고, 3-분할한 S1, S2, S3에 대해 단순히 순방향, 역방향과 여유량이 최대인 상자에 배정하는 최적합-배정을 수행한다. 배정된 초기 해에 대해 부족과 넘치는 상자들을 대상으로 상호 숫자를 교환하여 최적 해를 얻는 매칭 교환 최적화를 수행한다. 제안된 방법은 매칭 교환 최적화 수행횟수가 Ang[5]의 Max+min(MM)법에 비해 적은 효과를 얻었다. 2장에서는 3-분할 문제의 정의와 Ang[5]의 MM법을 고찰해 본다. 3장에서는 3-분할 상자 채우기 배정과 매칭 교환 최적화를 수행하는 알고리즘을 제안한다. 4장에서는 실제 데이터에 적용하여 제안된 알고리즘의 적합성을 평가해 본다.
Ⅱ. 3-분할 문제 정의와 관련연구 문제점
다음의 TPP1[5] 예제를 대상으로 3-분할 문제(TPP)의 정의를 고찰해 보자. TPP는 n개 숫자를 원소로 하는 집합 S를 m=n/3개 상자로 나누어 채우는 문제로, 하나의 상자에 정확히 3개의 숫자들만을 저장되어야 하며, 모든 상자의 용량이 동일해야만 한다는 제약조건을 충족해야 한다.
TPP1 : S={0,7,2,3,1,9,8,5,1}, n=9, T=36
TPP1은 n=9, T=ΣS=35로 하나의 상자에 3개 숫자만 넣을 수 있으므로 필요한 상자 개수 m=n/3=, 9/3=3으로 3개 상자의 용량 C=T/m=36/3=12이다.
Ang[5]은 S를 오름차순으로 정렬하고, m과 C를 계산한 후 상자 채우기 방법을 C-(maxsi + minsi + si)로 한번에 하나의 상자씩 채워가는 Max+Min(MM)법을 제안하였다. 만약 maxsi + minsi를 선택하였을 때 C-(maxsi + minsi)=si가 존재하지 않으면 nextminsi로 대체하여 가면서 si를 찾는다. 일단 하나의 상자가 채워지면 S=S∖{s1, s2, s3}, s1, s2, s3∈Bj를 수행한 후 다음 상자에 대해 이 과정을 반복 수행한다.
TPP1에 대한 Ang[5]의 MM법은 다음과 같이 수행된다.
S={0,7,2,3,1,9,8,5,1}, n=9, T=36, m=3, C=12
S={0,1,1,2,3,5,7,8,9}
B1 : 12-(9+0)=3, 3 존재 → {9,0,3} (1)
S={1,1,2,5,7,8}
B2 : 12-(8+1)=3, 3 미 존재 (2)
12-(8+1)=3, 3 미 존재 (3)
12-(8+2)=2, 2 미 존재 (4)
12-(8+5)=0, 0 미 존재 (5)
12-(8+7)=-3, -3 미 존재 (6)
Backtracking B1
S={0,1,1,2,3,5,7,8,9}
B1 : 12-(9+1)=2, 2 존재 → {9,1,2} (7)
S={0,1,3,5,7,8}
B2 : 12-(8+0)=4, 4 미 존재 (8)
12-(8+1)=3, 3 존재 → {8,1,3} (9)
S={0,5,7}
B3 : 12-(7+0)=5, 5 존재 → {7,0,5} (10)
Ang[5]의 MM법을 TPP1에 적용한 결과 B1={9,0,3}을 얻은 이후 B2를 얻기 위해 6번째 단계까지 수행하였지만 실패하였다. 따라서 첫 번째 단계에서 얻은 B1={9,0,3}이 잘못된 결과를 얻어 이로 역추적(backtracking)하여 다시 수행한 결과 총 10회의 알고리즘이 수행되어 B1={9,1,2}= 12, B2={8,1,3}=12, B3{7,0.5}=12의 최적 해를 얻을 수 있었다. 이와 같이 역추적 사례가 발생하는 이유는 그림 1과 같이 전수탐색의 가능한 경우 수를 파악하여 si가 유일하게 속한 부분 집합으로 분할해야만 하기 때문이다.
그림 1. TPP1의 최적 해
Fig. 1. Optimal solution for TPP1
즉, B1={9,1,2}를 선택해야만 B2={8,1,3}의 해가 존재함에도 불구하고, Ang[5]의 MM법은 첫 번째 단계에서 ‘9’의 부분집합 합이 C가되는 조합을 오름차순인 0부터 탐색하여 B1={9,0,3}을 선택함으로 인해, 이후 12-(8+1)=3인 B2={8,1,3}의 해가 존재하지 않는 결과를 유발시켰다. 따라서 B2={8,1,3}의 해를 얻기 위해 ‘3’을 포함하고 있는 B1으로 역추적하여 B1={9,1,2}로 변경시켜야만 하기 때문이다.
이와 같이 Ang[5]의 MM법이 갖고 있는 가장 큰 문제점은 순차적으로 상자를 채워가는 과정에서 더 이상 상자를 채울 수 없는 경우가 발생하기도 한다. 이 경우 이전 상자로 역추적하여 다시 다른 숫자로 상자 채우기를 반복적으로 수행해야 하지만 이러한 역추적 재귀(recursive)법 이 제안되지 않고 있다는 점이다. 따라서 이러한 역추적 재귀 법 없이는 해를 얻는데 실패할 수 있는 알고리즘의 한계점을 갖고 있다.
따라서 3장에서는 Ang의 MM법[5]에 비해 역추적을 수행하지 않으면서도 보다 간단한 알고리즘을 제안한다.
Ⅲ. 상자 채우기-교환 알고리즘
본 장에서 제안되는 알고리즘은 S를 내림차순으로 정렬하여 m=n/3개의 상자에 첫 번째 n/3은 순방향으로, 두 번째 n/3은 역방향으로, 세 번째 n/3은 여유 량이 최대인 상자 우선 배정의 최적합 배정 법으로 상자 채우기를 하고, 가능한 모든 상자의 용량이 C가 되도록 교환 최적화를 수행하는 상자 채우기-교환 알고리즘을 제안한다. 본 장에서 제안되는 알고리즘은 그림 2와 같은 개념으로 수행된다.
그림 2. 제안 알고리즘 개념
Fig. 2. Concept of proposed algorithm
제안되는 알고리즘은 S의 n개 숫자들을 내림차순으로 정렬하고 3-분할한 S1, S2, S3를 얻는다. S로부터 3-분할될 숫자를 채울 상자 개수 m=n/3와 상자 용량 C=T/3를 결정한다. 다음으로 S1에 대해서는 순방향 배정(forward allocation)을, S2에 대해서는 s1 < C에 한해 역방향 배정(backward or backpropagation allocation)을, S3에 대해서는 max(C-Tj)의 최대 여유량 상자 우선 배정법인 최적합 배정(best-fit allocation)을 한다.
배정이 종료된 후, C를 충족하지 못한 상자(넘치거나 부족한 상자)가 존재하면, 과다와 과소 여부인 d=C-Tj를 계산하여 (과다, 과소) 상자 쌍에 대해 1:1 교환으로 Tj가 C가 되도록 한다. 이를 상자 채우기-교환 알고리즘(bin packing and exchange algorithm, BPEA)이라 칭하며, 그림 3과 같이 수행된다.
그림 3. 상자 채우기-교환 알고리즘
Fig. 3. BPEA
TPP1에 대한 BPEA는 그림 4와 같다. MM은 역 추적을 포함하여 총 10회의 매칭을 수행한 반면에 BPEA는 교환 최적화를 ‘0’회 수행하였음을 알 수 있다. 즉, BPEA는 상자 채우기 단계에서 S={9,8,7,5,3,2,1,1,0}의 S1={9,8,7}을 순방향으로 B1, B2, B3 상자에 채우고, S2={5,3,2}를 역방향으로 B3, B2, B1 상자에 채운 후 각 상자의 여유량을 계산한 결과 B1=12-(9+2)=1, B2=12-(8+3)=1, B3=12-(7+5)=0으로 S3={1,1,0}을 B1, B2, B3로 채워 B1={9,2,1}=12, B2={8,3,1}=12, B3={7,5,0}=12의 최적 해를 얻을 수 있었다.
그림 4. TPP1에 대한 BPEA
Fig. 4. BPEA for TPP1
Ⅳ. 실험 및 결과 분석
본 장에서는 표 1의 실험 데이터에 대해 MM과 BPEA로 구한 최적 해와 알고리즘 수행횟수를 비교 검증한다.
표 1. 실험 데이터
Table 1. Experimental data
표 1의 실험 데이터에 MM과 BPEA를 적용한 결과는 그림 5 ~ 그림 13에 제시되어 있다.
그림 5. TPP2의 해
Fig. 5. Solution of TPP2
그림 6. TPP3의 해
Fig. 6. Solution of TPP3
그림 7. TPP4의 해
Fig. 7. Solution of TPP4
그림 8. TPP5의 해
Fig. 8. Solution of TPP5
그림 9. TPP6의 해
Fig. 9. Solution of TPP6
그림 10. TPP7의 해
Fig. 10. Solution of TPP7
그림 11. TPP8의 해
Fig. 11. Solution of TPP8
그림 12. TPP9의 해
Fig. 12. Solution of TPP9
그림 13. TPP10의 해
Fig. 13. Solution of TPP10
실험 결과를 요약하여 표 2에 제시하였다. Ang의 MM법[5]은 최소 2회, 최대 45회로 평균적으로 11.2회의 매칭을 수행하는 반면에, 제안된 BPEA는 10개 중 5개 데이터(50.00%)는 교환 최적화를 전혀 수행하지 않고 단지 배정 결과로 최적 해를 얻었으며, 평균 2회의 최적화를 수행하면 3-분할을 할 수 있음을 알 수 있다. 또한 TPP10의 경우 MM법[5]은 역추적을 4회 수행하는 과정에서 어느 상자로 복귀할지 여부를 판단하기가 매우 어려운 점이 있었으나 제안된 알고리즘은 단지 7회의 교환 최적화를 수행하여 해를 구하는 단순한 장점이 있다.
표 2. 매칭 횟수 비교
Table 2. Comparison with the number of matching
Ⅴ. 결론
본 논문은 NP-완전으로 알려진 3-분할문제(TPP)에 대해 기존에 알려진 다항시간 알고리즘인 Ang[5]의 최대-최소(MM)이 해를 찾지 못하는 경우 역추적을 적용하여 최적 해를 찾을 수 있었다.
본 논문은 역추적 기능을 갖춘 MM의 수행횟수를 82.14% 단축시킬 수 있는 알고리즘을 제안하였다. 제안된 알고리즘은 내림차순 정렬된 S를 입력으로 하여 S1, S2, S3의 3분할을 시켜 S1은 순방향으로, S2는 역방향으로, S3는 최대 여유량을 가진 상자 순서로 배정하는 단순 배정 법을 제안하였다. 배정이 완료된 후 상자에 채워진 숫자들의 합이 용량 제약조건 C를 충족시키지 못하는 상자들을 대상으로 숫자를 상호 교환하는 교환 최적화를 수행하였다.
제안된 알고리즘을 10개의 실험 데이터에 적용한 결과 50.00%인 5개 데이터에 대해서는 단순 배정 결과로 최적 해를 얻을 수 있었으며, 평균적으로는 2회의 교환 최적화를 수행하여 MM법의 11.2회 매칭 수행 횟수의 14.80%로도 최적 해를 찾을 수 있음을 보였다.
제안된 알고리즘은 단지 O(k), k < m,m=n / 3의 교환 최적화를 수행하는 선형시간 알고리즘임에도 불구하고 m개의 상자에 숫자를 배정하는 방법이 단순할 뿐 아니라 교환 최적화 방법도 잉여상자와 부족 상자 간에 1:1 교환의 단순한 교환 법을 적용하여 실무에 즉시 활용 가 능한 장점을 갖고 있다.
참고문헌
- S. J. C. Joosten, "Relaxations of the 3-Partition Problem," Department of Applied Mathematics, University of Twente, pp. 1-41, Dec. 2011,
- J. Li and H. Ding, "Approximation Schemes for the 3-Partitioning Problems," Communications and Networks, Vol. 2013, No. 5, pp. 90-95, Feb. 2013, https://doi.org/10.4236/cn.2013.51B021
- T. Panahi, T. Heidari, and V. S. Naeini, "An Efficient Parallel Algorithm for Solving the 3-Partition Problem Based on ADI," International Journal of Recent Technology and Engineering, Vol. 2, No. 1, pp. 94-98, Mar. 2013.
- S. Rai and G. L. Vairaktarakis, "Np-Complete Problems and Proof Methodology," Encyclopedia of Optimization, pp. 1-8, Jan. 2008, https://doi.org/10.1007/0-306-48332-7_351
- G. P. K. Ang, "Possibility of Proving P=NP Through 3-Partition Problems," Dec. 2021.
- Codechef, "Three Partition Problem Using Dynamic Programming," https://discuss.codechef.com/t/three-partition-problem-using-dynamic-programming/72378, Jul. 2020.
- R. Jain and N. S. Chaudhari, "A New Bit Wise Technique for 3-Partitioning Algorithm," Ijca Special Issue of International Journal of Computer Applications on Optimization and On-Chip Communication, No. 1, pp. 1-5, Feb. 2012
- Wikipedia, "3-Partition Problem," https://en.wikipedia.org/wiki/3-partition_problem, Retrieved Feb. 2022.
-
R. E. Ladner, "CSE 589 Applied Algorithms 3-Colorability 3-CNF-Sat
- Techiedelight, "3-Partition Problem," https://www.techiedelight.com/3-partition-problem, Retrieved Feb. 2022.
- Techiedelight, "3-Partition Problem Extended," https://www.techiedelight.com/3-partition-problem-extended-print-all-partitions, Retrieved Feb. 2022.
- Stackoverflow, "3-Partition Problem," https://stackoverflow.com/questions/4803668/3-partition-problem, Retrieved Feb. 2022.