从随机数序列中选择大小相等的数字组

问题描述 投票:0回答:2

说我有一个100个数字的列表,我想将它们分为5组,每组中的总和最接近于数字的均值。

最简单的解决方案是对一百个数字进行排序,并取最大数字,并不断增加最小的数字,直到总和超过平均数。

显然,这不会带来最佳结果。我猜我们可以使用BFS或DFS或其他一些搜索算法。如A *以获得最佳效果。

有人在那里有一个简单的解决方案吗?伪代码就足够了。谢谢!

algorithm search sorting tree pseudocode
2个回答
0
投票

这听起来像是knapsack problem的变体,如果我正确解释了您的意思,可能是multiple knapsack problem。您不能提出一个简单的问题吗? :)


0
投票

一种可以使用的有效算法(解决方案)是箱装算法的最佳拟合的一种变体。但是,我们将必须应用一种变体,其中要明确地希望有5个不同的数字组,而不是寻找使用最小数量的组。

该算法从找到所有100个数字的列表的平均值开始。该均值将用作我们试图使数字适合的所有5个组(箱)的最大容量。然后,我们在100个号码列表中找到最大数目,该数目不超过组的最大容量,并将其分配给第一个组。 (我们可以在log(n)时间找到它,因为我们可以使用自平衡二进制搜索树)。我们跟踪当前小组的工作量。然后,我们找到适合当前组的下一个最大数字,直到达到最大容量或没有其他数字可以使该组达到最大容量。在这两种情况下,我们都移至下一组,并使用数字列表中剩余的数字重复我们的算法。一旦离开一个小组,我们还必须跟踪该小组的当前总和。我们继续进行直到达到所有5组的最高容量为止。如果有剩余数字,我们会将它们放在总和最低的组中(因为我们在进行过程中一直跟踪这些总和)。由于装箱的性质,实际上这是一个运行时间为Θ(nlogn)的贪婪算法。

© www.soinside.com 2019 - 2024. All rights reserved.