У меня есть список задач. У каждого из них есть название и время, необходимое для выполнения.
Пример:
[TaskA, 4 hours], [TaskB, 8 hours], [TaskC, 10 hours]
Я бы хотел привязать эти задачи к конкретным датам. Например, чтобы распределить их в течение 2 дней, я мог бы разделить их как:
Day 1: TaskA, TaskB | Day 2: TaskC
Day 1: TaskA | Day 2: TaskB, TaskC
Это, конечно, усложняется, когда нужно выделить больше задач/дней. Я думал об использовании метода наименьших квадратов для их назначения (я полагаю, что TeX использует аналогичный подход для распределения слов по строкам).
Я не могу изменить порядок задач. В дне не может быть задач (но так всегда будет с методом наименьших квадратов, не так ли?).
Я реализовал алгоритм для выполнения этого расчета, и он работает правильно, но очень медленно (10+ минут для 50 задач за 14 дней). Я просматриваю список задач и для каждой либо кладу ее в текущую «корзину», либо перемещаю в другую «корзину» (день). Затем я выбираю лучшее решение. Я также заранее обрезаю деревья рекурсии, используя текущее минимальное значение. Это сократило время с 30+ до 10+ минут, но все равно слишком медленно.
Я использую Ruby, но алгоритм на любом языке, который я могу портировать, будет в порядке.