Programa Python3 para maximizar la suma de la diagonal de una array rotando todas las filas o todas las columnas

Dada una array cuadrada , mat[][] de dimensiones N * N , la tarea es encontrar la suma máxima posible de elementos diagonales de la array dada al rotar todas las filas o todas las columnas de la array por un número entero positivo.

Ejemplos:

Entrada: mat[][] = { { 1, 1, 2 }, { 2, 1, 2 }, { 1, 2, 2 } }
Salida:
Explicación: 
Rotar todas las columnas de matrix por 1 modifica mat[] [] a { {2, 1, 2}, {1, 2, 2}, {1, 1, 2} }. 
Por tanto, la suma de los elementos de la diagonal de la array = 2 + 2 + 2 = 6 que es el máximo posible.

Entrada: A[][] = { { -1, 2 }, { -1, 3 } }
Salida: 2

Planteamiento: La idea es rotar todas las filas y columnas de la array de todas las formas posibles y calcular la suma máxima obtenida. Siga los pasos para resolver el problema:

  • Inicialice una variable, digamos maxDiagonalSum para almacenar la suma máxima posible de elementos diagonales de la array rotando todas las filas o columnas de la array.
  • Gire todas las filas de la array por un entero positivo en el rango [0, N – 1] y actualice el valor de maxDiagonalSum .
  • Rote todas las columnas de la array por un entero positivo en el rango [0, N – 1] y actualice el valor de maxDiagonalSum .
  • Finalmente, imprima el valor de maxDiagonalSum .

A continuación se muestra la implementación del enfoque anterior:

Python3

# Python3 program to implement
# the above approach
import sys
  
N = 3
  
# Function to find maximum sum of diagonal
# elements of matrix by rotating either 
# rows or columns
def findMaximumDiagonalSumOMatrixf(A):
      
    # Stores maximum diagonal sum of elements
    # of matrix by rotating rows or columns
    maxDiagonalSum = -sys.maxsize - 1
  
    # Rotate all the columns by an integer
    # in the range [0, N - 1]
    for i in range(N):      
  
        # Stores sum of diagonal elements
        # of the matrix
        curr = 0
          
        # Calculate sum of diagonal 
        # elements of the matrix
        for j in range(N):
              
            # Update curr
            curr += A[j][(i + j) % N]
         
        # Update maxDiagonalSum
        maxDiagonalSum = max(maxDiagonalSum, 
                             curr)
                               
    # Rotate all the rows by an integer
    # in the range [0, N - 1]
    for i in range(N):
          
        # Stores sum of diagonal elements
        # of the matrix
        curr = 0
          
        # Calculate sum of diagonal 
        # elements of the matrix
        for j in range(N):          
              
            # Update curr
            curr += A[(i + j) % N][j]
          
        # Update maxDiagonalSum
        maxDiagonalSum = max(maxDiagonalSum, 
                             curr)
                               
    return maxDiagonalSum
  
# Driver code
if __name__ == "__main__":
      
    mat = [ [ 1, 1, 2 ], 
            [ 2, 1, 2 ], 
            [ 1, 2, 2 ] ]
      
    print(findMaximumDiagonalSumOMatrixf(mat))
      
# This code is contributed by chitranayal
Producción: 

6

 

Complejidad de Tiempo: O(N 2 )  
Espacio Auxiliar: O(1)

Consulte el artículo completo sobre Maximizar la suma de la diagonal de una array girando todas las filas o todas las columnas para obtener más detalles.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *