将矩阵转换为下 Hessenberg 矩阵所需的最小步骤
给定一个NxN阶矩阵,找到将给定矩阵转换为下 Hessenberg 矩阵的最小步数。在每一步中,唯一允许的操作是将任何元素值减少或增加 1。
例子:
Input: mat[][] = {
{1, 2, 8},
{1, 3, 4},
{2, 3, 4}}
Output: 8
Decrease the element a[0][2] 8 times.
Now the matrix is lower Hessenberg.
Input: mat[][] = {
{9, 2, 5, 5},
{12, 3, 4, 5},
{13, -3, 4, 2},
{-1, 10, 1, 4}}
Output: 15
方法:
- 要使矩阵成为下 Hessenberg 矩阵,其超对角线以上的所有元素都必须为零,即对于所有 j > i+1 , A ij = 0。 .
- 在下 Hessenberg 矩阵中转换给定矩阵所需的最小步骤数等于所有 j > i + 1 的所有 A ij的绝对值之和。
- 单元的模量值被考虑在内,因为单元的增加和减少都算作一个步骤。
下面是上述方法的实现:
C++
// C++ implementation of above approach
#include
#define N 4
using namespace std;
// Function to count steps in
// conversion of matrix into upper
// Hessenberg matrix
int stepsRequired(int arr[][N])
{
int result = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (j > i + 1)
result += abs(arr[i][j]);
}
}
return result;
}
int main()
{
int arr[N][N] = { 1, 2, 3, 2,
3, 1, 0, 3,
3, 2, 1, 3,
-3, 4, 2, 1 };
cout << stepsRequired(arr);
return 1;
}
Java
// Java implementation of above approach
import java.io.*;
class GFG
{
static int N = 4;
// Function to count steps in
// conversion of matrix into upper
// Hessenberg matrix
static int stepsRequired(int arr[][])
{
int result = 0;
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
if (j > i + 1)
result += Math.abs(arr[i][j]);
}
}
return result;
}
// Driver code
public static void main (String[] args)
{
int [][]arr = { {1, 2, 3, 2},
{3, 1, 0, 3},
{3, 2, 1, 3},
{-3, 4, 2, 1}
};
System.out.println (stepsRequired(arr));
}
}
// The code is contributed by ajit.
Python3
# Python3 implementation of above approach
N = 4
# Function to count steps in
# conversion of matrix into upper
# Hessenberg matrix
def stepsRequired(arr):
result = 0
for i in range(N):
for j in range(N):
if (j > i + 1):
result += abs(arr[i][j])
return result
# Driver code
arr = [[1, 2, 3, 2],
[3, 1, 0, 3],
[3, 2, 1, 3],
[-3, 4, 2, 1]]
print(stepsRequired(arr))
# This code is contributed by mohit kumar 29
C#
// C# implementation of above approach
using System;
class GFG
{
static int N = 4;
// Function to count steps in
// conversion of matrix into upper
// Hessenberg matrix
static int stepsRequired(int [,]arr)
{
int result = 0;
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
if (j > i + 1)
result += Math.Abs(arr[i,j]);
}
}
return result;
}
// Driver code
static public void Main ()
{
int [,]arr = { {1, 2, 3, 2},
{3, 1, 0, 3},
{3, 2, 1, 3},
{-3, 4, 2, 1}
};
Console.Write(stepsRequired(arr));
}
}
// The code is contributed by Tushil..
Javascript
输出:
8
时间复杂度: O(N*N)