什么是最小列总和差异?

时间:2015-02-22 18:58:38

标签: algorithm math matrix sum

想象一下,你得到一个正整数矩阵(最大25 * 15,数值不超过3000000)。当您进行列总和并选择最小和最大的一个时,它们之间的差异必须尽可能小。

您可以在每行(换行)中交换数字,而不是在列中交换您想要的次数。

你将如何解决这个问题?

我不是要求你的代码,而是你的想法。

提前致谢

2 个答案:

答案 0 :(得分:1)

我会尝试使用模拟退火来解决问题。这是该计划的草图:

  1. 让距离优化最大和最小列总和之间的差异。
  2. 将目标设置为0(即尝试尽可能接近矩阵,且总和之间没有差异)
  3. 通过计算所有列的总和与其当前值的数组来初始化问题。
  4. 让当前矩阵的邻居成为交换矩阵同一行中两个条目的矩阵。
  5. 按行索引和两个交换列索引表示邻居。
  6. 接受邻居时,请勿再次计算所有金额。只需调整已交换的列中的和数组以及交换的差异(可以从交换的行索引中推断出来)
  7. 步骤6对于性能(大型矩阵)至关重要。

答案 1 :(得分:0)

坏消息是没有限制的这个问题是NP难的,并且大规模的精确动态编程似乎是不可能的。我认为我的第一种方法是大邻域局部搜索:反复选择一个小的随机子矩阵(行和列),使其能够接受蛮力并选择最佳排列,同时保持矩阵的其余部分不受干扰。