📜  检查给定的矩阵是否为Hankel

📅  最后修改于: 2021-05-04 14:22:42             🧑  作者: Mango

给定大小为nxn的矩阵m [] [] 。任务是检查给定的矩阵是否为汉克尔矩阵。
在线性代数中,以赫尔曼·汉克尔(Hermann Hankel)命名的汉克尔矩阵(或催化矩阵)是一个方阵,其中每个从左到右的倾斜对角线都是恒定的。
例子:

注意,对于要成为汉克尔矩阵的矩阵,它必须具有以下形式:

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

因此,要检查给定的矩阵是否为汉克尔矩阵,我们需要检查每个m [i] [j] == a i + j 。现在,可以将i + j定义为:

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

下面是上述方法的实现:

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


输出
Yes

时间复杂度: O(N 2 )
辅助空间: O(1)