对角占优矩阵
原文: https://www.geeksforgeeks.org/diagonally-dominant-matrix/
在数学中,如果对于矩阵的每一行,一行中对角线条目的大小大于或等于,则称方阵为对角线优势。 该行中所有其他(非对角线)条目的大小。 更准确地说,如果,
矩阵A
对角占优势,例如,由于,
|a11| ≥ |a12| + |a13| since |+3| ≥ |-2| + |+1|
|a22| ≥ |a21| + |a23| since |-3| ≥ |+1| + |+2|
|a33| ≥ |a31| + |a32| since |+4| ≥ |-1| + |+2|
矩阵对角占优:
给定n
行和n
列的矩阵。 任务是检查矩阵A
是否对角占优。
示例:
Input : A = { { 3, -2, 1 },
{ 1, -3, 2 },
{ -1, 2, 4 } };
Output : YES
Given matrix is diagonally dominant
because absolute value of every diagonal
element is more than sum of absolute values
of corresponding row.
Input : A = { { -2, 2, 1 },
{ 1, 3, 2 },
{ 1, -2, 0 } };
Output : NO
这个想法是对行数从i = 0
到n-1
运行一个循环,对于每行,运行j = 0
到n-1
的循环,找到非对角元素的总和,即i != j
。 并检查对角线元素是否大于或等于和。 如果任何一行为false
,则返回false
或打印No
。 否则打印Yes
。
C++
// CPP Program to check whether given matrix
// is Diagonally Dominant Matrix.
#include <bits/stdc++.h>
#define N 3
using namespace std;
// check the given given matrix is Diagonally
// Dominant Matrix or not.
bool isDDM(int m[N][N], int n)
{
// for each row
for (int i = 0; i < n; i++)
{
// for each column, finding sum of each row.
int sum = 0;
for (int j = 0; j < n; j++)
sum += abs(m[i][j]);
// removing the diagonal element.
sum -= abs(m[i][i]);
// checking if diagonal element is less
// than sum of non-diagonal element.
if (abs(m[i][i]) < sum)
return false;
}
return true;
}
// Driven Program
int main()
{
int n = 3;
int m[N][N] = { { 3, -2, 1 },
{ 1, -3, 2 },
{ -1, 2, 4 } };
(isDDM(m, n)) ? (cout << "YES") : (cout << "NO");
return 0;
}
Java
// JAVA Program to check whether given matrix
// is Diagonally Dominant Matrix.
import java.util.*;
class GFG {
// check the given given matrix is Diagonally
// Dominant Matrix or not.
static boolean isDDM(int m[][], int n)
{
// for each row
for (int i = 0; i < n; i++)
{
// for each column, finding
//sum of each row.
int sum = 0;
for (int j = 0; j < n; j++)
sum += Math.abs(m[i][j]);
// removing the diagonal element.
sum -= Math.abs(m[i][i]);
// checking if diagonal element is less
// than sum of non-diagonal element.
if (Math.abs(m[i][i]) < sum)
return false;
}
return true;
}
/* Driver program to test above function */
public static void main(String[] args)
{
int n = 3;
int m[][] = { { 3, -2, 1 },
{ 1, -3, 2 },
{ -1, 2, 4 } };
if (isDDM(m, n))
System.out.println("YES") ;
else
System.out.println("NO");
}
}
// This code is contributed by Arnav Kr. Mandal.
Python3
# Python Program to check
# whether given matrix is
# Diagonally Dominant Matrix.
# check the given given
# matrix is Diagonally
# Dominant Matrix or not.
def isDDM(m, n) :
# for each row
for i in range(0, n) :
# for each column, finding
# sum of each row.
sum = 0
for j in range(0, n) :
sum = sum + abs(m[i][j])
# removing the
# diagonal element.
sum = sum - abs(m[i][i])
# checking if diagonal
# element is less than
# sum of non-diagonal
# element.
if (abs(m[i][i]) < sum) :
return False
return True
# Driver Code
n = 3
m = [[ 3, -2, 1 ],
[ 1, -3, 2 ],
[ -1, 2, 4 ]]
if((isDDM(m, n))) :
print ("YES")
else :
print ("NO")
# This code is contributed by
# Manish Shaw(manishshaw1)
C
// C# Program to check whether given matrix
// is Diagonally Dominant Matrix.
using System;
class GFG {
// check the given given matrix is Diagonally
// Dominant Matrix or not.
static bool isDDM(int [,]m, int n)
{
// for each row
for (int i = 0; i < n; i++)
{
// for each column, finding
//sum of each row.
int sum = 0;
for (int j = 0; j < n; j++)
sum += Math.Abs(m[i, j]);
// removing the diagonal element.
sum -= Math.Abs(m[i, i]);
// checking if diagonal element is less
// than sum of non-diagonal element.
if (Math.Abs(m[i,i]) < sum)
return false;
}
return true;
}
// Driver program
public static void Main()
{
int n = 3;
int [,]m = { { 3, -2, 1 },
{ 1, -3, 2 },
{ -1, 2, 4 } };
if (isDDM(m, n))
Console.WriteLine("YES") ;
else
Console.WriteLine("NO");
}
}
// This code is contributed by Vt_m.
PHP
<?php
// PHP Program to check whether
// given matrix is Diagonally
// Dominant Matrix.
// check the given given matrix
// is Diagonally Dominant Matrix or not.
function isDDM( $m, $n)
{
// for each row
for ($i = 0; $i < $n; $i++)
{
// for each column, finding
// sum of each row.
$sum = 0;
for ( $j = 0; $j < $n; $j++)
$sum += abs($m[$i][$j]);
// removing the diagonal element.
$sum -= abs($m[$i][$i]);
// checking if diagonal element
// is less than sum of non-diagonal
// element.
if (abs($m[$i][$i]) < $sum)
return false;
}
return true;
}
// Driver Code
$n = 3;
$m = array(array( 3, -2, 1 ),
array( 1, -3, 2 ),
array( -1, 2, 4 ));
if((isDDM($m, $n)))
echo "YES";
else
echo"NO";
// This code is contributed by SanjuTomar
?>
输出:
YES
版权属于:月萌API www.moonapi.com,转载请注明出处