Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

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.

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 experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

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 <bits/stdc++.h>
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




<?php
// PHP Program to check if given matrix is
// Hankel Matrix or not.
$N = 4;
 
// Function to check if
// given matrix is Hankel
// Matrix or not.
function checkHankelMatrix( $n, $m)
{
     
    // for each row
    for($i = 0; $i < $n; $i++) {
 
        // for each column
        for ($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;
}
 
    // Driver code
    $n = 4;
    $m = array(array( 1, 2, 3, 5 ),
               array( 2, 3, 5, 8 ),
               array( 3, 5, 8, 0 ),
               array( 5, 8, 0, 9 ));
    if(checkHankelMatrix($n, $m))
        echo "Yes";
    else
        echo "No";
 
// This code is contributed by Anuj_67.
?>

Javascript




<script>
 
// Java script Program to check if given matrix is
// Hankel Matrix or not.
 
 
    // Function to check if given matrix
    // is Hankel Matrix or not.
    function checkHankelMatrix(n,m)
    {
        // for each row
        for (let i = 0; i < n; i++) {
     
            // for each column
            for (let 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
     
        let n = 4;
        let m = [
            [1, 2, 3, 5 ],
            [ 2, 3, 5, 8] ,
            [ 3, 5, 8, 0 ],
            [ 5, 8, 0, 9 ]
        ];
     
        if(checkHankelMatrix(n, m))
            document.write("Yes");
        else
            document.write("No");
 
//this code is  contributed by mohan pavan pulamolu
</script>
Output
Yes

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




My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!