我正在尝试解决某种"Assignment problem"问题。我有一个数组(例子):
{[8, 6, 6],
[9, 4, 10],
[10, 5, 9]}
我需要找到列总和的最大值和最小值之间的差异。但我首先需要置换这个数组。因此,在示例中,每列的总和为:
27 15 25
最大值和最小值之间的差异为12
。
但如果像这样置换数组:
{[6, 8, 6],
[10, 4, 9],
[5, 10, 9]}
总和将是:
21 22 24
差异将是3
。
数组的大小最多为[25][15]
。
我的任务是置换一个给定的数组,使最大值和最小值之间的差值尽可能低。但排列是 O(n!),我想通过削减一些无用的排列来优化这个算法。我认为这个问题似乎与"分配问题" 类似。
所以,一个问题:如何进行这种排列?不是关于优化。
P.S。我请求一些帮助,因为我在网上找不到任何东西。如果这是一个虚拟问题,你只需要说。 语言当然不重要,但我用Java编写。 这是关于算法的问题,而不是关于实现的问题。
答案 0 :(得分:0)
也许如果你对数组进行排序,一个是升序,另一个是降序,如果每个数组都在相同的范围内,你将接近解决方案。
例如,在您的示例中,您将拥有:
[ 6, 6, 8 ]
[10, 9, 4 ]
[ 5, 9, 10]
21, 24, 22
如果您拥有偶数个数组,它将最有效。