将项目分组到平衡组

时间:2009-07-15 13:12:39

标签: java algorithm

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

给我留下y个数量的团体,每个团体持有相同的金额(价格)(或接近相同)。因此,这些群体的累积权重是平衡的。

4 个答案:

答案 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中。

然后,唯一剩下的就是将该级别上方节点上的元素分配到容器中。只需选择一个标准来选择它将去哪个垃圾箱并应用它。你的垃圾箱应该合理平衡。