У меня есть несколько фрагментов данных.
Ради аргументов мы скажем, что они
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, но если вы можете предоставить пример на другом языке или реализацию/описание псевдокода, это тоже было бы здорово.
Спасибо, Эоин С.