Это не стандартная проблема секционирования, так как мне нужно поддерживать порядок элементов в списке.
Так, например, если у меня есть список
[1, 6, 2, 3, 4, 1, 7, 6, 4]
и я хочу два куска, тогда раскол должен дать
[[1, 6, 2, 3, 4, 1], [7, 6, 4]]
для суммы по 17 с каждой стороны. Для трех кусков результат будет
[[1, 6, 2, 3], [4, 1, 7], [6, 4]]
для сумм 12, 12 и 10.
Изменить для дополнительного объяснения
В настоящее время я разделяю сумму с количеством кусков и использую ее как цель, а затем итерацию до тех пор, пока не приблизится к этой цели. Проблема в том, что некоторые наборы данных могут повредить алгоритм, например, попытаться разделить следующее на 3: -
[95, 15, 75, 25, 85, 5]
Сумма составляет 300, цель равна 100. Первый кусок будет равен 95, второй будет суммой до 90, третий - суммой до 110, а 5 - "оставшейся". Добавление его там, где оно должно было бы дать 95, 90, 115, где более "разумное" решение будет 110, 100, 90.
end edit
Фон:
У меня есть список, содержащий текст (тексты песен) разных высот, и я хочу разделить текст на произвольное количество столбцов. В настоящее время я вычисляю целевую высоту, основанную на общей высоте всех строк, но, очевидно, это непротиворечивое недооценка, которая в некоторых случаях приводит к субоптимальному решению (последний столбец значительно выше).