Как я могу уменьшить сумму подмножества до раздела?


20

Может быть, это довольно просто, но у меня есть некоторые проблемы, чтобы получить это сокращение. Я хочу уменьшить Subset Sum до Partition, но в настоящее время я не вижу связи!

Можно ли уменьшить эту проблему с помощью редукции Левина?

Если не понимаешь, пиши для уточнения!

Ответы:


19

Пусть будет экземпляром суммы подмножеств, где - это список (мультимножество) чисел, а - целевая сумма. Пусть . Пусть будет список сформирован путем добавления к .L B S = L L S + B , 2 S - B L(L,B)LBS=LLS+B,2SBL

(1) Если существует подсписок суммирующий , то можно разбить на две равные части: и . Действительно, первая часть суммируется с , а вторая с .B L M { 2 S - B } L M { S + B } B + ( 2 S - B ) = 2 S ( S - B ) + ( S + B ) = 2 SMLBLM{2SB}LM{S+B}B+(2SB)=2S(SB)+(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 BLP1,P2LB(S+B)+(2SB)=3S2S2SBP1P1LB


2
Но стандартная задача о сумме подмножеств использует все целые числа, а проблема разбиения использует только неотрицательные целые числа ...
gukoff

SUBSET-SUM является NP-полной, даже с неотрицательными целыми числами, например, сокращение от 3SAT заканчивается неотрицательными целыми числами. Также возможно прямое сокращение от целого числа SUBSET-SUM до неотрицательного целого числа SUBSET-SUM.
Юваль Фильмус

1
Да, я знаю, и это сокращение очень легко. Просто отметив, что это не сумма подмножества в форме «по умолчанию». :)
gukoff

Будет ли это работать, если - это ? как , как L{B,S-B}| {B,S-B}| =B| L| =BL'L{В,S-В}|{B,SB}|=B|L|=B
Любопытно

1
@Issam Не будет, этот экземпляр PARTITION всегда будет иметь решение . L,{B,SB}
Юваль Фильмус

1

Ответ, упомянутый @Yuval Filmus, неверен (он верен ТОЛЬКО, если нет целых отрицательных чисел). Рассмотрим следующий мультимножество:

{5,2,2,2,2,2}

и целевая сумма . Мы знаем, что нет подмножества. Теперь мы создадим экземпляр для проблемы с разделами. Добавлены два новых элемента: и . Теперь мультимножество: а общая сумма равна .2 σ - t = 12 σ + t = 3 { - 5 , 2 , 2 , 2 , 2 , 2 , 3 , 12 } 2022σt=12σ+t=3

{5,2,2,2,2,2,3,12}
20

Проблема разбиения решает ответ, дающий подмножество Здесь 2 новых элемента находятся в одном подмножестве (другого способа разбить на половину суммы нет). Следовательно, это контрпример. Правильный ответ таков:

{2,2,2,2,2}

Добавьте элемент со значением . Общая сумма мультимножества теперь составляет . Решите проблему разбиения, которая даст 2 подмножества суммы . Только один раздел будет содержать новый элемент. Мы выбираем другое разбиение с суммой и мы решили проблему подмножества, сведя его к проблеме разбиения. Это то, что объясняет ссылка .2 т т т2tσ2ttt


1
Но, как говорит Ювал в комментарии к своему ответу, подмножество суммы является NP- полным, даже если мы ограничимся положительными целыми числами. Таким образом, мы можем предположить, что нет отрицательных чисел.
Дэвид Ричерби

1
Да, я согласен, сумма подмножества является NP-полной даже в случае натуральных чисел. Я просто предоставил более полное доказательство для любого целого числа.
Рохит Кумар Йена

1
«Просто предоставить более полное доказательство», а также ошибочно утверждать, что существующий ответ неверен.
Дэвид Ричерби

1
Это неверно в том смысле, что оно не работает для отрицательных целых чисел. :) Мир :)
Рохит Кумар Йена

1

Вот прямое доказательство:

Легко видеть, что SET-PARTITION может быть проверен за полиномиальное время; учитывая разбиение P1,P2 просто суммируем два и проверяем, что их суммы равны друг другу, что, очевидно, является проверкой за полиномиальное время (поскольку суммирование является полиномиальной операцией, и мы выполняем только самое большее |X| много суммирований).

Суть доказательства в том, чтобы свести SUBSETSUM к PARTITION; с этой целью, учитывая множество X и значение t (запрос суммы подмножеств), мы формируем новое множество X=X{s2t} где s=xXx . Чтобы увидеть, что это сокращение:

  • () предположим, что существует некоторый SX такой, что t=xSx тогда мы имеем, что

    st=xS{s2t}x,
    st=xX(S{s2t})x
    и мы бы получили, что S{s2t} иX(S{s2t}) образуют разбиениеX

  • () Предположим, что существует разбиение P1,P2 в X такое, что xP1x=xP2x . Обратите внимание, что это индуцирует естественное разбиение P1 и P2 в X такое, что WLOG имеет, что

    s2t+xP1x=xP2x
    s2t+xP1x+xP1x=xP2x+xP1x=s
    s2t+2xP1x=s
    xP1x=t

Следовательно , из раствора t=xSx можно образовать parition P1=S{s2t} , P2=X(S{s2t}) и , наоборот , из раздела P1,P2 мы можем сформировать решение t=xP1{s2t}xиследовательноотображениеf:(X,t)X является уменьшение (потому что(X,t)находится в языке / множества SUBSETSUMX=f(X,t)является на языке / set PARTITION) и ясно видно, что преобразование было сделано за полиномиальное время.


0

Сумма подмножества:

Ввод: {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т


-3

эта ссылка имеет хорошее описание как сокращений, разделение на подмножество-сумма и подмножество-сумма на разделение. Я думаю, что это более очевидно, чем ответ ЮВАЛА . полезная ссылка


4
Пожалуйста, не публикуйте только ссылки. Если содержание по ссылке изменится или станет недоступным, ваш ответ станет бесполезным. Пожалуйста, измените свой ответ так, чтобы он был полезен, даже если ссылка недоступна (например, перезагружая контент своими словами и предоставляя ссылку в качестве ссылки и источника).
Том ван дер Занден
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.