最小化瓷砖重新排序问题:
假设我有以下对称的 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 例程,但到目前为止都无济于事。我不认为对角化是正确的方法。
这是一个示例起始矩阵:
http://proteneer.com/misc/out2.dat
希尔伯特曲线:
RCM:
莫顿曲线: