最小化瓷砖重排问题:
假设我有以下对称的9x9矩阵,其中包含N个粒子之间的N^2个相互作用:
(1,2) (2,9) (4,5) (4,6) (5,8) (7,8),
这些是对称交互作用,因此它暗示着存在以下内容:
(2,1) (9,2) (5,4) (6,4) (8,5) (8,7),
在我的问题中,假设它们以矩阵形式排列,只显示上三角形部分:
t 0 1 2 (tiles)
# 1 2 3 4 5 6 7 8 9
1 [ 0 1 0 0 0 0 0 0 0 ]
0 2 [ x 0 0 0 0 0 0 0 1 ]
3 [ x x 0 0 0 0 0 0 0 ]
4 [ x x x 0 1 1 0 0 0 ]
1 5 [ x x x x 0 0 0 1 0 ]
6 [ x x x x x 0 0 0 0 ]
7 [ x x x x x x 0 1 0 ]
2 8 [ x x x x x x x 0 0 ]
9 [ x x x x x x x x 0 ] (x's denote symmetric pair)
我有一些在3x3瓷砖中计算的操作,任何包含至少一个1的3x3必须全部计算。上面的例子需要至少5个瓷砖:(0,0),(0,2),(1,1),(1,2),(2,2)。
然而,如果我通过重新排列输入来交换第3和第9列(以及行,因为它是对称矩阵),则如下所示:
t 0 1 2
# 1 2 9 4 5 6 7 8 3
1 [ 0 1 0 0 0 0 0 0 0 ]
0 2 [ x 0 1 0 0 0 0 0 0 ]
9 [ x x 0 0 0 0 0 0 0 ]
4 [ x x x 0 1 1 0 0 0 ]
1 5 [ x x x x 0 0 0 1 0 ]
6 [ x x x x x 0 0 0 0 ]
7 [ x x x x x x 0 1 0 ]
2 8 [ x x x x x x x 0 0 ]
3 [ x x x x x x x x 0 ] (x's denote symmetric pair)
现在,我只需要计算4个瓷砖:(0,0),(1,1),(1,2),(2,2)。
一般问题:
给定一个NxN的稀疏矩阵,找到重新排序以最小化必须计算的TxT瓷砖数量。假设N是T的倍数。通过尝试输入排序的N!排列可以找到一个最优但不可行的解决方案。
对于启发式算法,我已经尝试了带宽最小化例程(如Reverse CutHill McKee),Tim Davis' AMD例程,但都没有成功。我认为对角线化不是正确的方法。
这是一个样本起始矩阵: 希尔伯特曲线: RCM: 莫顿曲线: