重新排列列表中的项目以收集其平均值

时间:2014-06-22 17:51:58

标签: c# algorithm sorting average

这不是一个真正的编程问题,实际上它更像是一个算法问题。我的一个功能要求是要求将平均值的差异限制在一定范围内。

以例如:

a: {1, 2, 3, 4, 5}    // avg: 3
b: {2, 3, 3, 4, 6}    // avg: 3.4
c: {4, 4, 5, 7, 6}    // avg: 5.2

如果平均值的最大差异为2,那么:

  • ab的平均值之间的差异有效
  • bc的平均值之间的差异有效
  • ac的平均值之间的差异有效

然后我必须重新安排(例如,从a 7 b交换 1 ,这样平均值就会变得更加接近,并且他们的差异在指定的最大值之内。

我的问题是:我如何才能最有效地(以最少的移动量)重新排列项目,使平均值收敛到指定的最大平均差异范围内?

我实际上并没有找到一个明确的答案,但如果有人对我应该寻找的内容有所了解,我会非常乐意收到你的回复。如果这不属于StackOverflow,我很抱歉,也许你可以指引我去其他地方?

非常感谢您的时间!

1 个答案:

答案 0 :(得分:0)

首先对所有数字求和,然后将总和除以数组的数量。在这个例子中,我们有59/3

整数除法的结果将用于确定每个背包的大小,以便使背包的大小总和与所有数字的总和相匹配。在这个例子中, 背包尺寸为19,20和20。

接下来,找到多背包问题的所有解决方案。

最后,从初始状态移动次数最少的解决方案是最佳的。