У меня есть несколько порций данных.
В качестве аргумента мы скажем, что они
File 1 - 150Kb
File 2 - 50Kb
File 3 - 70Kb
File 4 - 60Kb
File 5 - 70Kb
File 6 - 100Kb
File 7 - 90Kb
Для передачи я могу упаковать их в максимальную полезную нагрузку 300 КБ.
Если вы просто выполните итерацию по ним, чтобы получить
TRANS1: 150Kb + 50Kb + 70Kb = 270Kb - the next file puts you over the limit of 300Kb
TRANS2: 60Kb + 70Kb + 100Kb = 230Kb - the next file puts you over the limit of 300Kb
TRANS3: 90Kb
Итак, три отдельные передачи.
Но если вы реорганизуете их, вы можете отправить
Files 1,2,6 together = 300Kb
Files 3,4,5,7 together = 290Kb
Таким образом, вы сокращаете количество потребностей в отдельных передачах. Так как есть
денежные затраты, связанные с каждой передачей (эти передачи на самом деле являются вызовами API сторонней системы, где мы выставляем счет за вызов API), мы хотели бы сохранить номер
отдельной полезной нагрузки отправляет до минимума.
Есть ли какой-нибудь алгоритм сортировки вокруг этого вида оптимизации,
который возьмет список взвешенных объектов и отсортирует / сгруппирует их так, чтобы вы закончили
с наименьшим количеством групп
Для справки, я бы кодировал это в .NET, но если бы вы могли предоставить и пример на другом языке или реализацию / описание псевдо-кода, это было бы также здорово.
Спасибо,
Эоин С