假设我们有一个方阵A。我们的目标是通过行置换来最大化最小对角线元素。换句话说,对于给定的矩阵A,我们有n个对角线元素,因此我们有最小值$min{d_i}$。我们的目的是通过行置换达到可能具有最大最小对角线元素的矩阵。
这就像在所有行置换中的$max min{d_i}$。
例如,假设A = [4 3 2 1; 1 4 3 2; 2 1 4 3; 2.5 3.5 4.5 1.5]。对角线为[4, 4, 4, 1.5]。对角线的最小值是1.5。我们可以交换第3行和第4行以得到新矩阵$\tilde_A$ = [4 3 2 1; 1 4 3 2; 2.5 3.5 4.5 1.5; 2 1 4 3]。新的对角线为[4, 4, 4.5, 3],具有新的最小值3。理论上,这似乎是我可以获得的最佳结果,因为似乎没有更好的选择:3似乎是$max min{d_i}$。
在我的问题中,n要大得多,如1000。我知道有n!种行置换,因此从理论上讲,我无法遍历每个置换。我知道贪心算法会有帮助-我们从第一行开始。如果a_11不是第一列中最小的元素,则通过行置换将a_11与第一列中最大的元素交换。然后,通过将a_22与第二列中所有剩余元素(除了a_12)进行比较,我们查看第二行。如果它不是最小值,则交换a_22。... ...等。我们一直这样做,直到最后一行。
是否有更好的算法来完成它?
这类似于最小欧几里得匹配,但它们并不相同。
这就像在所有行置换中的$max min{d_i}$。
例如,假设A = [4 3 2 1; 1 4 3 2; 2 1 4 3; 2.5 3.5 4.5 1.5]。对角线为[4, 4, 4, 1.5]。对角线的最小值是1.5。我们可以交换第3行和第4行以得到新矩阵$\tilde_A$ = [4 3 2 1; 1 4 3 2; 2.5 3.5 4.5 1.5; 2 1 4 3]。新的对角线为[4, 4, 4.5, 3],具有新的最小值3。理论上,这似乎是我可以获得的最佳结果,因为似乎没有更好的选择:3似乎是$max min{d_i}$。
在我的问题中,n要大得多,如1000。我知道有n!种行置换,因此从理论上讲,我无法遍历每个置换。我知道贪心算法会有帮助-我们从第一行开始。如果a_11不是第一列中最小的元素,则通过行置换将a_11与第一列中最大的元素交换。然后,通过将a_22与第二列中所有剩余元素(除了a_12)进行比较,我们查看第二行。如果它不是最小值,则交换a_22。... ...等。我们一直这样做,直到最后一行。
是否有更好的算法来完成它?
这类似于最小欧几里得匹配,但它们并不相同。