通过将 (i, j) 和 (j, i) 处的元素替换为其均值,将给定矩阵转换为对称矩阵
给定一个整数N和一个N x N矩阵,任务是将给定矩阵转换为对称矩阵,方法是将第 (i, j )和(j, i )元素替换为其算术平均值。
例子:
Input: arr[] = {{1, 2, 3},
{4, 5, 6},
{7, 8, 9}}
Output:
1 3 5
3 5 7
5 7 9
Explanation: The diagonal elements are same. The element at index (0, 1) = 2 and (1, 0) = 4 is replaced by their arithmetic mean i.e, (2 + 4) / 2 = 3. Similarly, the elements at index (2, 0) and (0, 2), (2, 1) and (1, 2) are also replaced by their arithmetic mean and the resulting output matrix is a symmetric matrix.
Input: arr[] = {{12, 43, 65},
{23, 75, 13},
{51, 37, 81}}
Output:
12 33 58
33 75 25
58 25 81
方法:给定的问题是一个基于实现的问题。这个想法是遍历下三角矩阵并用它们的算术平均值替换元素及其各自的转置索引。
下面是上述方法的实现:
C++
// C++ program of the above approach
#include
using namespace std;
const int N = 3;
// Function to convert the given matrix
// into a symmetric matrix by replacing
// transpose elements with their mean
void makeSymmetric(int mat[][N])
{
// Loop to traverse lower triangular
// elements of the given matrix
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (j < i) {
mat[i][j] = mat[j][i]
= (mat[i][j] +
mat[j][i]) / 2;
}
}
}
}
// Function to print the given matrix
void showMatrix(int mat[][N])
{
// Loop to traverse the
// given matrix
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
// Print current index
cout << mat[i][j] << " ";
}
cout << "\n";
}
}
// Driver Code
int main()
{
int arr[][N]
= { { 12, 43, 65 },
{ 23, 75, 13 },
{ 51, 37, 81 } };
makeSymmetric(arr);
showMatrix(arr);
return 0;
}
Java
// Java program of the above approach
import java.util.*;
class GFG{
static int N = 3;
// Function to convert the given matrix
// into a symmetric matrix by replacing
// transpose elements with their mean
static void makeSymmetric(int mat[][])
{
// Loop to traverse lower triangular
// elements of the given matrix
for(int i = 0; i < N; i++)
{
for(int j = 0; j < N; j++)
{
if (j < i)
{
mat[i][j] = mat[j][i] = (mat[i][j] +
mat[j][i]) / 2;
}
}
}
}
// Function to print the given matrix
static void showMatrix(int mat[][])
{
// Loop to traverse the
// given matrix
for(int i = 0; i < N; i++)
{
for(int j = 0; j < N; j++)
{
// Print current index
System.out.print(mat[i][j] + " ");
}
System.out.println();
}
}
// Driver Code
public static void main(String args[])
{
int arr[][] = { { 12, 43, 65 },
{ 23, 75, 13 },
{ 51, 37, 81 } };
makeSymmetric(arr);
showMatrix(arr);
}
}
// This code is contributed by sanjoy_62
Python3
# python3 program of the above approach
N = 3
# Function to convert the given matrix
# into a symmetric matrix by replacing
# transpose elements with their mean
def makeSymmetric(mat):
# Loop to traverse lower triangular
# elements of the given matrix
for i in range(0, N):
for j in range(0, N):
if (j < i):
mat[i][j] = mat[j][i] = (mat[i][j] +
mat[j][i]) // 2
# Function to print the given matrix
def showMatrix(mat):
# Loop to traverse the
# given matrix
for i in range(0, N):
for j in range(0, N):
# Print current index
print(mat[i][j], end=" ")
print()
# Driver Code
if __name__ == "__main__":
arr = [[12, 43, 65],
[23, 75, 13],
[51, 37, 81]]
makeSymmetric(arr)
showMatrix(arr)
# This code is contributed by rakeshsahni
C#
// C# program of the above approach
using System;
public class GFG
{
static int N = 3;
// Function to convert the given matrix
// into a symmetric matrix by replacing
// transpose elements with their mean
static void makeSymmetric(int [,]mat)
{
// Loop to traverse lower triangular
// elements of the given matrix
for(int i = 0; i < N; i++)
{
for(int j = 0; j < N; j++)
{
if (j < i)
{
mat[i,j] = mat[j,i] = (mat[i,j] +
mat[j,i]) / 2;
}
}
}
}
// Function to print the given matrix
static void showMatrix(int [,]mat)
{
// Loop to traverse the
// given matrix
for(int i = 0; i < N; i++)
{
for(int j = 0; j < N; j++)
{
// Print current index
Console.Write(mat[i, j] + " ");
}
Console.WriteLine();
}
}
// Driver Code
public static void Main(String []args)
{
int [,]arr = { { 12, 43, 65 },
{ 23, 75, 13 },
{ 51, 37, 81 } };
makeSymmetric(arr);
showMatrix(arr);
}
}
// This code is contributed by 29AjayKumar
Javascript
12 33 58
33 75 25
58 25 81
时间复杂度: O(N 2 )
空间复杂度: O(1)