我有N个对象(主副本/从副本)都具有相同的大小。我希望在M个箱子中分发副本,每个箱子具有不同的容量,这样任何箱子都不会同时包含主副本。
什么是最有效的算法?并且更重要的是什么是最有效的算法来找出是否存在给定输入的可能解决方案(没有实际生成解决方案)?
答案 0 :(得分:0)
很难想象更强大的东西:通过降低剩余容量跟踪prioirty队列中的M个bin,并将每个对象添加到队列中的前两个bin;重新平衡队列并重复。如果M个总容量> = 2 * N,则存在解决方案。
这似乎是复杂度O(N * log M)
注意:对于正好三个箱,N>不存在解决方案。 M1 + M2其中Mn是bin n的容量,按n在0到M范围内的递减容量排序,与M0的容量无关。
同样对于恰好2个区间,解决方案仅存在于N <= M1。
答案 1 :(得分:0)
一个简单的解决方案是:
根据容量的降序对M桶进行降序排序:x1,x2,..,xm
选择最顶部的两个存储桶,为该对分配一个对象,减少两个存储桶的可用容量并重新排列存储桶。您可以使用堆来跟踪存储桶,并且复杂性接近于O(n)
继续重复,直到分配完所有对象。