Рассмотрим следующую проблему:
- Учитывая набор из положительных чисел { a 1 , … , a n }, в которых k ≥ 3 является константой, мы хотим разбить набор на m подмножеств размера k так, чтобы произведение суммы каждого подмножества максимально
Эта проблема очень похожа на хорошо известное разбиение номеров way, за исключением того, что у нас есть ограничение на число номеров в каждом разделе. Для k = 2 может быть предложен следующий простой полиномиальный алгоритм,
- предположим, что числа отсортированы, то . Затем для i ≤ m назначьте a i подмножеству i , для i > m назначьте его подмножеству n - i + 1 .
Нетрудно понять, почему алгоритм работает. Просто выберите две произвольные корзины. Любой обмен числами не приведет к увеличению количества товара.
Но для больших я задаюсь вопросом, может ли проблема быть решена за полиномиальное время или нет? Я был бы также благодарен, если бы кто-то мог показать это нп-твердость.
Примечание. Я столкнулся с проблемой, когда работал над проблемой планирования в беспроводных сетях. Я нашел хороший эвристический алгоритм для решения проблемы. Но через некоторое время я подумал, что проблема может быть теоретически интересной.
Ответы:
(Это немного более подробная версия моих комментариев по этому вопросу.)
Как Туркистани предложил в комментарии к вопросу, эта проблема является NP-трудной для каждой константы k ≥3 путем сокращения от проблемы k- разбиения. Сокращение не меняет экземпляров вообще: просто обратите внимание, что максимум произведения сумм составляет, по крайней мере, ( i a i / k ) m тогда и только тогда, когда числа могут быть разбиты на m множеств, каждый из которых имеет размер k , суммы которого равны все равны.
Обратите внимание, что входные данные для проблемы k- разбиения обычно определяются как числа км, которые могут быть не все различны , и это важно в стандартном доказательстве его NP-полноты (например, в Garey и Johnson ). Таким образом, приведенное выше сокращение лишь доказывает трудность NP небольшого обобщения текущей проблемы, когда вход разрешается быть мультимножеством, а не множеством. Однако этот пробел может быть заполнен, потому что проблема k- разбиения остается NP-полной, даже если требуется, чтобы числа во входных данных были различны; см. [HWW08] для случая k = 3 (см. также ответ Сержа Гасперсана другой вопрос), который можно легко изменить для больших значений k .
Кроме того, все, что здесь указано, остается NP-полным / NP-сложным, даже если числа на входе даны в одинарном виде.
[HWW08] Хизер Хьюлетт, Тодд Дж. Уилл, Герхард Дж. Вёджингер. Мультиграф реализации последовательностей степеней: максимизация проста, минимизация трудна. Письма об исследовании операций , 36 (5): 594–596, сентябрь 2008 г. http://dx.doi.org/10.1016/j.orl.2008.05.004
источник