Разбейте список чисел на n кусков так, чтобы куски имели (близко к) равные суммы и сохраняли первоначальный порядок
Это не стандартная проблема разбиения, так как мне нужно поддерживать порядок элементов в списке.
Так, например, если у меня есть список
[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.
конец редактирования
Фон:
У меня есть список, содержащий текст (текст песни) различной высоты, и я хочу разделить текст на произвольное количество столбцов. В настоящее время я вычисляю высоту цели на основе общей высоты всех линий, но, очевидно, это непостоянная недооценка, которая в некоторых случаях приводит к неоптимальному решению (последний столбец значительно выше).