タイルの並べ替え問題の最小化:
次の対称 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 つの 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)
これで、(0,0)、(1,1)、(1,2)、(2,2) の 4 つのタイルを計算するだけで済みます。
一般的な問題:
NxN 疎行列が与えられた場合、計算する必要がある TxT タイルの数を最小限に抑えるための並べ替えを見つけます。N が T の倍数であると仮定します。最適ではあるが実行不可能な解は、N! 入力順序の順列。
ヒューリスティックについては、帯域幅最小化ルーチン (Reverse CutHill McKee など)、Tim Davis の AMD ルーチンを試しましたが、これまでのところ役に立ちませんでした。ここでは、対角化が正しいアプローチではないと思います。
サンプルの開始マトリックスを次に示します。
http://proteneer.com/misc/out2.dat
ヒルベルト曲線:
RCM:
モートン曲線: