我们有一组项目I = {i_1,i_2,...,i_n}。这些项目中的每一项都具有我们称之为 p 的值,这是一些实数。我们想要选择I的子集,称之为I',大小为m(对于m为1< = m< = n),使得项目的 p 值的平均值在我'落在某个指定的范围内,[p_l,p_u]。 (例如,我们可能需要在0.70和0.74之间的平均 p 值。)此外,我们希望有效地执行此操作。
我们希望在O(n)时间内完成此任务,但任何多项式时间算法都足够好。我们当然不希望只尝试大小为m的I的每个可能子集,然后检查它是否满足平均p值约束。
最后,我们将重复这样做,我们希望选择的子集在所有可能的子集上均匀随机分布。
有没有办法做到这一点?
答案 0 :(得分:0)
如果您有一个子集及其总和,如果您按照| subset + 1 | / | subset |缩放总和,则您添加的每个新元素都会对该总和产生线性影响。因此,这看起来非常类似于子集和问题(NP-complete),其中目标是找到总和为0的所有子集,虽然在这里我们希望总和接近于0.例如,如果你有一个大的设置一个元素大致在可接受的p范围内,如果你粗略假设该元素无关紧要,突然它实际上是等价的...假设你有大量的正负p值,并且问题不是由对手构建的。如果是这种情况,你可以使用在http://en.wikipedia.org/wiki/Subset_sum_problem给出的两个近似解中的一个,使相等“模糊”,并且只需要对该组设置0.7
当然,您可以从解决方案中获得的效率令人难以置信取决于生成p值的方式(其“分布”)。