想象一下,给定一个正整数矩阵(最大 25*15,数字值不超过 3000000)。当您进行列求和并选择最小和最大的一项时,它们之间的差异必须尽可能小。
您可以根据需要交换每行中的数字(排列行),而不是列中的数字。
你会如何解决这个任务?
我不是要你的代码,而是你的想法。
提前致谢
我会尝试使用模拟退火来解决这个问题。这是该计划的草图:
- 让距离来优化最大和最小列总和之间的差异。
- 将目标设置为 0(即,尝试尽可能接近总和之间没有差异的矩阵)
- 通过将所有列的总和数组计算为其当前值来初始化问题。
- Let a neighbor当前矩阵的 是通过交换矩阵同一行中的两个条目而得到的矩阵。
- 通过行索引和两个交换列索引来表示邻居。
- 当接受邻居时,不要再次计算所有总和。只需调整已交换列中的总和数组以及交换的差值(您可以从交换的行索引中推断出)
出于性能考虑(大型矩阵),步骤 6 至关重要。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)