algorithm - 最小列总和差异是多少?

标签 algorithm math matrix sum

<分区>

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

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

你会如何解决这个任务?

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

提前致谢

最佳答案

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

  1. 让距离优化最大和最小列总和之间的差异。
  2. 将目标设置为 0(即,尝试尽可能接近一个矩阵,总和之间没有差异)
  3. 通过将所有列的总和数组计算为其当前值来初始化问题。
  4. 令当前矩阵的邻居是交换矩阵同一行中的两个条目所产生的矩阵。
  5. 用行索引和两个交换列索引表示邻居。
  6. 接受邻居时,不要再次计算所有总和。只需调整已交换的列中的总和数组以及交换的差异(您可以从交换的行索引中推断出)

为了性能(大型矩阵),第 6 步是必不可少的。

关于algorithm - 最小列总和差异是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28661912/

相关文章:

algorithm - 为什么我们必须对解析树使用深度优先遍历?

javascript - 计算具有不同时间增量的对象的平均值

c# - 如何找到字符串格式错误的 XML(在 C# 中)的位置?

sql - 为什么不是数学或其他语言的sql中的null * 0 = null

c++ - PI调节比例积分算法的公式

python - 求解二次和三次多项式的三次函数?

algorithm - 查询位于三角形内的点的数据结构

r - 使用 for 循环和 if 语句比较两个矩阵(x 和 y)以在其中一个矩阵 (y) 中创建新列 - 可重现

c++ - 创建返回导出 11 的大型一维矩阵

python - 如何从 Python 中的 txt 文件中读取数据集?