这不是一个真正的编程问题,实际上它更像是一个算法问题。我的一个功能要求是要求将平均值的差异限制在一定范围内。
以例如:
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,那么:
a
和b
的平均值之间的差异有效b
和c
的平均值之间的差异有效a
和c
的平均值之间的差异不有效然后我必须重新安排(例如,从a
用 7 从b
交换 1 ,这样平均值就会变得更加接近,并且他们的差异在指定的最大值之内。
我的问题是:我如何才能最有效地(以最少的移动量)重新排列项目,使平均值收敛到指定的最大平均差异范围内?
我实际上并没有找到一个明确的答案,但如果有人对我应该寻找的内容有所了解,我会非常乐意收到你的回复。如果这不属于StackOverflow,我很抱歉,也许你可以指引我去其他地方?
非常感谢您的时间!
答案 0 :(得分:0)
首先对所有数字求和,然后将总和除以数组的数量。在这个例子中,我们有59/3
整数除法的结果将用于确定每个背包的大小,以便使背包的大小总和与所有数字的总和相匹配。在这个例子中, 背包尺寸为19,20和20。
接下来,找到多背包问题的所有解决方案。
最后,从初始状态移动次数最少的解决方案是最佳的。