java - 如何对列表进行分区以使子列表的总和大致相等
问题描述
我有一个包含 2000 个或更少对象的排序列表,每个对象都有一个数值。我想知道如何(用Java)编写一种方法,将这个列表分成子列表,每个子列表大约有200个对象(有公平的余地),这样每个子列表的值的总和大致相等。
即使完整列表的对象少于 2000 个,我仍然希望每个子列表大约有 200 个对象。谢谢!
解决方案
这是一种快速而肮脏的贪婪方法,应该可以很好地工作。
首先,决定你最终会得到多少个列表。叫那个m
。
将您的对象分成 组m
,其中一个可能较小的组是最接近 0 的值。
按最大和最小之间的降序排列您的组。
将您的组分配到您的列表中,最大的对象进入总数最低的组,次大的进入次低的组,依此类推。
完成后,您将获得大小合适的列表,并且差异相对较小。
(你可以用动态编程做得比这更好。但它也会更难写。 如何约束具有多个随机选择位置的项目,以便每个项目的平均位置在一定范围内可能会给你一些关于如何做的想法那。)
推荐阅读
- dc.js - 使用 DC js 和 Crossfilter 以及数据表的多个饼图
- reverse-engineering - google cast 协议 v2 的身份验证响应消息中字段 7 的类型
- reactjs - 理解 Formik 和 React
- c - 我可以在 C 中获取 RIP 地址吗?
- c - 在 C 中相互调用的 2 个内联函数的行为
- css - 将 className 属性添加到 dangerouslySetInnerHTML 内容
- javascript - 我在表格行上的分配没有反映在前端
- c# - 当 nuget 包依赖于非 nuget 程序集时,如何发布它
- javascript - 如何验证 p、li、div 元素文本
- java - HandlerMethodReturnValueHandler 不起作用