在写代码的时候,发现了以下问题,简单说一下:
Partition an array of floats X in array A and B such that the difference between the sum of the values in A and the sum of values of B is minimized
这是我正在进行的调查的一部分,但我找不到有效执行此操作的方法。
编辑:
对于那些认为这是来自体育、SPOJ 或家庭作业等数学竞赛的人,事实并非如此。当我尝试将已因式分解的数字 p 划分到因子 a 和 b 集合中时,我只是对此感到好奇,使得 b=一个+1。如果我们从双方获取日志,我们可以证明这个问题相当于最小化总和的差异,但这就是我陷入困境的地方。
最佳答案
只是第一个简单的想法。使用动态规划方法。
我假设这个问题可以转化为背包问题。您需要从 X
中选择项目(将有数组 A
)以最大化总和,但不要超过 (sumX - sumA)
值(将有数组 B
中的项目总和)。对于通过动态规划方法解决背包问题的算法,请参阅 wiki例如
顺便说一句,这个解决方案可能是错误的......但即使它能工作,我也非常确定存在更高效、优雅和简短的解决方案。
关于algorithm - float 组分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17375274/