Ma trận Hankel: Ma trận vuông mà mọi phần tử trên đường chéo ngược (skew-diagonal) đều bằng nhau. Tức mat[i][j] chỉ phụ thuộc vào i+j.
Ví dụ 5×5: 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 7 8 9
Điều kiện
mat[i][j] = a_{i+j} với: a_{i+j} = mat[i+j][0] nếu i+j < n a_{i+j} = mat[i+j-n+1][n-1] nếu i+j ≥ n
Ví dụ minh họa
#include <iostream>
#define N 5
using namespace std;
bool isHankelMat(int mat[N][N], int n) {
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++) {
if (i + j < n) {
if (mat[i][j] != mat[i + j][0]) return false;
} else {
if (mat[i][j] != mat[i + j - n + 1][n - 1]) return false;
}
}
return true;
}
int main() {
int mat[N][N] = {
{1,2,3,4,5},
{2,3,4,5,6},
{3,4,5,6,7},
{4,5,6,7,8},
{5,6,7,8,9}
};
cout << (isHankelMat(mat, 5) ? "La ma tran Hankel" : "KHONG phai ma tran Hankel");
}
Kết quả
La ma tran Hankel