어쩌면 이것은 매우 간단하지만이 축소를 얻는 데 어려움이 있습니다. Subset Sum 을 Partition 으로 줄이고 싶지만 현재 관계가 보이지 않습니다!
Levin Reduction을 사용하여이 문제를 줄일 수 있습니까?
이해가되지 않으면 설명을 작성하십시오!
어쩌면 이것은 매우 간단하지만이 축소를 얻는 데 어려움이 있습니다. Subset Sum 을 Partition 으로 줄이고 싶지만 현재 관계가 보이지 않습니다!
Levin Reduction을 사용하여이 문제를 줄일 수 있습니까?
이해가되지 않으면 설명을 작성하십시오!
답변:
하자 서브 세트 합계의 인스턴스 번호 목록 (MULTISET)이며, 목표 합이다. 이라고하자 . S를 S + B , 2 S - B 를 L 에 더한리스트 라고 합시다 .
(1) B에 합산 된 서브리스트 이있는 경우 , L ' 는 M ∪ { 2 S - B } 및 L ∖ M ∪ { S + B }의 두 부분으로 나눌 수 있습니다 . 실제로 첫 번째 부분은 B + ( 2 S - B ) = 2 S 이고 두 번째 부분은 ( S - B ) + ( S + B 입니다.
(2) 가 2 개의 동일한 부분 로 분할 될 수 있다면 , B에 합산되는 L 의 서브리스트가 존재한다 . 실제로 ( S + B ) + ( 2 S − B ) = 3 S 이고 각 부분의 합이 2 S 이기 때문에 두 요소는 서로 다른 부분에 속합니다. 일반성의 손실없이 2 S - B ∈ P 1 . 의 나머지 요소 P (1) 에 속하는 과 합산하십시오.
@Yuval Filmus 가 언급 한 답변 이 올바르지 않습니다 (음수가 아닌 경우에만 정확합니다). 다음과 같은 다중 집합을 고려하십시오.
대상 합계이다 . 우리는 부분 집합이 없다는 것을 알고 있습니다. 이제 파티션 문제에 대한 인스턴스를 생성합니다. 추가 된 2 개의 새로운 요소는 2 σ - t = 12 및 σ + t = 3 입니다. 다중 집합은 이제 { − 5 , 2 , 2 , 2 , 2 , 2 , 3 , 12 } 이고 총 합은 20 입니다.
분할 문제는 부분 집합을 제공하는 답을 해결합니다. 여기서, 2 개의 새로운 요소는 동일한 부분 집합에 있습니다 (합을 반으로 나누는 다른 방법은 없습니다). 따라서 이것은 반대의 예입니다. 정답은 다음과 같습니다.
값이 인 요소를 추가하십시오 . 다중 집합의 총합은 이제 2 t 입니다. 합계의 두 부분 집합 줄 것 파티션 문제 해결 t을 . 파티션 중 하나에 만 새 요소가 포함됩니다. 합이 t 인 다른 파티션을 선택하고 파티션 문제로 축소하여 부분 집합 문제를 해결했습니다. 이것이 링크가 설명하는 것입니다.
다음은 간단한 증거입니다.
SET-PARTITION이 다항식 시간으로 검증 될 수 있음을 쉽게 알 수 있습니다. 분할 주어지면 , P 2는 단지 2 를 합산하고 그 합이 서로 다름인지 확인합니다. 이는 분명히 다항식 시간 검증입니다 (합산은 다항식 연산이므로 우리는 최대 많은 합산 만 수행하기 때문입니다 ).
증거의 핵심은 SUBSETSUM을 PARTITION으로 줄이는 것입니다. 주어진 세트 와 값 (하위 집합 합 쿼리)가 주어진 끝에 , 우리는 새로운 세트 여기서 . 이것이 축소임을 확인하려면 다음을 수행하십시오.
() t = ∑ x ∈ S x 와 같은 가 있다고 가정 하면 s − t = ∑ x ∈ S ∪ { s − 2 t } x , s − t = ∑ x ∈ X ′ ∖ ( S ∪ { s − 2 t } ) x
우리는 S ∪ {
(
and therefore the mapping is a reduction (because is in the language/set SUBSETSUM is in the language/set PARTITION) and it is clear to see that the transformation was done in polynomial time.
부분 집합 :
입력 : {a1, a2, ..., am} st M = {1..m} 및 ai는 음수가 아닌 정수이며 S⊆ {1..k} 및 Σai (i∈S) = t
분할:
입력 : {a1, a2, ..., am} 및 S⊆ {1, · · ·, m} st Σai (i∈S) = Σaj (j∉S)
Partition Np Proof : 검증자가 검증 자에게 파티션 (P1, P2)을 제공하면 검증자는 P1과 P2의 합을 쉽게 계산하고 선형 시간에서 결과가 0인지 확인할 수 있습니다.
NP_Hard : SubsetSum ≤p PARTITION
x에 SubsetSum을 입력하고 x = 〈a1, a2, ..., am, t〉를 입력하고 Σai (i에서 1에서 m까지) = a
사례 1 : 2t> = a :
f (x) = 〈a1, a2, ..., am, am + 1〉 (여기서 am + 1 = 2t−a)
x∈SubsetSum ⇔ f (x) ∈PARTITION 을 보여주고 싶습니다.
따라서 S⊆ {1, ..., m} st T = {1..m}-S 및 Σai (i∈T) = at
T '= {1 ... m, m + 1}-S이므로 Σaj (j∈T') = a-t + 2t-a = t
정확히 Σai (i∈S) = t이고 f (x) ∈PARTITION
이제 우리는 또한 f (x) ∈PARTITION ⇔ x∈SubsetSum
따라서 S⊆ {1, ..., m, m + 1}이 존재합니다. st T = {1, ..., m, m + 1}-S와 Σai (i∈T) = [a + (2t-a ) -t] = t
그리고 Σai (i∈T) = Σaj (j∈S)를 보여 주므로 m + 1∈T와 S⊆ {1, · · ·, m}과 Σai (i∈S) = t
그래서 x∈SubsetSum
사례 2 : 2t = <a :
우리는 동일하게 확인할 수 있지만 이번에는 am + 1은 a-2t입니다.
this link has a good description of both reductions, partition to subset-sum and subset-sum to partition. I think it is more obvious than YUVAL's answer. useful link