给定n个整数,找到其和的绝对值最小的m

时间:2011-05-29 03:30:33

标签: algorithm

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

2 个答案:

答案 0 :(得分:5)

问题是NP难的,因为有效地解决它会有效地解决subset-sum decision problem

鉴于此,除非您认为P = NP,否则您不会找到有效的算法来解决它。

您可以随时提出一些启发式方法来指导您的搜索,但在最糟糕的情况下,您必须检查 m 整数的每个子集。

答案 1 :(得分:2)

如果“好”意味着“正确”,那么只要尝试一切可能性。这将花费您n choose m时间。非常慢。不幸的是,这是你一般可以做的最好的事情,因为对于任何一组整数,你总是可以添加一个,这是m-1其他的总和的负数 - 而其他人可能都有相同的符号,所以你无法搜索。

如果“好”意味着“快速且通常可行”,那么有多种方法可以继续。 E.g:

假设您可以解决m=2的问题,并且假设您可以进一步解决正面和负面答案(然后取两者中的较小者)。现在假设您要解决m=4。解决m=2,然后将这两个数字抛出并再次解决......应该明白下一步该做什么!现在,m=6怎么办?

现在假设您可以解决m=3m=2的问题。认为你可以为m=5获得一个不错的答案吗?

最后请注意,如果您对数字进行排序,则可以在一次传递中解决m=2,对于m=3,您可以进行令人烦恼的二次搜索,但至少可以在只有大约四分之一的名单(正数和负数的一半),并寻找一些相反的符号来取消。