부분집합 문제

Subset sum problem

서브셋 합계 문제(SSP)는 컴퓨터 과학결정 문제다. 그것의 가장 일반적인 공식에는 정수의 멀티셋 T 이 있으며 문제는 정수의 어떤 부분집합이 정확한 에 합치되는지를 결정하는 것이다[1] 문제는 NP-완전인 것으로 알려져 있다. 또한 제한된 변형도 NP-완전하다.[1] 예를 들면 다음과 같다.

  • 모든 입력이 양수인 변종.
  • The variant in which inputs may be positive or negative, and . For example, given the set , the answer is yes because the subset sums to zero.
  • 모든 입력이 양수이고, 목표 합이 입력의 합계의 정확히 절반인 변형, 즉 T= 1 (++ {1}{ SSP의 이 특별한 경우는 파티션 문제로 알려져 있다.

SSP는 또한 최적화 문제로 간주될 수 있다. 즉, 합계가 최대 T이고 그 대상이 되는 부분집합을 찾으면 T에 최대한 가깝게 된다. NP-hard이지만, 실제로도 합리적으로 신속하게 해결할 수 있는 알고리즘이 몇 가지 있다.

SSP는 배낭 문제복수 부분집합 문제의 특별한 경우다.

계산 경도

SSP의 런타임 복잡성은 다음 두 가지 매개변수에 따라 달라진다.

n
입력 정수 수
  • n(정수의 수)이 작은 고정수라면, 해법에 대한 철저한 검색이 실용적이다.
L
문제를 기술하는 데 필요한 이진수 위치 값의 수로 명시된 문제의 정밀도
  • L(이진 자리수)이 작은 고정수라면 이를 정확히 해결할 수 있는 동적 프로그래밍 알고리즘이 있다.

nL이 모두 클 때 SSP는 NP-hard이다. 가장 잘 알려진 알고리즘의 복잡성은 두 매개변수 nL 중 작은 부분에서 기하급수적이다. 다음과 같은 변형은 NP-hard로 알려져 있다.

  • 모든 입력 정수는 양의 값이다(그리고 표적 합계 T는 입력의 일부임). 이것은 3SAT로부터의 직접적인 축소로 증명할 수 있다.[2]
  • 입력 정수는 양수 및 음수일 수 있으며, 대상 합 T = 0이다. 이것은 양의 정수를 가진 변종으로부터의 축소를 통해 증명될 수 있다. 이 변형은 SubsetSumPositive로, 현재 변형은 SubsetSumZero로 표시하십시오. SubsetSumPositive의 인스턴스(S, T)가 주어진 경우 값 -T로 단일 요소를 추가하여 SubsetSumZero의 인스턴스를 생성하십시오. SubsetSumPositive 인스턴스에 대한 해결책이 주어지면 -T를 추가하면 SubsetSumZero 인스턴스에 대한 해결책이 나온다. 반대로 SubsetSumZero 인스턴스에 대한 해결책이 주어지면 -T(S의 모든 정수가 양수이므로)를 포함해야 하므로, 0의 합을 얻으려면 S의 부분집합도 포함시켜야 하는데, 이는 SubsetSumPositive 인스턴스의 해결책이다.
  • 입력 정수는 양수이고, T = 합(S)/2이다. 이는 일반적인 변종으로부터의 축소를 통해서도 증명될 수 있다. 파티션 문제를 참조하십시오.

지수 시간 알고리즘

시간 지수화 n에서 SSP를 해결하는 몇 가지 방법이 있다.[3]

포함-제외

가장 순진한 알고리즘n개의 숫자의 모든 부분 집합을 순환하는 것이며, 그 모든 부분 집합에 대해 부분 집합이 올바른 숫자에 합치되는지 점검하는 것이다. 실행 시간은 순서 ( n}\ n이며 하위 집합이 있고, 각 하위 집합을 확인하려면 최대 n개의 요소를 합해야 한다.

알고리즘은 이진수 트리의 깊이 우선 검색을 통해 구현될 수 있다. 트리의 각 수준은 입력 번호에 해당하고, 왼쪽 분기는 세트에서 숫자를 제외하는 것에 해당하며, 오른쪽 분기는 숫자를 포함하는 것에 해당한다(이름 포함-제외). 필요한 메모리는 ( ) 입니다 런타임은 몇 가지 경험적 접근법으로 개선할 수 있다.[3]

  • 입력 번호를 내림차순으로 처리하십시오.
  • 주어진 노드에 포함된 정수가 지금까지 발견된 가장 좋은 부분 집합의 합을 초과하는 경우, 노드는 제거된다.
  • 주어진 노드에 포함된 정수와 나머지 모든 정수가 지금까지 발견된 최상의 하위 집합의 합보다 작을 경우, 노드는 제거된다.

호로위츠와 사니

호로위츠와 Sani[4] 더 빠른 지수 시간 알고리즘을 발표했는데, 이 알고리즘은 시간 / (n / ) {\ O에 실행되지만 훨씬 더 많은 공간이 필요하다 -O ( / ) O ( 알고리즘은 n 원소를 각각 n/ 의 두 세트로 임의로 분할한다. 이 두 세트의 각각에 대해, 그것은 그것의 요소들의 가능한 하위 개의 합계 목록을 저장한다. 그리고 나서 이 두 리스트는 각각 분류된다. 가장 빠른 비교 정렬 알고리즘을 사용하는 경우에도 이 단계의 병합에는 / ) 2} 시간이 소요되지만, 요소의 정렬된 합계 목록이 주어지면 ( + 1 번째 요소의 도입으로 목록을 두 개의 정렬할 수 있다, 그리고 이 두 개의 정렬된 목록은 O( ) O 에 병합될 수 있다 따라서 각 목록은 시간 ( /) O 로 정렬된 형태로 생성될 수 있다 두 개의 정렬된 목록을 볼 때 알고리즘은 첫 번째 어레이의 요소와 두 번째 어레이의 요소를 TI에서 확인할 수 있다.me ( / ) O( 이를 위해 알고리즘은 첫 번째 어레이를 감소 순서로(2^{n/2}). 두 번째 어레이는 증가 순서로 통과한다(가장 큰 요소에서 시작). 첫 번째 배열의 현재 원소와 두 번째 배열의 현재 원소의 합이 T보다 클 때마다 알고리즘은 첫 번째 배열의 다음 원소로 이동한다. T보다 작으면 알고리즘이 두 번째 배열의 다음 요소로 이동한다. T에 합한 두 원소가 발견되면 정지한다.

슈뢰펠과 샤미르

슈로펠. 미국과 Shamir[5] 비슷한 런타임-오(/2⋅ 2n(n/4)){\displaystyle O(2^{}n/2 \cdot(n/4))}, 훨씬 적은 공간-오(2n/4){O(2^{n/4})\displaystyle}다. 오히려고 미리n/2 요소의 모든 하위 집합을 저장하는 발전보다, 그들은 partit가 필요한 알고리즘 호로위츠와 Sanhi에 기반을 두고 있었다.이온 요소는 각각 4 세트의 n/4 원소로 생성되며, 을 사용하여 n/2 원소 쌍의 하위 집합을 동적으로 생성하며, 이는 O 2 ( ){\O(2}\ O{\O(에서 수행할 수 있기 때문이다.

공간 요구사항 때문에 HS 알고리즘은 최대 50개 정수에 실용적이고, SS 알고리즘은 최대 100개 정수에 실용적이다.[3]

하그레이브-그레이엄과 쥬스

Howgrave-Graham과 Joux는[6] O ( 을(를) 사용하여 이전의 알고리즘보다 빠르게 실행되는 확률 알고리즘을 제시했다 결정 문제만 해결하고, 주어진 합에 대한 해결책이 없음을 증명할 수 없으며, T에 가장 가까운 부분집합은 반환하지 않는다.

이후 Howgrave-Graham과 Joux의 기법이 확장되어 시간 O (.n ){\ (에 이르렀다

의사-폴리놈 시간 동적 프로그래밍 솔루션

SSP는 동적 프로그래밍을 사용하여 의사-폴리놈 시간 내에 해결할 수 있다. 예를 들어 다음과 같은 요소 시퀀스가 있다고 가정해 보십시오.

우리상태를 한 의 정수로 정의한다. 이 상태는 라는 사실을 나타낸다.

", i 의 비어 있지 않은 부분 집합이 있으며, 이 부분 집합은 s에 해당된다."

각 주(i, s)에는 다음 두 개의 주가 있다.

  • (i+1, s) + 1 }이가) 하위 집합에 포함되지 않음을 암시하는,
  • (+1, s+ x + x i + 가 하위 집합에 포함됨을 의미한다.

초기 상태(0, 0)부터 임의의 그래프 검색 알고리즘(예: BFS)을 사용하여 상태(N, T)를 검색할 수 있다. 만약 상태가 발견되면, 역추적을 통해 우리는 정확히 T의 합을 가진 하위 집합을 찾을 수 있다.

이 알고리즘의 런타임은 상태 수에서 최대 선형이다. 주의 수는 최대 N배이다. 가능한 다른 합계의 수입니다. Let A be the sum of the negative values and B the sum of the positive values; the number of different possible sums is at most B-A, so the total runtime is in . For example, if all input values are positive and bounded by some constant C, then B is at most N C, so the time required is ) .

- 은(는) 문제의 크기에서 다항식이 아니기 때문에 이 솔루션은 복잡성 이론에서 다항식 시간으로 계산되지 않으며, 이는 문제를 나타내는 데 사용되는 비트의 수입니다. 이 알고리즘은 AB의 값에서 다항식이며, A와 B의 비트 수가 기하급수적이다. 단, 단수로 인코딩된 Subset Sum은 P로 되어 있고, 그 이후 인코딩의 크기는 B-A로 선형이다. 따라서 서브셋 합계는 약하게 NP-완전일 뿐이다.

양이고 고정 상수 C에 의해 경계되는 경우에 대해, 피싱거는 시간 복잡성이 (C) O인 선형 시간 알고리즘을 발견했다(이는 목표 합이 반드시 0이 아닌 문제의 버전을 위한 것이라는 점에 유의한다).[8] 2015년 Koapariis와 Shu는 우리가 찾아야 할 총액인 부분집합 문제에 대한 결정론적 ~(T ) 알고리즘을 발견했다.[9] 2017년, Bringmann은 랜덤화된 ~ + 시간 알고리즘을 발견했다.[10]

In 2014, Curtis and Sanches found a simple recursion highly scalable in SIMD machines having time and space, where p is the number of processing elements, 은(는) 가장 낮은 정수다.[11] 이것은 지금까지 알려진 것 중 최고의 이론적 병렬 복잡성이다.

SSP의 실제 결과와 하드 인스턴스 해결책의 비교는 Curtis와 Sanches에 의해 논의된다.[12]

다항 시간 근사 알고리즘

모든 입력이 양수라고 가정합시다. SSP에 대한 근사 알고리즘은 최대 T의 과 최소 r배의 최적 합을 가진 S의 부분 집합을 찾는 것을 목표로 한다. 여기서 r근사비라고 불리는 (0,1)의 숫자다.

단순 1/2 근사치

다음의 매우 간단한 알고리즘은 근사비가 1/2이다.[13]

  • 입력 값을 내림차순으로 정렬한다.
  • 다음으로 큰 입력은 거기에 맞는 한 하위 집합에 넣으세요.

이 알고리즘이 종료되면 모든 입력이 하위 집합(분명히 최적임)에 있거나 맞지 않는 입력이 있다. 첫 번째 그러한 입력은 하위 집합에 있는 이전의 모든 입력보다 작으므로 T/2보다 작아야 한다. 따라서 하위 집합의 입력 합계가 T/2보다 많으며, 이는 분명히 OPT/2보다 많다.

완전 다항식 시간 근사 방식

다음 알고리즘은 > 마다 -) {\의 근사 비율을 얻는다 실행 시간은 n과 1 / n은 입력의 수이고 T는 부분집합에 대한 상한이다.

각 나는 1n까지 우일 목록을 모든 요소 L에 y을 포함한 것 같아요, 그리고 모든 총액+y는 L. 종류 우이의 모든 y에 대해 우이의 나는 빈 빛 y 가장 작은 요소를 상행에서 L에 우이의 각 요소 z가 증가하고 있어 주문 y을 추가하 xi을 무감각해 짐을 없앰으로써 목록// 하는 목록 나는 기분이 하나의 요소 0을 포함하도록 초기화합니다.cers서로 //지고 목표 합계 T보다 큰 원소를 버린다. y + + T/n < z ≤ T경우 y = z add zL가장 큰 원소를 반환한다. 

트리밍 단계(각 루프에 대한 내부 "")가 없으면 목록 L에는 입력의 2 하위 집합의 합계가 모두 포함된다. 트리밍 스텝은 두 가지 일을 한다.

  • 그것은 L에 남아 있는 모든 합이 T 이하임을 보장하므로 부분집합 문제에 대한 실현 가능한 해결책이다.
  • 리스트 L이 "sparse" 즉, 각 연속 부분섬의 차이가 최소한 / 임을 보장한다

이러한 속성은 목록 에 n / n 이상의 요소가 포함되어 있지 않음을 보장하므로 은 n / {\ n 의 다항식이 된다.

알고리즘이 종료되면 최적 합계가 L이면 반환되고 우리는 끝난다. 그렇지 않으면 이전 트리밍 단계에서 제거했을 것이다. 각 트리밍 단계에서는 최대 의 추가 오차를 도입하므로, N 스텝은 최대 together 의 오류를 도입한다 따라서 반환되는 솔루션은 적어도 -- }이다최소( -) .

위의 알고리즘은 입력 숫자가 작을 경우(그리고 음수가 아닐 경우) SSP에 정확한 솔루션을 제공한다. 만약 숫자의 합이 최대 P 비트로 지정될 수 있다면, 대략 = 2- 로 문제를 해결하는 것은 정확히 해결하는 것과 같다. 그런 다음, 대략적인 부분집합에 대한 다항식 시간 알고리즘은 running time 다항식을 n 및 2 즉, 지수 P)로 하는 정확한 알고리즘이 된다.

Kelerer, Mansini, Piperschy[14] 및 Speranza와 Kelerer, Piperschy 및 Pisinger는[15] 부분집합에 대한 다른 FPTAS-s를 제시한다.

다항 시간 알고리즘

[16] 이것은 서브셋을 찾는 데 사용할 수 있는 다항식 시간 알고리즘이다.

참고 항목

참조

  1. ^ a b Kleinberg, Jon; Tardos, Éva (2006). Algorithm Design (2nd ed.). p. 491. ISBN 0-321-37291-3.
  2. ^ Goodrich, Michael. "More NP complete and NP hard problems" (PDF).
  3. ^ a b c Richard E. Korf, Ethan L. Schreiber, and Michael D. Moffitt (2014). "Optimal Sequential Multi-Way Number Partitioning" (PDF).{{cite web}}: CS1 maint : 복수이름 : 작성자 목록(링크)
  4. ^ Horowitz, Ellis; Sahni, Sartaj (1974). "Computing partitions with applications to the knapsack problem" (PDF). Journal of the Association for Computing Machinery. 21 (2): 277–292. doi:10.1145/321812.321823. hdl:1813/5989. MR 0354006. S2CID 16866858.
  5. ^ Schroeppel, Richard; Shamir, Adi (1981-08-01). "A T = O(2n/2), S = O(2n/4) algorithm for certain NP-complete problems". SIAM Journal on Computing. 10 (3): 456–464. doi:10.1137/0210033. ISSN 0097-5397.
  6. ^ Howgrave-Graham, Nick; Joux, Antoine (2010). Gilbert, Henri (ed.). "New Generic Algorithms for Hard Knapsacks". Advances in Cryptology – EUROCRYPT 2010. Lecture Notes in Computer Science. Berlin, Heidelberg: Springer. 6110: 235–256. doi:10.1007/978-3-642-13190-5_12. ISBN 978-3-642-13190-5.
  7. ^ Becker, Anja; Joux, Antoine (2010). Gilbert, Henri (ed.). "Improved Generic Algorithms for Hard Knapsacks". Advances in Cryptology – EUROCRYPT 2011. Lecture Notes in Computer Science. Berlin, Heidelberg: Springer. 6632: 364–385. doi:10.1007/978-3-642-20465-4_21. ISBN 978-3-642-20465-4.
  8. ^ Pisinger, David (1999). "Linear time algorithms for knapsack problems with bounded weights". Journal of Algorithms. 33 (1): 1–14. doi:10.1006/jagm.1999.1034. MR 1712690.
  9. ^ Koiliaris, Konstantinos; Xu, Chao (2015-07-08). "A Faster Pseudopolynomial Time Algorithm for Subset Sum". arXiv:1507.02318 [cs.DS].
  10. ^ Bringmann, Karl (2017). "A near-linear pseudopolynomial time algorithm for subset sum". In Klein, Philip N. (ed.). Proceedings of the Twenty-Eighth Annual ACM-SIAM Symposium on Discrete Algorithms (SODA 2017). SIAM. pp. 1073–1084. arXiv:1610.04712. doi:10.1137/1.9781611974782.69.
  11. ^ Curtis, V. V.; Sanches, C. A. A. (January 2016). "An efficient solution to the subset-sum problem on GPU: An efficient solution to the subset-sum problem on GPU". Concurrency and Computation: Practice and Experience. 28 (1): 95–113. doi:10.1002/cpe.3636. S2CID 20927927.
  12. ^ Curtis, V. V.; Sanches, C. A. A. (July 2017). "A low-space algorithm for the subset-sum problem on GPU". Computers & Operations Research. 83: 120–124. doi:10.1016/j.cor.2017.02.006.
  13. ^ Caprara, Alberto; Kellerer, Hans; Pferschy, Ulrich (2000-02-01). "The Multiple Subset Sum Problem". SIAM Journal on Optimization. 11 (2): 308–319. doi:10.1137/S1052623498348481. ISSN 1052-6234.
  14. ^ Kellerer, Hans; Mansini, Renata; Pferschy, Ulrich; Speranza, Maria Grazia (2003-03-01). "An efficient fully polynomial approximation scheme for the Subset-Sum Problem". Journal of Computer and System Sciences. 66 (2): 349–370. doi:10.1016/S0022-0000(03)00006-0. ISSN 0022-0000.
  15. ^ Hans Kellerer; Ulrich Pferschy; David Pisinger (2004). Knapsack problems. Springer. p. 97. ISBN 9783540402862.
  16. ^ Kulkarni, Sanket (2022-01-24). Polynomial time algorithm for subset sum problem. doi:10.13140/rg.2.2.14508.95365.
  17. ^ Lagarias, J. C.; Odlyzko, A. M. (1985-01-01). "Solving low-density subset sum problems". Journal of the ACM. 32 (1): 229–246. doi:10.1145/2455.2461. ISSN 0004-5411.
  18. ^ Martello, Silvano; Toth, Paolo (1990). "4 Subset-sum problem". Knapsack problems: Algorithms and computer interpretations. Wiley-Interscience. pp. 105–136. ISBN 0-471-92420-2. MR 1086874.

추가 읽기