답변:
실제로 이미 특별에서 일반으로 축소되었습니다. 을 설정 하면 기본적으로 일반적인 알고리즘을 사용하여 특수 문제를 해결합니다.
다른 방법으로 (일반에서 특수으로 축소) :
한 세트의 주어진 가정 및 개수 K 하면 어떤 서브 세트가 있는지 확인해야 S 에 합산 K가 .
이제 일부 하위 집합의 합이 인지 확인할 수있는 알고리즘을 고려하여이 문제를 해결하려고합니다 .
이제 경우 : 우리는 쉽게 감소가 S를 ' = { X 1 , X 2 , ... , X N , - K } .
합계 서브 세트 가지고 0 IFF에 S는 합계의 서브 세트 갖고 K가 .
우리가 할 수있을 때 문제가 발생 의 일부 난을 .
이라고 가정 할 수 있습니다 (왜?).
양의 의 합 이 P 이고 음의 x i 가 N 이라고 가정합니다 .
이제 새로운 세트 을 구성하십시오.
여기서 M = P + | N | + K .
각 입니다.
이제 세트에서 zero-subset-sum 알고리즘을 실행하십시오.
에 합계 K 의 부분 집합이있는 경우 , 위 세트 중 하나 이상에 합계 0의 부분 집합이 있음을 쉽게 알 수 있습니다.
나는 당신에게 다른 방향의 증거를 남길 것입니다.
Aryabhata의 답변 은 모든 숫자에 큰 곱한 다음 각 숫자에 작은 것을 추가하여 "프레즌스 태그"처럼 작동 한 다음 추가 할 수있는 숫자를 제공함으로써 해결할 수 있습니다. 우리가 그들없이 c K에 도달 할 수 있다면 우리는 0에 도달해야 한다. 특히 존재 태그로 c = 2 ( n + 1 ) 및 1을 사용합니다.
대상 값 K 에 대한 일반 문제 의 인스턴스 가 주어지면 다음을 포함하는 특정 문제의 인스턴스 (대상 값 0)를 작성합니다.
나는 Aryabhatta가 가 긍정적 이라고 가정 합니다. (6 년이 지났으므로 독자를위한 그의 운동에 대답 할 것입니다. 우리가 할 수있는 이유는 K를 포함한 일반적인 문제의 인스턴스에서 모든 숫자 의 부호를 바꾸면 우리는 새롭고 동등한 문제 인스턴스 즉, 양의 K 인스턴스 를 해결하는 알고리즘은 문제를 해결하기에 충분합니다. 음의 K 를 가진 인스턴스를 해결하려면 이 부호 교환을 수행하고 해당 알고리즘을 실행하며 다음과 같이 답변을 전달할 수 있습니다. 원래 질문에 대한 답입니다. 물론 K = 0 인 경우 우리는 일반적인 경우를 특별한 경우로 변환 할 필요가 없습니다!)
먼저 일반적인 문제의 주어진 사례에 대한 YES 대답은 특별한 문제의 구성된 사례에 대한 YES 대답을 의미한다는 것을 보여 주자. 여기에서 우리는 가정 할 수있는 몇 가지 솔루션 일반적인 문제는 존재한다 : 즉,이 비어 있지 않은 모음 의 숫자 합계 . 우리가 대응 취할 그렇다면 -values 구성된 경우에 우리의 용액에, 그들은 합계로한다 입니다. 우리는 다음을 포함하도록 선택할 수 있습니다 솔루션에서의 합으로 우리를 떠나 . 이기 때문에 범위에 있으며 풀업 번호의 일부를 포함하여 0까지 올릴 수 있습니다.
용어를 재정렬 할 수 있습니다.
이것은 이전 방정식으로 직접 대체되어 얻을 수 있습니다.
마지막으로 양쪽을 으로 나눕니다.
원래의 일반적인 문제 인스턴스에 대한 솔루션을 제공합니다.