結果も対称行列になるように、対称行列の2つのインデックスを交換するアルゴリズムを見つけるために、私は1日を費やしています。
次のマトリックスがあるとしましょう:
0 1 2 3
1 0 4 5
2 4 0 6
3 5 6 0
行 1 と行 3 を入れ替えたいとしましょう (行 0 が最初の行です)。交換するだけで、次のようになります。
0 1 2 3
3 5 6 0
2 4 0 6
1 0 4 5
しかし、この行列はもう対称ではありません。私が本当に欲しいのは、結果としてマトリックスに従うことです:
0 3 2 1
3 0 6 5
2 6 0 4
1 5 4 0
しかし、適切なアルゴリズムを見つけることができません。簡単な作業のように見えるので、それは本当に私をひび割れさせます。
誰か知っていますか?
アップデート
系統発生は実にシンプルな答えを出してくれました。しかし、ここにフォローアップタスクがあります:
この行列を 2 次元配列として保存するとします。また、メモリを節約するために、冗長な値を保存せず、常に0
値を持つ対角線も除外します。私の配列は次のようになります。
[ [1, 2, 3], [4, 5], [6] ]
私の目標は、その配列を次のように変換することです。
[ [3, 2, 1], [6, 5], [4] ]
指定された配列を使用して効率的な方法で行と列を交換するにはどうすればよいですか?