Вариант PartitionProblem - фиксированный размер подмножеств

У меня есть проблема, которая является разновидностью проблемы с разделами, которая является NP-полной. Это проблема оптимизации, а не проблема принятия решения.

Задача: разбить список чисел на два подмножества так, чтобы разница их сумм была минимальной, и найти два подмножества. Если n четное, то размеры должны быть n/2, а если нечетное, то floor[n/2] и ceil[n/2].

Предполагая, что алгоритм DP с псевдополиномиальным временем лучше всего подходит для точного решения, как его можно изменить, чтобы решить эту проблему? И какие алгоритмы приближенного лучше всего подходят для решения этой проблемы?


person Bruce    schedule 16.06.2013    source источник


Ответы (1)


Поскольку вы не указали, какой алгоритм использовать, я предполагаю, что вы используете тот, который определен здесь: http://www.cs.cornell.edu/~wdtseng/icpc/notes/dp3.pdf

Затем, используя этот алгоритм, вы добавляете переменную для отслеживания наилучшего результата, инициализируете ее значением N (сумма всех чисел в списке, так как вы всегда можете выбрать одно подмножество пустым набором) и каждый раз, когда вы обновляете T (например: T [i]=true) вы делаете что-то вроде bestRes = abs(i-n/2)<bestRes : abs(i-n/2) : bestRes. И вы возвращаете bestRes. Это, конечно, не меняет сложности алгоритма.

Я понятия не имею о вашем втором вопросе.

person Tomer Arazy    schedule 16.06.2013