Algorithm 使用行索引和列索引查找矩阵中的最小值之和一次
所以我想用下面的方法找到矩阵中的最小值Algorithm 使用行索引和列索引查找矩阵中的最小值之和一次,algorithm,python-2.7,matrix,optimization,Algorithm,Python 2.7,Matrix,Optimization,所以我想用下面的方法找到矩阵中的最小值 [[ 1000. 930. 940. 740.] [ 1000. 1000. 990. 670.] M1= [ 1000. 1000. 1000. 680.] [ 1000. 1000. 1000. 1000.]] 选择两个矩阵值之和时,应确保索引使用一次0,1,2,3。但矩阵值之和也应最小化 因此,在这种情况下,解决方案将是M1[2][3]和M1[0][1]。 不
[[ 1000. 930. 940. 740.]
[ 1000. 1000. 990. 670.]
M1= [ 1000. 1000. 1000. 680.]
[ 1000. 1000. 1000. 1000.]]
选择两个矩阵值之和时,应确保索引使用一次0,1,2,3。但矩阵值之和也应最小化
因此,在这种情况下,解决方案将是M1[2][3]
和M1[0][1]
。
不正确的将是M1[2][3]
和M1[1][3]
,它们的总和较低,但不包含唯一的索引号
解应该适用于NxN矩阵,N是偶数。对于8x8矩阵,我想找到4个元素。因此,索引编号。0,1,2,3,4,5,6,7为一次使用。四个矩阵值。
另一个约束是,该矩阵仅包含上平移矩阵中的intrest值。如果矩阵元素是1000,那么在求最小和时可以忽略这些元素
我曾试图改变匈牙利算法,但没有成功。
有人知道一种算法能满足我的要求吗?也许是我可以滥用的python包
或者有一个聪明的解决方案会有所帮助,我必须用最大200X200个元素来做这个矩阵。我会说一个解决方案可能不是最快的,但它可能会工作 您可以通过以下方式构建图形:
- 该图将包含(N×N+1)个顶点,表示矩阵的索引,以及一个新的顶点,它将是源
- 源将连接到所有其他顶点,其距离等于每个顶点表示的索引值
- 然后,您必须将每个顶点(源除外)连接到可能连接到的每个其他顶点(例如,M1[1][2]可以连接到M1[0][3],但不能连接到M1[1][3])。从任何顶点到顶点V的距离将对应于矩阵中V的值
希望这有帮助:)这是一个理论问题还是考试?还是一个真正的问题?对数据是否有一些限制,如稀疏矩阵或值的巨大差异?对于n=200,简单的蛮力拾取听起来不太可能。它是一个对角矩阵,如示例中所示。这是一个个人项目,我想最小化多个对象之间的差异。对角线约束可能会有所帮助。我认为,当你添加转置矩阵时,你可以使用匈牙利算法。你用m[i][j]需要m[j][i]的约束来搜索一对一的赋值。@stefan-Yeah只要在对角线上镜像矩阵,我就能做到。谢谢:)这就是所谓的深度优先搜索。如果我对矩阵n=100做对了,那么可能的组合数超过了宇宙中的原子数。以百万计。更不用说n=200:-)