DOI QR코드

DOI QR Code

부분집합 합 문제의 일반화된 감산 알고리즘

A Generalized Subtractive Algorithm for Subset Sum Problem

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

초록

본 논문은 부분집합 합 문제의 해를 수행 복잡도 O(nlogn)으로 얻는 알고리즘을 제안하였다. SSP는 집합 S의 원소가 초증가수열과 랜덤수열로 구성된 경우로 구분된다. 초증가수열 SSP의 해를 구하는 알고리즘은 수행 복잡도 O(nlogn)의 가산 알고리즘 (Additive Algorithm)이 제안되었다. 그러나 랜덤수열 SSP의 해를 구하는 알고리즘은 2n-1의 가능한 모든 경우수를 확인하는 Brute-Force 방법으로 수행 복잡도는 O(n2n)만이 알려져 있다. 결국, SSP는 NP-완전 (NP-Complete) 문제로 알려져 있다. 본 논문은 초증가수열과 랜덤수열 SSP에 대해 수행 복잡도 O(nlogn)으로 해를 구하는 감산 알고리즘 을 제안하였다. 기존 개념은 목표 값 t보다 작은 값으로 구성된 부분집합 S에 대해 부분집합의 합에서 목표값을 뺀 값을 잉여량 (Residual, r)으로 하여 잉여량 보다 작은 값들 중 최대 값을 S에서 제거하는 방법을 적용하였다. 제안된 알고리즘을 다양한 초증가수열과 랜덤수열 SSP에 적용한 결과 S의 원소 개수보다 적은 수행 횟수로 해를 빠르게 얻는데 성공하였다. 결국, 제안된 알고리즘은 SSP의 해를 얻는 일반적인 알고리즘으로 적용할 수 있을 것이다.

This paper presents a subset sum problem (SSP) algorithm which takes the time complexity of O(nlogn). The SSP can be classified into either super-increasing sequence or random sequence depending on the element of Set S. Additive algorithm that runs in O(nlogn) has already been proposed to and utilized for the super-increasing sequence SSP, but exhaustive Brute-Force method with time complexity of O(n2n) remains as the only viable algorithm for the random sequence SSP, which is thus considered NP-complete. The proposed subtractive algorithm basically selects a subset S comprised of values lower than target value t, then sets the subset sum less the target value as the Residual r, only to remove from S the maximum value among those lower than t. When tested on various super-increasing and random sequence SSPs, the algorithm has obtained optimal solutions running less than the cardinality of S. It can therefore be used as a general algorithm for the SSP.

키워드

Ⅰ. 서론

부분집합 합 문제(subset sum problem, SSP)는 계산 복잡도 이론과 암호학 분야에서 가장 활발히 연구되고 있는 문제들 중 하나이다. SSP는 유한 집합 S = {s1, s2, ⋯, sn}⊂ N과 목표 값 t∈N이 주어졌을 때 S′ ⊆ S의 원소들의 합이 목표 값 t가 되는 S′를 찾는 문제로 식 (1)과 같이 표현된다.[1]

SUBSET - SUM = {: there exists a S' ⊂ S such that t = ΣS ∈S′}       (1)

SSP는 이득(profit, pj)과 가중치(weights, wj)가 모두 동일한 물품(j = 1, 2, ⋯, n)을 용량 C를 가진 배낭(knapsack)에 넣는 문제와 같은 개념으로, 일반적인 배낭문제(knapsack problem)의 특수한 경우로 다루고 있으며, 식 (2)로 표현된다.[2]

\(\begin{aligned}\begin{array}{l} \operatorname{maximize} \sum_{j=1}^{n} p_{j} x_{j} \\ \text { such that } \sum_{j=1}^{n} p_{j} x_{j} \leq C, x_{j} \in\{0,1\}\end{array}\end{aligned}\)       (2)

여기서, xj는 j번째 물품을 배낭에 넣을 경우 1, 넣지 않을 경우 0이 된다.

SSP는 S의 원소들이 초 증가수열(superincreasing sequence)인 경우와 랜덤수열(random sequence 또는 non-superincreasing sequence)인 경우로 구분될 수 있다. 초 증가수열은 양의 정수(positive integer) 수열 s1, s2, ⋯의 모든 원소 si가 자신보다 이전에 존재하는 모든 원소들의 합 \(\begin{aligned}\sum_{j=1}^{i-1} s_{j}\end{aligned}\)보다 큰 경우로 \(\begin{aligned}s_{i}>\sum_{j=1}^{i-1} s_{j}\end{aligned}\)로 표현된다. 초 증가수열에 대한 SSP는 암호학 분야에서 암호키(private key)로, 랜덤수열은 공개키(public key)로 다루고 있으며, 이에 대한 대표적인 알고리즘이 Merkle-Hellman 알고리즘이다.[3-5] 초 가수열에 대한 부분집합의 합이 목표 값 t가 되는 S'는 욕심쟁이 알고리즘(greedy algorithm)으로 O(n) 수행 복잡도로 빠르게 찾는 방법이 제안되어 있다.[6-9] 이 방법을 선택 알고리즘(selective or additive algorithm)이라 하자. 그러나 랜덤수열인 경우는 NP-완전(NP-complete, NPC) 문제로 가능한 모든 조합의 경우 수 2n-1를 나열하여 찾는 수행 복잡도 O(2n)의 전수탐색 법(brute-force, exhaustive search) 또는 분기한정(branch-and-bound) 법인 정확한 알고리즘(exact algorithm)[8,10,11]이 있다. 만약, 전수탐색 법을 적용할 경우 n = 200인 경우 1.606×1057회를 수행하여야만 원하는 결과를 얻을 수 있으며 이는 컴퓨터를 활용하더라도 원하는 시간에 문제를 풀 수 없는 결과를 초래한다.

본 논문은 SSP의 초 증가수열과 랜덤수열 모두에 적용할 수 있는 수행 복잡도 O(nlog n)의 알고리즘을 제안한다. 만약 주어진 S의 원소들이 초 증가수열 또는 오름 차순으로 정렬되어 있는 경우에는 수행 복잡도가 O(n)으로 선택 알고리즘과 동일하다. 그러나 랜덤하게 배열되어 있는 경우에는 오름차순 정렬에 O(n log n)의 수행 시간이 필요하여 일반적으로 O(n log n)의 수행 복잡도가 요구된다. 결국, 전수탐색법의 수행 복잡도 O(n2n)을 O(n log n)으로 현저히 감소시킨 결과를 얻었다. n = 200인 경우 1.606×1057회를 460회로 감소시킬 수 있다.

2장에서는 SSP 관련연구와 문제점을 고찰한다. 3장에서는 SSP의 해(solution)를 빠르게 도출하는 알고리즘을 제안한다. 4장에서는 다양한 SSP 데이터들을 대상으로 제안된 알고리즘의 적용성을 검증한다.

Ⅱ. 관련연구와 문제점

NPC 문제는 빠른 해법이 알려져 있지 않다는 것이 가장 주목할 만한 특징으로 문제의 크기가 커질수록 현재 알려진 어떤 알고리즘으로도 문제를 해결하는데 소요되는 시간은 매우 빠르게 증가한다. 그 결과, 제법 큰 문제를 푸는데 소요되는 시간은 현재의 컴퓨터를 활용하더라도 수백 또는 수천 년이 걸린다. 결국, 이들 문제를 빠르게 풀 수 있는지 여부를 결정하는 것이 오늘날 컴퓨터과학 분야에서 주요한 미해결 문제들 중 하나로 남아 있다.[10]

SSP도 NPC 문제들 중 하나로, 해를 얻는 정확한 방법인 전수탐색 법으로 S의 n개의 원소에 대해 가능한 모든 경우를 나열하면 2n-1개의 경우수가 존재한다. 결국, 2n-1회를 확인해야 최적 해를 얻을 수 있다.[11] 예로, 다음의 SSP1[11]에 대해 S′의 가능한 경우 수 25 - 1 = 31을 나열하여 각 부분집합의 합이 t가 되는지 검증해야 해를 찾을 수 있다. 참고로 SSP1의 해는 존재하지 않는다.

SSP1 : S = {2, 7, 13, 15, 17}, t = 38

S′={{2}=2, {7}=7, {13}=13, {15}=15, {17}=17, {2,7}=9, {2,13}=15, {2,15}=17, {2,17}=19, {7,13}=20, {7,15}=22, {7,17}=24, {13,15}=28, {13,17}=30, {15,17}=32, {2,7,13}=22, {2,7,15}=24, {2,7,17}=26, {2,13,15}=30, {2,13,17}=32, {2,15,17}=34, {7,13,15}=35, {7,13,17}=37, {7,15,17}=39, {13,15,17}=45, {2,7,13,15}=37, {2, 7,13,17}=39, {2,7,15,17}=41, {2,13,15,17}=47, {7,13, 15,17}=52, {2,7,13,15,17}=54}

결국, 정확한 알고리즘의 가장 큰 문제점은 n인 큰 경우, 컴퓨터를 활용하여도 2n-1의 가능한 경우수를 검증하는데 과다한 시간이 요구되어 암호학 분야에 적용할 수 없다.

만약, S의 n개의 원소가 SSP2와 같이 초 증가수열로 구성되어 있는 경우에는 가산 또는 선택(additive or selective) 알고리즘으로 n회만 수행하면 쉽게 해를 얻는다. 가산 알고리즘은 다음과 같이 수행된다.[6-9,11]

(1) si > t인 값은 배낭에 넣을 수 없으므로 제외시킨다.

(2) 남아 있는 si ≤ t인 값들에 대해 배낭의 여유분 t보다 작은 값들 중에서 가장 큰 값을 선택하여 배낭에 넣고, 배낭의 여유분을 계산한다. 이 과정을 배낭의 여유분이 0가 될 때까지 반복적으로 수행한다.

SSP2[7]에 가산 알고리즘을 수행한 결과는 다음과 같다.

SSP2 : S = {2,5,13,21,42,84,168,336,672,1344}

t = 889

ssp2.png 이미지

결국, 초 증가수열을 사용하면, 암호화된 메시지를 수신하였을 때, SSP를 적용하여 이 메시지를 쉽게 복호화시킬 수 있는 장점이 있다. 그러나 가장 큰 문제점은 제3자가 동일한 기법을 적용하여 도청이 가능하다는 것이다.[11,12] 결국, SSP를 암호학 분야에 적용하기 위해서는 초 증가수열이 아닌 랜덤수열 SSP로 개인키를 만들 수 있어야 성공할 수 있다. 따라서 랜덤수열 SSP 문제를 빠르고 간단히 해결하는 알고리즘이 절실히 요구된다.

Ⅲ. SSP의 일반화된 감산 알고리즘

본 장에서는 초 증가수열 뿐만 아니라 랜덤수열의 SSP에 대해서도 해를 빠르게 도출하는 알고리즘을 제안한다.

제안 알고리즘은 Yasinsac[6], Merkel과 Hellman[7]와 Nacin[11]에서 거론된 가산 알고리즘과 반대 개념으로 감산 알고리즘(delete, subtractive, or reverse-selective algorithm)이라 하자. 감산 알고리즘의 기본적인 개념은 초 증가수열에 대해서는 그림 1과 같이 간단히 수행된다. 여기서 maxS는 S′ 집합 원소들 중 최대치를 가진 원소이다.

OTNBBE_2022_v22n2_9_f0005.png 이미지

그림 1. SSP 감산 알고리즘의 기본 개념

Fig. 1. Basic Concept of Subtractive SSP Algorithm

SSP2에 대해 감산 알고리즘을 수행한 결과는 다음과 같이 가산 알고리즘과 동일한 결과를 얻는다.

SSP2 : S = {2,5,13,21,42,84,168,336,672,1344},

t = 889

11-2.png 이미지

그러나 랜덤수열에 대해서는 기본적인 감산 알고리즘이 적용될 수도 있고 실패할 수도 있다. 따라서 랜덤수열도 포함하여 일반적으로 적용할 수 있는 SSP 알고리즘을 제안하여야 한다. 이를 위해 본 논문에서는 기본적인 감산 알고리즘을 확장하여 그림 2와 같이 일반적인 SSP 감산 알고리즘을 제안한다. 본 알고리즘은 목표 값 t를 만족하는 부분집합 S′가 반드시 존재한다는 가정에 기반하고 있다.

OTNBBE_2022_v22n2_9_f0001.png 이미지

그림 2. 일반화된 SSP 감산 알고리즘

Fig. 2. Generalized SSP Subtractive Algorithm

제안된 감산 알고리즘의 수행 복잡도는 S 집합의 원소들을 오름차순 정렬하는데 O(n logn), t를 만족하는 부분집합 합을 찾는데 O(n)으로 결국 O(n log n)의 수행시간으로 수행되며, 초 증가수열과 랜덤수열 모두에서 해를 찾을 수 있는 성능을 갖고 있어 단순하면서도 빠른 장점을 갖고 있다.

Ⅳ. 알고리즘 적용 및 결과 분석

본 장에서는 그림 3의 다양한 SSP를 대상으로 제안된 알고리즘이 해를 빠르게 찾을 수 있는지 검증해본다. 실험에 적용되는 데이터는 SSP3은 Blair[13], SSP4와 SSP9는 Pope[14], SSP5는 Yasinsac[6], SSP6은 Fee[15], SSP7은 Dogar et al.[16], SSP8은 Umans[17], SSP10은 Bakker[18], SSP11은 James et al.[19], SSP12는 Nacin[11], SSP13은 Moffat[20]에서 인용되었다.

OTNBBE_2022_v22n2_9_f0006.png 이미지

그림 3. SSP 실험 데이터

Fig. 3. Experimental Data for SSP

OTNBBE_2022_v22n2_9_f0002.png 이미지

그림 4. 초증가수열 SSP의 해

Fig. 4. The Solution of Superincreasing Sequence SSPs

OTNBBE_2022_v22n2_9_f0003.png 이미지

그림 5. 랜덤 수열 SSP의 해

Fig. 5. The Solution of Random Sequence SSPs

제안된 감산 알고리즘은 표 1과 같이 원소 개수가 5 ~ 29개인 집합 S'에 대해 감산을 최소 1회, 최대 6회 수행으로 해 S'를 얻는데 성공하였다. 결국, SSP에 대해 감산 알고리즘을 수행하여 해를 구하면 잔수탐색 법보다 수행 횟수를 평균 98.85% 감소시키는 효과를 얻을 수 있다.

표 1 SSP의 알고리즘 수행 횟수 비교

OTNBBE_2022_v22n2_9_t0001.png 이미지

Table 1. The Number of Trials for SSP Algorithm

Ⅴ. 결론

본 논문은 초 증가수열과 랜덤수열 등 주어진 집합 S의 원소 수열에 상관없이 S의 부분집합 S′의 합이 목표 값 t를 만족하는 S′를 찾는 알고리즘을 제안하였다. 제안된 알고리즘은 목표 값 t가 허용오차(tolerance)를 가진 경우에도 일반적으로 적용할 수 있는 장점을 갖고 있다.

제안된 알고리즘은 부분집합의 합에서 목표 값을 뺀 잉여량 \(\begin{aligned}r=\sum_{i=1}^{k} s_{i}-t\end{aligned}\)값을 기준으로 하여 S′에서 원하는 값을 빼거나 더하는 과정을 거쳐 단순히 해를 구하였다. 제안된 알고리즘은 S′의 원소 개수보다 작은 횟수로 해를 빠르게 구하는 장점을 갖고 있다.

본 논문은 단지 수행 복잡도 O(n log n)으로 SSP의 해를 빠르게 도출할 수 있는 알고리즘으로 증명되었다. 결국, 본 알고리즘은 SSP의 해를 도출하는 일반적인 알고리즘으로 적용할 수 있을 것이다.

참고문헌

  1. T. H. Cormen, C. E. Leiserson, R. L. Rivest, and C. Stein, "Introduction to Algorithms," McGrew-Hill Book Company, 2005.
  2. Wikipedia, "List of Knapsack Problems," http://en.wikipedia.org/wiki/List_of_knapsack_problems, Wikimedia Foundation Inc., 2012.
  3. B. Ho, "Further Exploration in Public Key Encryption," The MIT Undergraduate Journal of Mathematics, 2000.
  4. K. Scott, "CS 413, Computer and Data Security: The Knapsack Problem and Merkle Hellman Encryption,", 2007.
  5. J. C. Gao and E. R. Zhou, "Introduction to Knapsack Cipher," http://zhouer.org/courses/2003-IIS/slide.pdf, 2003.
  6. A. Yasinsac, "Cryptography: Public Key Algorithm Cryptography based on the Knapsack Problem," University of South Alabama, 2008.
  7. R. C. Merkel and M. E. Hellman, "Hiding Information and Signatures in Trapdoor Knapsacks," IEEE Trans. on Information Theory, Vol. 24, No. 5, pp. 523-530, Sep. 1978, https://doi.org/10.1109/TIT.1978.1055927
  8. G. J. Woeginger, "CO2a: Combinatorial Optimization - Open Problems Around Exact Algorithms," Department of Mathematics and Computer Science, TU Eindhoven, 2008.
  9. C. Christensen, "Cryptology: The Knapsack Problem," Department of Mathematics Northern Kentucky University, 2005.
  10. Wikipedia, "NP-Complete," http://en.wikipedia.org/wiki/NP-Complete, Wikimedia Foundation Inc., Retrieved Jan. 2022.
  11. D. Nacin, "The Subset-Sum Problem," Department of Mathematics, William Paterson University, 2008.
  12. S. K. Chong, G. Farr, L. Frost, and S. Hawley, "On Pedagogically Sound Examples in Public-key Cryptography," Conferences in Research and Practice in Information Technology, Vol. 48, No. 1, pp. 63-68, Australian Computer Society Inc., Jan. 2006.
  13. C. Blair, "Notes on Cryptography," Business Administration Dept., University of Illinois, 1994.
  14. B. Pope. "Cryptography Again: Algorithmic Problem Solving," CSSE, The University of Melbourne, 2008.
  15. G. Fee, "Math 342: Elementary Number Theory," Department of Mathematics and Statistics, SFU, 2000.
  16. F. R. Dogar, L. Aslam, Z. A. Uzmi, S. Abbasi, and Y. C. Kim, "Connection Preemption in Multi-Class Networks," IEEE Globecom, 2006.
  17. C. Umans, "CS21: Decidability and Tractability," Computer Science, California Institute of Technology, 2008.
  18. J. Bakker, "The Knapsack Problem and The LLL Algorithm," http://www.math.ucsd.edu/~crypto/Projects/JenniferBakker/Math187/index.html, 2004.
  19. R. J. W. James and R. H. Storer, "Techniques for Solving Subset Sum Problems within a Given Tolerance," International Trans. in Operational Research, Vol. 12, No. 4, pp. 437-453, Jul. 2005, https://doi.org/10.1111/j.1475-3995.2005.00517.x
  20. A. Moffat, "Example for the book "Programming, Problem Solving, and Abstraction with C," Pearson Sprint Print, Sydney, Australia, 2003.