Я ищу, чтобы найти минимальное количество непересекающихся подмножеств (мы будем обозначать эти b_i
) из набора (мы будем обозначать X
), чтобы все b_i
удовлетворяли следующим ограничениям:
- Каждый элемент
x_i
из X
должен быть помещен ровно в одну партию. len(b_i) <= MAX_ELEMENTS_PER_BATCH
для всех i
sum(b_i) <= MAX_SUM_PER_BATCH
для всех i
Я предложил эвристику для нахождения партий, которые удовлетворяютограничения, но это не гарантирует минимальное количество партий.
Например:
- Сортировка коллекции.
- Возьмите самый большой элемент и вставьте его в свою партию.
- Заполните партию наименьшимэлементы до добавления следующего элемента приведут к тому, что сумма пакета превысит
MAX_SUM_PER_BATCH
. - Удалите элементы из этого пакета из коллекции
- Повторяйте шаги 2-4, пока не останется никаких элементов.
Я понимаю, что это, вероятно, решенная проблема с некоторым именем, о котором я не знаю, и что оптимизация для минимального количества пакетов вносит здесь сложность.
Псевдокод, python илиЯва в ваших ответах, пожалуйста.