Related Articles
Check if a given matrix is Hankel or not
• Last Updated : 26 Apr, 2021

Given a matrix m[][] of size n x n. The task is to check whether given matrix is Hankel Matrix or not.
In linear algebra, a Hankel matrix (or catalecticant matrix), named after Hermann Hankel, is a square matrix in which each ascending skew-diagonal from left to right is constant.
Examples:

Input: n = 4,
m[][] = {
{1, 2, 3, 5},
{2, 3, 5, 8},
{3, 5, 8, 0},
{5, 8, 0, 9}
};
Output: Yes
All diagonal {1}, {2, 2}, {3, 3, 3}, {5, 5, 5, 5}, {8, 8, 8}, {9} have constant value.
So given matrix is Hankel Matrix.

Input: n = 3,
m[][] = {
{1, 2, 3},
{2, 3, 5},
{3, 9, 8}
};
Output: No

Observe, for a matrix to be Hankel Matrix, it must be of the form,

```a0  a1  a2  a3
a1  a2  a3  a4
a2  a3  a4  a5
a3  a4  a5  a6```

Therefore, to check if the given matrix is Hankel Matrix, we need check if each m[i][j] == ai + j. Now, ai + j can be define as:

```         m[i+j][0], if i + j < n
ai + j =
m[i + j - n + 1][n-1], otherwise```

Below is the implementation of the above approach:

## C++

 `// C++ Program to check if given matrix is``// Hankel Matrix or not.``#include ``using` `namespace` `std;``#define N 4` `// Function to check if given matrix is Hankel``// Matrix or not.``bool` `checkHankelMatrix(``int` `n, ``int` `m[N][N])``{``    ``// for each row``    ``for` `(``int` `i = 0; i < n; i++) {` `        ``// for each column``        ``for` `(``int` `j = 0; j < n; j++) {` `            ``// checking if i + j is less than n``            ``if` `(i + j < n) {` `                ``// checking if the element is equal to the``                ``// corresponding diagonal constant``                ``if` `(m[i][j] != m[i + j][0])``                    ``return` `false``;``            ``}``            ``else` `{` `                ``// checking if the element is equal to the``                ``// corresponding diagonal constant``                ``if` `(m[i][j] != m[i + j - n + 1][n - 1])``                    ``return` `false``;``            ``}``        ``}``    ``}` `    ``return` `true``;``}` `// Drivers code``int` `main()``{``    ``int` `n = 4;``    ``int` `m[N][N] = {``        ``{ 1, 2, 3, 5 },``        ``{ 2, 3, 5, 8 },``        ``{ 3, 5, 8, 0 },``        ``{ 5, 8, 0, 9 }``    ``};` `    ``checkHankelMatrix(n, m) ? (cout << ``"Yes"``)``                            ``: (cout << ``"No"``);``    ``return` `0;``}`

## Java

 `// Java Program to check if given matrix is``// Hankel Matrix or not.``import` `java.io.*;``import` `java.util.*;` `class` `GFG {` `    ``// Function to check if given matrix``    ``// is Hankel Matrix or not.``    ``static` `boolean` `checkHankelMatrix(``int` `n,``                                 ``int` `m[][])``    ``{``        ``// for each row``        ``for` `(``int` `i = ``0``; i < n; i++) {``    ` `            ``// for each column``            ``for` `(``int` `j = ``0``; j < n; j++) {``    ` `                ``// checking if i + j is less``                ``// than n``                ``if` `(i + j < n) {``    ` `                    ``// checking if the element``                    ``// is equal to the``                    ``// corresponding diagonal``                    ``// constant``                    ``if` `(m[i][j] != m[i + j][``0``])``                        ``return` `false``;``                ``}``                ``else` `{``    ` `                    ``// checking if the element``                    ``// is equal to the``                    ``// corresponding diagonal``                    ``// constant``                    ``if` `(m[i][j] !=``                       ``m[i + j - n + ``1``][n - ``1``])``                        ``return` `false``;``                ``}``            ``}``        ``}``    ` `        ``return` `true``;``    ``}``    ` `    ``// Drivers code``    ``public` `static` `void` `main(String args[])``    ``{``        ``int` `n = ``4``;``        ``int` `m[][] = {``            ``{ ``1``, ``2``, ``3``, ``5` `},``            ``{ ``2``, ``3``, ``5``, ``8` `},``            ``{ ``3``, ``5``, ``8``, ``0` `},``            ``{ ``5``, ``8``, ``0``, ``9` `}``        ``};``    ` `        ``if``(checkHankelMatrix(n, m))``            ``System.out.println(``"Yes"``);``        ``else``            ``System.out.println(``"No"``);``    ``}``}` `// This code is contributed by Anuj_67.`

## Python 3

 `# Python 3 Program to check if given matrix is``# Hankel Matrix or not.` `N ``=` `4` `# Function to check if given matrix is Hankel``# Matrix or not.``def` `checkHankelMatrix(n, m):` `    ``# for each row``    ``for` `i ``in` `range``( ``0``, n):` `        ``# for each column``        ``for` `j ``in` `range``( ``0``, n):` `            ``# checking if i + j is less``            ``# than n``            ``if` `(i ``+` `j < n):` `                ``# checking if the element is``                ``# equal to the corresponding``                ``# diagonal constant``                ``if` `(m[i][j] !``=` `m[i ``+` `j][``0``]):``                    ``return` `False``            ` `            ``else` `:` `                ``# checking if the element is``                ``# equal to the corresponding``                ``# diagonal constant``                ``if` `(m[i][j] !``=``                    ``m[i ``+` `j ``-` `n ``+` `1``][n ``-` `1``]):``                    ``return` `False``            ` `    ``return` `True` `# Drivers code``n ``=` `4``m ``=``[[``1``, ``2``, ``3``, ``5``,],``    ``[``2``, ``3``, ``5``, ``8``,],``    ``[``3``, ``5``, ``8``, ``0``,],``    ``[``5``, ``8``, ``0``, ``9``]]``(``print``(``"Yes"``) ``if` `checkHankelMatrix(n, m)``                      ``else` `print``(``"No"``))` `# This code is contributed by Smitha.`

## C#

 `// C# Program to check if given matrix is``// Hankel Matrix or not.``using` `System;` `class` `GFG {` `    ``// Function to check if given matrix``    ``// is Hankel Matrix or not.``    ``static` `bool` `checkHankelMatrix(``int` `n,``                                ``int` `[,]m)``    ``{``        ``// for each row``        ``for` `(``int` `i = 0; i < n; i++) {``    ` `            ``// for each column``            ``for` `(``int` `j = 0; j < n; j++) {``    ` `                ``// checking if i + j is less``                ``// than n``                ``if` `(i + j < n) {``    ` `                    ``// checking if the element``                    ``// is equal to the``                    ``// corresponding diagonal``                    ``// constant``                    ``if` `(m[i, j] != m[i + j, 0])``                        ``return` `false``;``                ``}``                ``else` `{``    ` `                    ``// checking if the element``                    ``// is equal to the``                    ``// corresponding diagonal``                    ``// constant``                    ``if` `(m[i,j] != m[i + j - n``                                  ``+ 1, n - 1])``                        ``return` `false``;``                ``}``            ``}``        ``}``    ` `        ``return` `true``;``    ``}``    ` `    ``// Drivers code``    ``public` `static` `void` `Main()``    ``{``        ``int` `n = 4;``        ``int` `[,]m = {``            ``{ 1, 2, 3, 5 },``            ``{ 2, 3, 5, 8 },``            ``{ 3, 5, 8, 0 },``            ``{ 5, 8, 0, 9 }``        ``};``    ` `        ``if``(checkHankelMatrix(n, m))``            ``Console.Write(``"Yes"``);``        ``else``            ``Console.Write(``"No"``);``    ``}``}` `// This code is contributed by Anuj_67.`

## PHP

 ``

## Javascript

 ``
Output
`Yes`

Time Complexity: O(N2)
Auxiliary Space: O(1)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with industry experts, please refer DSA Live Classes

My Personal Notes arrow_drop_up