부분 집합 합계 변형의 복잡성


9

이 부분 집합 합계 문제는 쉽게 / 알려져 있습니까?

주어진 정수 m, 양의 정수 집합으로 모든A={x1,x2,...,xn}xi 가 최대를k=2 비트로 설정 1 (xi=2bi1+2bi2,bi1,bi2≥0); 서브 세트가 있습니까A′⊆A 요소의 합이 같도록 m ?

그것은이다 P? 아직도 그래요NP-완전한?

그리고 모든 경우 xi 기껏해야 k=3 비트로 설정 1? 에 대한k=1 문제는 사소하다.

답변:


8

여전히 NP-완료 k=2. 부분 집합 합계의 인스턴스가 주어지면 숫자를 나누고 비트를 추가 하여이 변형으로 변환 할 수 있습니다.

첫째, 문제의 모든 숫자의 합이 2m 어떤 가치를 위해 m.

자 이제 숫자를 보자 n 원래 문제에서 k비트 세트. 이 숫자를k 정확히 2 비트가 설정된 숫자는 그 숫자의 합이 n+2k+m. 우리는 이것을 재귀 적으로 할 수 있습니다.⌈k⌉ 첫 번째까지 합한 숫자 ⌈k⌉ 비트 플러스 2k+m−1 과 ⌊k⌋ 마지막으로 요약되는 숫자 ⌊k⌋ 비트 플러스 2k+m−1.

그 숫자 외에도 숫자를 추가합니다 2k+m문제에. 솔루션은이 숫자 또는 모두를 포함해야합니다.k이전에 생성 된 숫자. 원래 목표 값이t 새로운 목표 값은 t+2k+m.

원래 문제에 둘 이상의 숫자가 있으면이 과정을 반복 할 수 있습니다 k+m+1 새로운 가치를 위해 m.

비트 위치에는 두 가지 방법 만 있습니다 k+m 설정할 수 있습니다 : 답변에 숫자가 포함될 수 있습니다 2k+m 또는 모두 k 요약되는 숫자 n+2k+m. 따라서 하위 집합 합계를 하위 집합 합계 변형으로 줄였습니다.

예를 들어 보자 {2,3,5} 목표 값 7. 이 문제는 다음 이진수를 사용하여 여기에 제시된 부분 집합 합계 변형으로 인코딩 할 수 있습니다.

2에 매핑됩니다 0100 1 과 0000 1. (여기서 여분의 비트를 사용할 필요는 없습니다.)

3에 매핑됩니다 1000 00 1,0100 00 1 과 0000 00 01

5에 매핑됩니다 1000 00 000 1,0010 00 000 1 과 0000 00 000 01.

새로운 목표 값은 1110 10 010 01.

원래 문제가 n 비트, 그때 변형 된 문제는 최대 O(n4)비트. 원래 문제는 최대O(n) 각각 최대 개수 O(n)비트의 총합도 O (n)입니다. 변형 된 문제는O(n2) 숫자 (각각부터 n비트 번호는 n+1 2길이가 최대 인 비트 수 O(n2) 우리가 사용하기 때문에 n각 숫자에 대한 추가 비트. 변환 된 문제의 총 크기는O(n4) 비트.


인코딩이 작업 테이프의 지수 크기로 이어지지 않습니까?
— Vor

아니요, 변형 된 문제는 크기가 작습니다. 입력에 n 비트가있는 경우 n 비트가 설정된 최대 n 개의 숫자가 있습니다. 따라서 변환 된 문제에는 O (n ^ 2) 숫자가 있습니다 (k 비트 숫자는 k + 1 숫자로 나뉘 기 때문에). 각 숫자는 원래 문제에서 n 개의 숫자 각각에 대해 최대 합계 + n 비트를 수용하기 위해 (2n) 비트입니다. 따라서 각 숫자에는 O (2n + n ^ 2) 비트가 있으며 총 O (n ^ 4) 비트가됩니다.
— Tom van der Zanden

@TomvaderZanden : 질문에 대한 축소 그림을 추가했습니다. 내가 올바르게 해석했는지 확인
— Vor

@ TomVaderZanden : 오늘 나는 당신의 축소를 다시보고 있지만, 임의의 숫자에서 어떻게 n 와 k 비트 세트로 나눌 수 있습니다 k "가장 높은"부분이 합쳐지는 2 비트 숫자 2k. 당신이 숫자를 가지고 있다고 가정n 와 k=13비트 세트; 13 2 비트 숫자가 필요하지만 13은 1101이며 2 비트 숫자로 "표지"할 수 없습니다 (예를 들어 3과 5 k = 2이므로 작동합니다). 각 비트마다 다른 높은 비트를 사용하면 쉽게 해결할 수 있다고 생각합니다.k2 비트 숫자; 그것들은 01111 ... 1에 합산되고, 그 다음에 합이 될 수 있도록 더미 0000 ... 1을 추가합니다2k.
— 보르

다소 모호하지만 "유도"절차를 사용하면 가능합니다. 당신은 실제로 필요하지 않습니다k 비트, 당신은 필요 ceil(log⁡k). 합계가 13 개의 1 비트 숫자를 찾으려면24그런 다음 합계 6 개의 숫자를 찾아야합니다. 23 7은 또한 23. 우리는 취할 수 있습니다10∗20+3∗21 실제로 요약하면 24.
— Tom van der Zanden

0

이것은 Vor가 질문에서 추출한 정보입니다.

에 대한 k≥3문제는 NP-complete로 남아 있습니다. 모노톤 X-SAT에서 빠른 감소를 발견했습니다 ( 여기서 축소 스키마 참조 ).

문제는 NP 완료 상태로 남아 있습니다 k=2자세한 내용은 Tom의 답변을 참조하십시오. 다음은 SUBSET SUM에서 축소 한 내용을 간략하게 나타낸 것입니다.

여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.