给定一组正数,找出最接近给定常数的加法组合?
Posted
技术标签:
【中文标题】给定一组正数,找出最接近给定常数的加法组合?【英文标题】:Given a set of positive numbers, find the additive combinations that are the closest possible to a given constant? 【发布时间】:2022-01-19 19:51:55 【问题描述】:假设我有一组数字。现在我想找出它们最小(总共)偏离 0.2 的加法组合?每个号码只能与一个其他号码配对。
例如,数字是 0.1、0.15、0.3、0.2 和 0.13... Pair_1: 0.1+0.15, pair_2= 0.3+02... 那么让 d_i 为对i,如何找到使d_i之和最小的加法组合?
我做了很多思考和搜索,仍然无法用Python解决这个问题。 一个组合偏离 0.2 最小可能会导致另一个组合偏离它更多。
求求你了
【问题讨论】:
到目前为止你有什么尝试? 这听起来像是家庭作业。请看How do I ask and answer homework questions? 【参考方案1】:根据我对问题的理解,这是我为解决问题而编写的一些代码:
list_of_numbers = [0.1, 0.15, 0.3, 0.2, 0.13]
base_number = 0.2
def devianceFrom(number, list_of_numbers):
results = []
combinations = []
for i in range(0, len(list_of_numbers)):
for j in range(0, len(list_of_numbers)):
if j > i or j == i:
continue
else:
results.append(list_of_numbers[j] + list_of_numbers[i])
combinations.append([list_of_numbers[j], list_of_numbers[i]])
for n in range(0, len(results)):
results[n] = abs(results[n]-number)
minCombo = min(results)
index = results.index(minCombo)
try:
for ind in index:
print(" is the minimum difference using the sum of and .".format(results[ind], combinations[ind][0], combinations[ind][1]))
except:
print(" is the minimum difference using the sum of and .".format(results[index], combinations[index][0], combinations[index][1]))
devianceFrom(base_number, list_of_numbers)
但是,这只会找到最小的一组。因此,如果您需要所有能产生最小差异的组合,则需要进行一些修改。
编辑: 它给出的打印结果是“0.03 是使用 0.1 和 0.13 之和的最小差值。”
如果这不是您要寻找的答案,请进一步解释。另外,如果需要,我可以发送注释代码或代码说明。
【讨论】:
我感到惊讶和惊讶..!这是我第一次使用 SO,我不希望得到答案,至少不是第一次详细说明。非常感谢! 关于这个问题,很抱歉我没有明确说明我想找到所有能产生最小差异的组合,例如,数字是 a、b、c 和 d,常数(或 base_number)是 C,组合是 a+d 和 b+c 使得 |(a+d)-C)| + |(b+c)-C| (1) 使用代码并找到第一个组合 (2) 消除第一个组合 (3) 再次运行代码将是解决问题的一种方法,但我想它不会解决最好的组合?由于每次运行代码,它只考虑一个组合而忽略其余的组合,使后面的组合一起有助于更大的 d_i。 对不起,我想投赞成票,但它说我没有足够的声誉。 @fleong 你可以接受它。以上是关于给定一组正数,找出最接近给定常数的加法组合?的主要内容,如果未能解决你的问题,请参考以下文章