algorithm - 如何将数据分成最小组
问题描述
我想知道是否有一种算法可以将一些数据分成最小组。
它应该看起来像,
前提条件:一些数据的总和 <= m,其中 m 是一个明确的数字,
期望:这些数据分成最小计数组。
有算法或好主意吗?
谢谢。
这是一个例子。
List<Integer> rawList = Arrays.asList(1, 1, 1, 2, 10, 5, 8, 3);
您可以将它们分成 8 个组,每个组包含 1 个数字,
这不是我想要的。
Integer maxSum = 12; //Assume that one group can holds max sum of 12.
我需要最少的组,所以答案看起来像
List<Integer> group1 = Arrays.asList(10, 2);
List<Integer> group2 = Arrays.asList(8, 3, 1);
List<Integer> group3 = Arrays.asList(5, 1, 1);
上面的例子只用了 3 组来拆分原始数据。
这 3 个组将是一个答案。(还有其他方法可以使用最小组。)
这似乎类似于@Dillon Davis 提到的装箱问题。我认为只有这一个更容易。
附言。答案需要最小组,时间和空间复杂度不是主要问题。
解决方案
看来您的问题与装箱问题非常相似。目标是将各种尺寸的元素打包到尽可能少的箱子中,每个箱子都有固定的容量。一般的方法是使用贪心算法重复尝试将最大元素打包到它将适合的第一个 bin 中(first-fit),或者尝试将最大元素放入 bin 中并尽可能少的剩余空间(最合适)。这些都不能保证最佳解决方案,但通常会产生接近最佳的结果,这可能就足够了。
推荐阅读
- python - Django 和 uwsgi 仅针对特定 URL 在生产中显示 502
- angular - Angular 2+在拖放中获取多个文件的base64
- powershell - 替代 UNC 路径字符串
- python - pyqt4:连接滑块以刷新绘图
- javascript - 如何将 JSON 对象从 JavaScript 发送到 C# 服务器?
- python-3.x - 如何通过单击更改 tkinter.Button 的背景
- jenkins - Jenkins Job 同时注入 Path 变量和用户的 Path
- google-apps-script - 在谷歌应用脚本中发送照片/上传 blob 文件到电报
- java - 如何在共享环境中分离 JaVers 实现?
- python - Tensorflow 训练损失在不同的运行中具有宏观相似性