如何用最少数据点计算符合指定数值范围的和并尽可能接近上限
问题解决方案
需求明确
给定数值集合 individualValues = {0.07, 0.1, 0.15, 0.25, 0.33, 0.45, 0.6, 1.2},需要选取若干元素求和,满足:
- 结果落在
[0.8, 1]区间内 - 优先级:和尽可能接近上限1(最高优先级),其次使用最少的数值点
分析过程
- 单个元素验证:集合中没有元素落在
[0.8, 1]范围内(最大单个元素0.6<0.8,1.2>1),因此单个元素无法满足要求。 - 两两组合验证:遍历所有两两组合的和,符合区间要求的最大值为
0.6 + 0.33 = 0.93,但该值距离上限1仍有0.07的差距。 - 三个元素组合验证:遍历所有三元组合,发现
0.07 + 0.33 + 0.6 = 1.0,刚好等于上限,完全满足区间要求,且是当前能达到的最接近上限的结果。
最优结果
{0.07, 0.33, 0.6},和为1.0,既达到上限,也在满足该条件下使用了最少的数值点(不存在更少元素能达到上限的组合)。
通用计算方法
- 明确优先级:先锁定“和最接近上限”的目标,再在符合该目标的组合中选择元素数量最少的;若需求是先少元素再接近上限,可调整遍历顺序。
- 从小到大遍历元素数量:
- 依次检查单个、两个、三个…元素的组合,计算所有可能的和。
- 对每个数量级的组合,筛选出落在目标区间内的结果,记录最接近上限的那组。
- 确定最优解:对比各数量级下的最优结果,按照优先级选出最终答案——如果更高数量级的组合能达到更接近上限的结果(比如刚好等于上限),则优先选择该组合。
内容的提问来源于stack exchange,提问作者Marcus
相关产品推荐
相关产品推荐

