Ma trận Bisymmetric (đối xứng kép) là ma trận vuông đối xứng qua cả hai đường chéo chính.
Ví dụ ma trận Bisymmetric 5x5
1 2 3 4 5 2 6 7 8 4 3 7 9 7 3 4 8 7 6 2 5 4 3 2 1
Đối xứng qua đường chéo chính (i,j) ↔ (j,i) và đường chéo phụ (i,j) ↔ (n-j-1, n-i-1).
Thuật toán
- Kiểm tra đối xứng qua đường chéo chính: với mọi i,j (j < i), mat[i][j] == mat[j][i].
- Kiểm tra đối xứng qua đường chéo phụ: với mọi i,j (j < n-i), mat[i][j] == mat[n-j-1][n-i-1].
- Nếu cả hai thỏa mãn → Bisymmetric.
Code ví dụ
#include <iostream>
#define N 5
using namespace std;
int matrix[N][N] = {
{1, 2, 3, 4, 5},
{2, 6, 7, 8, 4},
{3, 7, 9, 7, 3},
{4, 8, 7, 6, 2},
{5, 4, 3, 2, 1}
};
bool checkBiSymmetric() {
// Kiểm tra đối xứng đường chéo chính
for (int i = 0; i < N; i++)
for (int j = 0; j < i; j++)
if (matrix[i][j] != matrix[j][i])
return false;
// Kiểm tra đối xứng đường chéo phụ
for (int i = 0; i < N; i++)
for (int j = 0; j < N - i; j++)
if (matrix[i][j] != matrix[N - j - 1][N - i - 1])
return false;
return true;
}
int main() {
if (checkBiSymmetric())
cout << "Yes, the matrix is bisymmetric";
else
cout << "No, the matrix is not bisymmetric";
return 0;
}
Kết quả
Yes, the matrix is bisymmetric
Độ phức tạp
- Thời gian: O(n²) - duyệt nửa ma trận cho mỗi đường chéo
- Không gian: O(1)
Lưu ý
Ma trận Bisymmetric là tập con của ma trận đối xứng (symmetric). Mọi ma trận bisymmetric đều symmetric, nhưng ngược lại không đúng.