📜  通过将 (i, j) 和 (j, i) 处的元素替换为其均值,将给定矩阵转换为对称矩阵

📅  最后修改于: 2022-05-13 01:56:06.866000             🧑  作者: Mango

通过将 (i, j) 和 (j, i) 处的元素替换为其均值,将给定矩阵转换为对称矩阵

给定一个整数N和一个N x N矩阵,任务是将给定矩阵转换为对称矩阵,方法是将第 (i, j )(j, i )元素替换为其算术平均值。

例子:

方法:给定的问题是一个基于实现的问题。这个想法是遍历下三角矩阵并用它们的算术平均值替换元素及其各自的转置索引。

下面是上述方法的实现:

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)