Algorithm 给定n个整数,求其和为';s的绝对值是最小的

Algorithm 给定n个整数,求其和为';s的绝对值是最小的,algorithm,Algorithm,我给了n个整数;包括正值和负值。从该列表中找到m个整数的好算法是什么,这样m个整数之和的绝对值就可能是最小的?这个问题是NP难问题,因为有效地解决它会有效地解决问题 鉴于此,除非你相信p=NP,否则你不会找到一个有效的算法来解决它 你总是可以想出一些启发式方法来指导你的搜索,但在最坏的情况下,你必须检查m个整数的每一个子集。如果“好”意味着“正确”,那么就尝试每一种可能性。这将花费您大约n选择m时间。非常慢。不幸的是,这通常是你能做的最好的,因为对于任何一组整数,你总是可以再加一个,它是m-1其

我给了n个整数;包括正值和负值。从该列表中找到m个整数的好算法是什么,这样m个整数之和的绝对值就可能是最小的?

这个问题是NP难问题,因为有效地解决它会有效地解决问题

鉴于此,除非你相信p=NP,否则你不会找到一个有效的算法来解决它

你总是可以想出一些启发式方法来指导你的搜索,但在最坏的情况下,你必须检查m个整数的每一个子集。

如果“好”意味着“正确”,那么就尝试每一种可能性。这将花费您大约
n选择m
时间。非常慢。不幸的是,这通常是你能做的最好的,因为对于任何一组整数,你总是可以再加一个,它是
m-1
其他整数之和的负数,而其他整数可能都有相同的符号,所以你没有办法搜索

如果“好”的意思是“快,通常工作正常”,那么有多种方法可以继续。例如:

假设您可以解决
m=2
的问题,并进一步假设您可以解决肯定答案和否定答案(然后取两者中较小的一个)。现在假设您要求解
m=4
。求解
m=2
,然后扔掉这两个数字,然后再次求解……接下来该做什么应该是显而易见的!现在,m=6怎么样

现在假设您可以解决
m=3
m=2
的问题。你认为你能为
m=5
得到一个像样的答案吗


最后,请注意,如果您对数字进行排序,您可以一次求解
m=2
,对于
m=3
,您需要进行一次恼人的二次搜索,但至少您可以在列表的大约四分之一上进行两次(正数和负数的小半部分)然后找一些相反的符号来取消。

我想这就是“教授”想要你决定的。。。这是家庭作业吗?这个问题并不愚蠢。它要求求和的绝对值,而不是绝对值的和。对于{-10,1,2,3,10}和m=2,答案是{-10,10}.@Neal-注意,如果你把它标记为家庭作业,你至少有机会有人在某些方面帮助你。这可能比你希望的要少,但比现在更大@帕维姆绝对不是。我记得教授的作业总是不难解决的。不像这个,我已经花了3周的时间在它上面,但是我和我的同事无法得到一个好的算法。@Neal-新用户,非常具体的单词问题,没有提供代码。如果不是家庭作业,那真是太巧了。你试过了吗?事实上,如果你看一下子集和问题的近似算法(这个链接是一个不错的开始),你也许能够根据你的问题调整其中的一些算法。克尔——“正确”的想法很容易得到,但我试着让它“快速并且通常工作正常”“,然后我发现这并不是那么容易,因为正如你所说,m可以改变。。。