【发布时间】:2016-01-24 21:58:29
【问题描述】:
我正在寻求一些帮助,以便在 Python 中编写一个完成以下任务的算法:
给定一个实数列表,将该列表排序/分组为 n 个较小的列表,以使平均最小组值最大化。
例如,考虑将下面的列表分为两个列表 - A 和 B,每个列表包含两个元素。
lis = [1,1,2,2]
在下面的第一个场景中,每个列表的最小值为 1,因此平均最小值为 1。
# Scenario 1
A = [1,2]
B = [1,2]
# Scenario 2
A = [1,1]
B = [2,2]
在第二种情况下,A 的最小值为 1,B 的最小值为 2,因此平均最小值为 1.5。这种安排是最优的。
很明显,最好将“相似”的值分组。我可以用Jenks natural breaks optimization(或一维k-means聚类)来做到这一点。但是,我不确定我的目标和 Jenks 优化的目标是否(数学上)等价。
任何帮助或意见将不胜感激。
编辑:较小的列表必须全部具有相同的大小(假设给定的列表总是分成较小的组,没有余数)。
【问题讨论】:
-
较小的列表是否都必须具有相同的大小?
-
是的,确实如此。对不起,我应该这么说的。
-
对对象进行排序。根据需要切片。这会产生最佳解决方案 - 但您可能一直在问错误的问题。
-
是的,您只需对列表进行排序,然后将其切片。要将其分成 n 个子列表,每个子列表有 m 个元素,请将最小的 m 放入一个子列表中,将下一个最小的 m 放入另一个子列表中,等等。
标签: python algorithm sorting optimization