DOI QR코드

DOI QR Code

3-분할 문제의 상자 채우기-교환 알고리즘

Bin Packing-Exchange Algorithm for 3-Partition Problem

  • 이상운 (강릉원주대학교 과학기술대학 멀티미디어공학과)
  • Lee, Sang-Un (Dept. of Multimedia Eng., Gangneung-Wonju National University)
  • 투고 : 2022.02.14
  • 심사 : 2022.08.05
  • 발행 : 2022.08.31

초록

본 논문은 NP-완전으로 다항시간 알고리즘이 알려져 있지 않은 3-분할 문제(TPP)에 대한 선형시간 알고리즘을 제안하였다. 본 논문은 기존에 알려진 다항시간 알고리즘인 최대-최소치와 제3의 숫자 합을 이용하는 MM법이 갖고 있는 해를 구하지 못하는 문제점을 개선한 역추적 법을 제안하였으며, 또한 역추적 법을 적용한 MM의 문제점도 개선하였다. 제안된 알고리즘은 내림차순 정렬된 S 집합을 3-분할하여 순방향, 역방향과 최대 여유량 순서인 최적합 배정 법으로 배정한 결과 10개 데이터 중 5개 데이터인 50.00%에 대해서는 최적 해를 찾을 수 있었다. 나머지 5개 데이터에 대해서도 최소 1회, 최대 7회의 잉여 상자와 부족 상자 간 숫자 교환으로 최적 해를 찾을 수 있는 성능을 보였다. 제안된 알고리즘은 n개 데이터를 3-분할한 m=n/3 보다도 적은 O(k)의 선형시간 수행 복잡도로 단순 배정과 교환 최적화를 수행하는 알고리즘으로 TPP가 NP-완전이 아닌 P-문제인 다항시간 알고리즘이 존재할 수 있음을 보였다.

This paper proposed a linear time algorithm for a three-partition problem(TPP) in which a polynomial time algorithm is not known as NP-complete. This paper proposes a backtracking method that improves the problems of not being able to obtain a solution of the MM method using the sum of max-min values and third numbers, which are known polynomial algorithms in the past. In addition, the problem of MM applying the backtracking method was improved. The proposed algorithm partition the descending ordered set S into three and assigned to the forward, backward, and best-fit allocation method with maximum margin, and found an optimal solution for 50.00%, which is 5 out of 10 data in initial allocation phase. The remaining five data also showed performance to find the optimal solution by exchanging numbers between surplus boxes and shortage boxes at least once and up to seven times. The proposed algorithm that performs simple allocation and exchange optimization with less O(k) linear time performance complexity than the three-partition m=n/3 data, and it was shown that there could be a polynomial time algorithm in which TPP is a P-problem, not NP-complete.

키워드

Ⅰ. 서론

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가 유일하게 속한 부분 집합으로 분할해야만 하기 때문이다.

OTNBBE_2022_v22n4_95_f0001.png 이미지

그림 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와 같은 개념으로 수행된다.

OTNBBE_2022_v22n4_95_f0002.png 이미지

그림 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과 같이 수행된다.

OTNBBE_2022_v22n4_95_f0014.png 이미지

그림 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의 최적 해를 얻을 수 있었다.

OTNBBE_2022_v22n4_95_f0003.png 이미지

그림 4. TPP1에 대한 BPEA

Fig. 4. BPEA for TPP1

Ⅳ. 실험 및 결과 분석

본 장에서는 표 1의 실험 데이터에 대해 MM과 BPEA로 구한 최적 해와 알고리즘 수행횟수를 비교 검증한다.

표 1. 실험 데이터

OTNBBE_2022_v22n4_95_t0001.png 이미지

Table 1. Experimental data

표 1의 실험 데이터에 MM과 BPEA를 적용한 결과는 그림 5 ~ 그림 13에 제시되어 있다.

OTNBBE_2022_v22n4_95_f0004.png 이미지

그림 5. TPP2의 해

Fig. 5. Solution of TPP2

OTNBBE_2022_v22n4_95_f0005.png 이미지

그림 6. TPP3의 해

Fig. 6. Solution of TPP3

OTNBBE_2022_v22n4_95_f0006.png 이미지

그림 7. TPP4의 해

Fig. 7. Solution of TPP4

OTNBBE_2022_v22n4_95_f0007.png 이미지

그림 8. TPP5의 해

Fig. 8. Solution of TPP5

OTNBBE_2022_v22n4_95_f0008.png 이미지

그림 9. TPP6의 해

Fig. 9. Solution of TPP6

OTNBBE_2022_v22n4_95_f0009.png 이미지

그림 10. TPP7의 해

Fig. 10. Solution of TPP7

OTNBBE_2022_v22n4_95_f0010.png 이미지

그림 11. TPP8의 해

Fig. 11. Solution of TPP8

OTNBBE_2022_v22n4_95_f0011.png 이미지

그림 12. TPP9의 해

Fig. 12. Solution of TPP9

OTNBBE_2022_v22n4_95_f0012.png 이미지

그림 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. 매칭 횟수 비교

OTNBBE_2022_v22n4_95_t0002.png 이미지

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 교환의 단순한 교환 법을 적용하여 실무에 즉시 활용 가 능한 장점을 갖고 있다.

참고문헌

  1. S. J. C. Joosten, "Relaxations of the 3-Partition Problem," Department of Applied Mathematics, University of Twente, pp. 1-41, Dec. 2011,
  2. 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
  3. 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.
  4. 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
  5. G. P. K. Ang, "Possibility of Proving P=NP Through 3-Partition Problems," Dec. 2021.
  6. Codechef, "Three Partition Problem Using Dynamic Programming," https://discuss.codechef.com/t/three-partition-problem-using-dynamic-programming/72378, Jul. 2020.
  7. 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
  8. Wikipedia, "3-Partition Problem," https://en.wikipedia.org/wiki/3-partition_problem, Retrieved Feb. 2022.
  9. R. E. Ladner, "CSE 589 Applied Algorithms 3-Colorability 3-CNF-Sat

  10. Techiedelight, "3-Partition Problem," https://www.techiedelight.com/3-partition-problem, Retrieved Feb. 2022.
  11. Techiedelight, "3-Partition Problem Extended," https://www.techiedelight.com/3-partition-problem-extended-print-all-partitions, Retrieved Feb. 2022.
  12. Stackoverflow, "3-Partition Problem," https://stackoverflow.com/questions/4803668/3-partition-problem, Retrieved Feb. 2022.