查找列表中值的均衡分布的排列

时间:2015-02-16 20:49:06

标签: algorithm permutation mathematical-optimization

对不好的标题感到抱歉,但我不知道怎么称呼它。

我有K个列表,每个都有N个元素,例如:

[8, 5, 6]
[4, 3, 2]
[6, 5, 0]

我希望找到这些列表的排列'元素,以便第一列,第二列等中的元素总和尽可能彼此接近(因此分布是"公平")。

在我的例子中(可能):

      [8,  5,  6]
      [4,  2,  3] -- the lists contain the same values
      [0,  6,  5]    just in different order
sums: 12, 13, 14

是否有一些更优雅的方式,而不是找到每个列表的所有排列,并蛮力发现"理想"它们的组合?

我不是要求代码,如果你知道,只要给我一个提示如何去做。 谢谢!

PS。列表可能非常大,而且更多 - 想想~20x~20 max。

1 个答案:

答案 0 :(得分:2)

如果你能接受一个近似值,我会迭代地做:

  • 按降序权重(行元素之和)对矩阵行进行排序。 编辑:首先按行中的最大元素排序可能会更好。
  • 每次要在结果矩阵中添加新行时,请将较小的元素放入较高的列中。
  • 将结果矩阵的行排序回初始状态(如果必须)。

它适用于你的例子,但显然不会总是完美。

这是example(javascript)