将一组给定的数字 N 分成两组,使它们的总和之差最小?
Divide a given set of numbers N in two groups such that their difference of their sum is minimum?
您最多可以从集合中排除一个元素以实现目标。
示例:-
N=3
给出的数字是 = 1,2,5
所以,
第 1 组应该是:- [1]
第 2 组应该是:- [2]
我们排除了 5 个,因为我们可以在不属于任何一组的情况下实现较小的差异。
N=4
数字 = 1,2,2,5
Set1 = [1,2,2]
Set2 = [5]
最好的算法是什么?
我知道这是一个 NP 完全问题。
而且我认为蛮力会给我正确的解决方案,但我需要一个可用的算法。
这是将整数集分成两个子集的著名问题的变体,这两个子集的总和相等或尽可能接近相等。但是,您提出的问题更难 - 您还必须检查从原始集合中删除一个元素的所有组合。
由于原始问题是 NP-complete,所以这个问题也是 NP-complete(实际上,这是问题的优化版本,甚至是 NP-hard,正如 Bergi 的回答中正确提到的那样)。好消息是,即使在这个更难的版本中,贪心法在大多数情况下也能给你一个满意的答案。该策略如下:从原始集合中取出最大的元素并将它们放入第一和第二子集中,每个子集中一个。将原始集合中的每个其他元素放入其总和较小的子集中,并迭代地重复该过程,直到您选择了所有元素。
为了获得最佳结果,您需要对原始集合的所有 N 个子集重复此过程,其中您通过删除索引 1,2,...,N 处的元素来获得每个子集。这就是使这个问题变得更加困难的原因。
如果您对更高级的方法感兴趣,请查看 Karmarkar-Karp differencing algorithm。
另请参阅:
I know that this a NP-complete problem.
不完全是,partition optimisation problem 甚至被认为是 NP-hard。
And I think that brute force would give me the correct solution but I need an algorithm if available.
NP-hard 意味着没有已知算法(确定解决方案)比蛮力方法表现更好。
因此您可能需要一个 approximation,但只有您知道哪一个适合您的需要。
What is best algorithm for this?
定义"best".
您最多可以从集合中排除一个元素以实现目标。 示例:-
N=3
给出的数字是 = 1,2,5
所以,
第 1 组应该是:- [1]
第 2 组应该是:- [2]
我们排除了 5 个,因为我们可以在不属于任何一组的情况下实现较小的差异。
N=4
数字 = 1,2,2,5
Set1 = [1,2,2]
Set2 = [5]
最好的算法是什么? 我知道这是一个 NP 完全问题。 而且我认为蛮力会给我正确的解决方案,但我需要一个可用的算法。
这是将整数集分成两个子集的著名问题的变体,这两个子集的总和相等或尽可能接近相等。但是,您提出的问题更难 - 您还必须检查从原始集合中删除一个元素的所有组合。
由于原始问题是 NP-complete,所以这个问题也是 NP-complete(实际上,这是问题的优化版本,甚至是 NP-hard,正如 Bergi 的回答中正确提到的那样)。好消息是,即使在这个更难的版本中,贪心法在大多数情况下也能给你一个满意的答案。该策略如下:从原始集合中取出最大的元素并将它们放入第一和第二子集中,每个子集中一个。将原始集合中的每个其他元素放入其总和较小的子集中,并迭代地重复该过程,直到您选择了所有元素。
为了获得最佳结果,您需要对原始集合的所有 N 个子集重复此过程,其中您通过删除索引 1,2,...,N 处的元素来获得每个子集。这就是使这个问题变得更加困难的原因。
如果您对更高级的方法感兴趣,请查看 Karmarkar-Karp differencing algorithm。
另请参阅:
I know that this a NP-complete problem.
不完全是,partition optimisation problem 甚至被认为是 NP-hard。
And I think that brute force would give me the correct solution but I need an algorithm if available.
NP-hard 意味着没有已知算法(确定解决方案)比蛮力方法表现更好。
因此您可能需要一个 approximation,但只有您知道哪一个适合您的需要。
What is best algorithm for this?
定义"best".