假设我有一个权重的有序列表,长度为m,我想把这个列表分成n个有序的非空子列表,其中每个子列表中的权重之和尽可能接近。最后,列表的长度将始终大于或等于分区数。
例如:
一个时代幻想的读者想在N=90天内阅读整个时间序列她希望每天阅读同样数量的单词,但她不想在两天内打破一个章节。显然,她也不想看得太乱。这个系列共有m个章节,她列出了每个章节的字数。
她可以用什么算法来计算最佳的阅读计划?
在这个例子中,权重可能不会有太大的变化,但是我正在寻找的算法应该足够通用,能够处理变化很大的权重。
至于我认为最佳的是什么,我想说,在两个或三个分区的权重不同的情况下,从平均值中选择一小部分要比一个分区的权重变化大得多要好换言之,如果这意味着她可以避免比平均水平多读或少读1000个单词,甚至一次,她宁愿有几天的时间读比平均水平多读或少读几百个单词我的想法是用这样的方法来计算任何给定解的分数:
让你1,2,3w_n是每个分区的权重(通过简单地求和其元素的权重来计算)。
设x为列表的总重量除以其长度m。
那么分数就是总和,从1到N的(X-w^I)^2
所以,我想我知道一种方法来给每个解决方案打分。问题是,除了暴力,什么是减少比分的最好方法?
任何正确方向的帮助或指示都将不胜感激!
最佳答案
正如本页右栏“related”下的第一个条目所暗示的,您可能正在寻找“minimum raggedness word wrap”算法。
关于algorithm - 将权重的有序列表划分为权重大致相等的N个子列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32927031/