Это будет NP-хард! Я считаю, что вы можете сделать сокращение от Подмножество до этого.
Согласно комментариям BlueRaja / polygene, я постараюсь обеспечить полное сокращение от суммы подмножества.
Вот сокращение:
Проблема суммы подмножеств: Даны целые числа x 1 , x 2 , ..., x n , существует ли какое-то непустое подмножество, которое суммирует ноль?
Наша проблема: учитывая два целочисленных массива размера k, найдите минимально возможную разницу суммы двух массивов, предполагая, что мы можем перемешивать целые числа в массивах, рассматривая оба массива как один массив.
Скажем, у нас было полиномиальное время для нашей задачи.
Скажем, теперь вам даны целые числа T = {x 1 , x 2 , ..., x n } (multiset)
Пусть S i = x 1 + x 2 + ... + x n + x i .
Пусть T i = {x 1 , x 2 , ..., x i-1 , x i + 1 , ..., x n } (= T - x i )
Определение
A i = Массив, сформированный с использованием T i
B i = [S i , 0, ..., 0] (т. Е. Один элемент - S i , а остальные - нули).
Пусть m i = минимальная разница, найденная нашей задачей для массивов A i и B i
(мы запускаем нашу задачу n раз).
Утверждение: Некоторое непустое подмножество T суммирует ноль тогда и только тогда, когда существует некоторый i, для которого m i = 0.
Доказательство: (Wlog) говорят х 1 + х 2 + .. + х к = 0
Тогда
A = [x k + 1 , ..., x n , 0, ... 0]
B = [x 2 , x 3 , ..., x k , S 1 , 0, .. 0]
дает минимальную разницу m 1 , которая равна | x 2 + .. + x k + (x 1 +. .. + x n ) + x 1 - (x k + 1 + .. + x n ) | = | 2 (x 1 + x 2 + .. x k ) | = 0.
Аналогично доказывается часть if.
Фактически, это также следует (более легко) из раздела тоже: просто создайте новый массив со всеми нулями.
К счастью, я не допустил ошибок.