拟合数字的最佳方法

Posted

技术标签:

【中文标题】拟合数字的最佳方法【英文标题】:Best approach to fit numbers 【发布时间】:2016-12-25 05:20:28 【问题描述】:

我有以下整数集2,9,4,1,8。我需要将此集合分成两个子集,以便集合的总和分别为 14 和 10。在我的示例中,答案是2,4,89,1。我不是在寻找任何代码。我很确定必须有一个标准算法来解决这个问题。由于我没有成功通过谷歌搜索并发现自己,我在这里发布了我的查询。那么解决这个问题的最佳方法是什么?

我的尝试是这样的......

public class Test 
    public static void main(String[] args) 
        int[] input = 2, 9, 4, 1, 8;
        int target = 14;
        Stack<Integer> stack = new Stack<>();
        for (int i = 0; i < input.length; i++) 
            stack.add(input[i]);
            for (int j = i+1;j<input.length;j++) 

                int sum = sumInStack(stack);

                if (sum < target) 
                    stack.add(input[j]);
                    continue;
                

                if (target == sum) 
                    System.out.println("Eureka");
                

                stack.remove(input[i]);
            

        
    

    private static int sumInStack(Stack<Integer> stack) 
        int sum = 0;
        for (Integer integer : stack) 
            sum+=integer;
        
        return sum;
    

我知道这种方法甚至无法解决问题

【问题讨论】:

这就是多重​​背包问题。 en.wikipedia.org/wiki/Knapsack_problem 还是装箱问题。这在一定程度上取决于您未指定的其他约束,例如是否需要使用所有元素。 @ErwinBolwidt 最后应使用所有元素。我说我的问题有 2 个子集结果。我需要一个通用算法将父集划分为 n 个子集,其中每个子集的总和为某个指定的数字。 【参考方案1】:

我需要将这个集合分成两个子集,这样集合的总和分别为 14 和 10。

如果子集必须对某些值求和,那么整个集合的总和最好是这些值的总和,即在您的示例中为 14+10=24。如果你只需要找到这两个子集,那么问题就不是很困难——找到任何一个总和为其中一个值的子集,并且该集合的其余元素必须总和为另一个值。

对于您给出的示例集2,9,4,1,8,您说 答案是9,1, 2,4,8,但请注意,这不是唯一的答案;还有2,8, 9,4,1

【讨论】:

“不是很难”从哪个角度?如何以幼稚的方式实现,或者时间复杂度的问题? :-) @Caleb 确实如此。最好的解决方案是列出所有可能的集合。谢谢指出

以上是关于拟合数字的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

Python数据可视化之绘制带有最佳拟合线的散点图(图文并茂版!!!)

数据可视化实例: 带线性回归最佳拟合线的散点图(matplotlib,pandas)

数据可视化实例: 带线性回归最佳拟合线的散点图(matplotlib,pandas)

想用matlab确定拟合函数的最佳次数?

如何在 Python 中测量最佳拟合线的质量? [复制]

Java练习 SDUT-2728_最佳拟合直线