给定一组正数,找出最接近给定常数的加法组合?

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 你可以接受它。

以上是关于给定一组正数,找出最接近给定常数的加法组合?的主要内容,如果未能解决你的问题,请参考以下文章

给定一组点或向量,找到彼此最接近的 N 个点的集合

线段树lazy标记2:覆盖赋值与加法修改混合

在php中给定一个数,求数组中最接近的一个值。

给定一组多边形和一系列点,找出哪些多边形是所定位的点

给定一组线中的平行线数

P1603 斯诺登的密码-字符串加法的妙用