根据每个项目的变量属性,将x项目数量分组为y组的最佳方法是什么,例如。重量。
给我留下y个数量的团体,每个团体持有相同的金额(价格)(或接近相同)。因此,这些群体的累积权重是平衡的。
答案 0 :(得分:3)
我可能会通过该属性编入索引的Map
Set
来做到这一点。类似的东西:
Map<K, Set<V>> results = new HashMap<K, Set<V>>();
for (V item : items) {
K key = item.getProperty();
Set<V> group = results.get(key);
if (group == null) {
group = new HashSet<V>();
results.put(key, group);
}
group.add(item);
}
其中V是物品的类型,K是物业的类型。
答案 1 :(得分:2)
使用java.util.Arrays.sort(Object[] a, Comparator c)
执行Comparator
,根据您的要求进行排序。
答案 2 :(得分:1)
这是Partition problem推广到y
组而不是2. y=2
的问题是NP-hard弱,因此存在一种伪多项式算法可以有效地解决它,只要权重是小整数。
答案 3 :(得分:0)
我们打电话给你的“y amount” bins 。您声明要将所有物品分配到所有箱子之间。
具有相似属性的一种结构是平衡树。那么,我要做的是以下内容。首先,使用所选属性作为关键字填充平衡树。接下来,下降到树的所需级别,使得该级别上有N个元素,N是您想要的区域数量。将每个节点中的所有元素后代放入一个单独的bin中。
然后,唯一剩下的就是将该级别上方节点上的元素分配到容器中。只需选择一个标准来选择它将去哪个垃圾箱并应用它。你的垃圾箱应该合理平衡。