Пусть будет экземпляром суммы подмножеств, где - это список (мультимножество) чисел, а - целевая сумма. Пусть . Пусть будет список сформирован путем добавления к .L B S = ∑ L L ′ S + B , 2 S - B L(L,B)LBS=∑LL′S+B,2S−BL
(1) Если существует подсписок суммирующий , то можно разбить на две равные части: и . Действительно, первая часть суммируется с , а вторая с .B L ′ M ∪ { 2 S - B } L ∖ M ∪ { S + B } B + ( 2 S - B ) = 2 S ( S - B ) + ( S + B ) = 2 SM⊆LBL′M∪{2S−B}L∖M∪{S+B}B+(2S−B)=2S(S−B)+(S+B)=2S
(2) Если может быть разделен на две равные части , то есть подсписок суммирования до . Действительно, поскольку и каждая часть суммируется с , эти два элемента принадлежат разным частям. Без потери общности, . Остальные элементы в принадлежат к и сумму к .P 1 , P 2 L B ( S + B ) + ( 2 S - B ) = 3 S 2 S 2 S - B ∈ P 1 P 1 L BL′P1,P2LB(S+B)+(2S−B)=3S2S2S−B∈P1P1LB
Ответ, упомянутый @Yuval Filmus, неверен (он верен ТОЛЬКО, если нет целых отрицательных чисел). Рассмотрим следующий мультимножество:
и целевая сумма . Мы знаем, что нет подмножества. Теперь мы создадим экземпляр для проблемы с разделами. Добавлены два новых элемента: и . Теперь мультимножество: а общая сумма равна .2 σ - t = 12 σ + t = 3 { - 5 , 2 , 2 , 2 , 2 , 2 , 3 , 12 } 20−2 2σ−t=12 σ+t=3
Проблема разбиения решает ответ, дающий подмножество Здесь 2 новых элемента находятся в одном подмножестве (другого способа разбить на половину суммы нет). Следовательно, это контрпример. Правильный ответ таков:
Добавьте элемент со значением . Общая сумма мультимножества теперь составляет . Решите проблему разбиения, которая даст 2 подмножества суммы . Только один раздел будет содержать новый элемент. Мы выбираем другое разбиение с суммой и мы решили проблему подмножества, сведя его к проблеме разбиения. Это то, что объясняет ссылка .2 т т т2t−σ 2t t t
источник
Вот прямое доказательство:
Легко видеть, что SET-PARTITION может быть проверен за полиномиальное время; учитывая разбиениеP1,P2 просто суммируем два и проверяем, что их суммы равны друг другу, что, очевидно, является проверкой за полиномиальное время (поскольку суммирование является полиномиальной операцией, и мы выполняем только самое большее |X| много суммирований).
Суть доказательства в том, чтобы свести SUBSETSUM к PARTITION; с этой целью, учитывая множествоX и значение t (запрос суммы подмножеств), мы формируем новое множество X′=X∪{s−2t} где s=∑x∈Xx . Чтобы увидеть, что это сокращение:
(⟹ ) предположим, что существует некоторый S⊂X такой, что t=∑x∈Sx тогда мы имеем, что s−t=∑x∈S∪{s−2t}x,
s−t=∑x∈X′∖(S∪{s−2t})x
и мы бы получили, что S∪{s−2t} иX′∖(S∪{s−2t}) образуют разбиениеX′
(⟸ ) Предположим, что существует разбиение P′1,P′2 в X′ такое, что ∑x∈P′1x=∑x∈P′2x . Обратите внимание, что это индуцирует естественное разбиение P1 и P2 в X такое, что WLOG имеет, что s−2t+∑x∈P1x=∑x∈P2x
⟹s−2t+∑x∈P1x+∑x∈P1x=∑x∈P2x+∑x∈P1x=s
⟹s−2t+2∑x∈P1x=s
⟹∑x∈P1x=t
Следовательно , из раствораt=∑x∈Sx можно образовать parition P1=S∪{s−2t} , P2=X′∖(S∪{s−2t}) и , наоборот , из раздела P′1,P′2 мы можем сформировать решение t=∑x∈P′1∖{s−2t}x иследовательноотображениеf:(X,t)→X′ является уменьшение (потому что(X,t) находится в языке / множества SUBSETSUM⇔X′=f(X,t) является на языке / set PARTITION) и ясно видно, что преобразование было сделано за полиномиальное время.
источник
Сумма подмножества:
Ввод: {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
Case1: 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] = т
и он показывает Σai (i∈T) = Σaj (j∈S), поэтому m + 1∈T и S⊆ {1, · · ·, m} и Σai (i∈S) = t
так x∈SubsetSum
Случай 2: 2t = <a :
мы можем проверить то же самое, но только в этот раз я + 1 является -2т
источник
эта ссылка имеет хорошее описание как сокращений, разделение на подмножество-сумма и подмножество-сумма на разделение. Я думаю, что это более очевидно, чем ответ ЮВАЛА . полезная ссылка
источник