Java 将项目分组到平衡的组中

Java 将项目分组到平衡的组中,java,algorithm,Java,Algorithm,根据每个项目的可变属性(如重量),将x数量的项目分组为y数量组的最佳方法是什么 给我留下y组,每个组持有相同的金额(价格)(或接近相同)。因此,这些组通过累积权重来平衡。使用java.util.array.sort(Object[]a,Comparator c)实现了Comparator,它可以根据您的需求进行排序。让我们称您的“y金额”仓位。您声明要将您的物品分配到所有箱子之间的平衡位置 一种具有类似性质的结构是平衡树。那么,我要做的是以下几点。首先,使用所选属性作为键填充平衡树。接下来,下降

根据每个项目的可变属性(如重量),将x数量的项目分组为y数量组的最佳方法是什么


给我留下y组,每个组持有相同的金额(价格)(或接近相同)。因此,这些组通过累积权重来平衡。

使用
java.util.array.sort(Object[]a,Comparator c)
实现了
Comparator
,它可以根据您的需求进行排序。

让我们称您的“y金额”仓位。您声明要将您的物品分配到所有箱子之间的平衡位置

一种具有类似性质的结构是平衡树。那么,我要做的是以下几点。首先,使用所选属性作为键填充平衡树。接下来,下降到树的所需级别,以便该级别上有N个元素,N是您想要的箱子数量。将每个节点的所有元素子代放入一个单独的容器中


那么,剩下的唯一一件事就是将该级别以上节点上的元素分发到容器中。只需选择一个标准来选择它将进入的垃圾箱并应用它。您的垃圾箱应该是合理平衡的。

我可能会使用属性索引的
集的
映射来实现这一点。比如:

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);
}
Map results=newhashmap();
对于(V项:项){
K key=item.getProperty();
设置组=结果。获取(键);
如果(组==null){
group=新的HashSet();
结果:put(关键,小组);
}
组。添加(项目);
}

其中V是项目的类型,K是属性的类型。

这是广义的
y
组,而不是2。
y=2
的问题是弱NP难问题,因此存在一种伪多项式算法,只要权重是小整数,就可以有效地解决它。

不要使用数组,使用例如SortedMap。我在哪里可以找到这种算法的示例,最好是java。好的,这个答案不再相关,既然你已经完全重新表述了这个问题:-)