2d数组的排列

时间:2015-03-08 12:46:28

标签: java arrays algorithm sorting permutation

我正在尝试解决某种"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编写。 这是关于算法的问题,而不是关于实现的问题。

1 个答案:

答案 0 :(得分:0)

也许如果你对数组进行排序,一个是升序,另一个是降序,如果每个数组都在相同的范围内,你将接近解决方案。

例如,在您的示例中,您将拥有:

[ 6, 6, 8 ]
[10, 9, 4 ] 
[ 5, 9, 10]

21, 24, 22

如果您拥有偶数个数组,它将最有效。