所以,假设你有一组形如{x,y}的值对,例如{1,2},{1,3}和{2,5}。然后,您需要找到一个k个成对的子集(在这种情况下,假设k = 2),使得子集中所有x的总和除以所有y的总和的比率尽可能高。
请问是否有相关的理论或算法可以指导? 这有点像最大子集和,但由于这些配对是“绑定”在一起的,所以引入了一种改变问题的限制。
请问是否有相关的理论或算法可以指导? 这有点像最大子集和,但由于这些配对是“绑定”在一起的,所以引入了一种改变问题的限制。
一开始我认为一个简单的贪心策略可以解决这个问题,但评论员指出了一些反例。
相反,我认为二分法应该可以解决。
假设我们想知道是否可能实现比率g。
我们需要添加k个向量来使其在一个梯度为g的直线上方。
如果我们将每个向量垂直于此线投影以获得值p1,p2,p3,则当且仅当p值的总和为正时,最终向量将在直线上方。
现在,使用投影值似乎正确的最佳解是选择最大的k。
然后,我们可以使用二分法找到可实现的最高比率。
假设我们希望比率高于g,即
(x1+x2+x3)/(y1+y2+y3) >= g
=> (x1+x2+x3) >= g(y1+y2+y3)
=> (x1-g.y1) + (x2-g.y2) + (x3-g.y3) >= 0
=> p1 + p2 + p3 >= 0
其中pi的定义为xi-g.yi。
(注:此处g为常数)
a/x + b/y != (a+b)/(x+y)
,而此处的 OP 想要(a+b)/(x+y)
。 - vish4071