将一个有序的权重列表划分为 N 个权重近似相等的子列表

Partitioning an ordered list of weights into N sub-lists of approximately equal weight

假设我有一个有序的权重列表,长度为M。我想将这个列表分成N个有序的非空子列表,其中每个子列表中的权重之和尽可能接近。最后,列表的长度将始终大于或等于分区数。

例如:

一个reader的纪元幻想者想在N = 90天内读完整个时轮系列。她想每天阅读大致相同的字数,但她不想在两天内读完一章。显然,她也不想乱读。系列一共M章,她有每章字数表

她可以使用什么算法来计算最佳阅读时间表?

在这个例子中,权重可能不会有太大变化,但我正在寻找的算法应该足够通用以处理变化很大的权重。

至于我认为最佳的是什么,我想说的是,如果要在两个或三个分区的权重之间进行选择,与平均值有少量差异会比让一个分区有很大差异要好。或者换句话说,她宁愿有几天比平均水平多读或少读几百个单词,如果这意味着她可以避免比平均水平多读或少读一千个单词,即使一次也不行。我的想法是使用类似这样的东西来计算任何给定解决方案的分数:

设W_1、W_2、W_3 ... w_N为每个分区的权重(通过简单地对其元素的权重求和来计算)。 令 x 为列表的总权重除以其长度 M。 那么分数就是总和,我从 (X - w_i)^2

的 1 到 N

所以,我想我知道一种给每个解决方案打分的方法。问题是,除了暴力之外,最小化分数的最佳方法是什么?

任何正确方向的帮助或指示将不胜感激!

正如本页右栏 "Related" 下的第一个条目所暗示的,您可能正在寻找 "minimum raggedness word wrap" 算法。