给定大小为nxn的矩阵m [] [] 。任务是检查给定的矩阵是否为汉克尔矩阵。
在线性代数中,以赫尔曼·汉克尔(Hermann Hankel)命名的汉克尔矩阵(或催化矩阵)是一个方阵,其中每个从左到右的倾斜对角线都是恒定的。
例子:
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
注意,对于要成为汉克尔矩阵的矩阵,它必须具有以下形式:
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)