📜  矩阵中的最大异或值

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

矩阵中的最大异或值

给定一个方阵 (NXN),任务是找到完整行或完整列的最大异或值。
例子 :

Input :  N = 3 
        mat[3][3] = {{1, 0, 4},
                    {3, 7, 2},
                    {5, 9, 10} };
Output : 14
We get this maximum XOR value by doing XOR 
of elements in second column 0 ^ 7 ^ 9 = 14

Input : N = 4 
        mat[4][4] = { {1, 2, 3, 6},
                      {4, 5, 6,7},
                      {7, 8, 9, 10},
                      {2, 4, 5, 11}}
Output : 12 

这个问题的一个简单解决方案是我们可以遍历矩阵两次并计算最大异或值 row-wise & column-wise ,最后返回 (xor_row , xor_column) 之间的最大值。
一个有效的解决方案是我们可以只遍历一次矩阵并计算最大异或值。

  1. 开始遍历矩阵并在每个索引行和列上计算 XOR。我们可以通过反向使用索引来计算这两个值。这是可能的,因为矩阵是方阵。
  2. 存储两者的最大值。

下面是实现:

C++
// C++ program to Find maximum XOR value in
// matrix either row / column wise
#include
using namespace std;
 
// maximum number of row and column
const int MAX = 1000;
 
// function return the maximum xor value that is
// either row or column wise
int maxXOR(int mat[][MAX], int N)
{
    // for row xor and column xor
    int r_xor, c_xor;
    int max_xor = 0;
 
    // traverse matrix
    for (int i = 0 ; i < N ; i++)
    {
        r_xor = 0, c_xor = 0;
        for (int j = 0 ; j < N ; j++)
        {
            // xor row element
            r_xor = r_xor^mat[i][j];
 
            // for each column : j is act as row & i
            // act as column xor column element
            c_xor = c_xor^mat[j][i];
        }
 
        // update maximum between r_xor , c_xor
        if (max_xor < max(r_xor, c_xor))
            max_xor = max(r_xor, c_xor);
    }
 
    // return maximum xor value
    return max_xor;
}
 
// driver Code
int main()
{
    int N = 3;
 
    int mat[][MAX] = {{1 , 5, 4},
                      {3 , 7, 2 },
                      {5 , 9, 10}
    };
 
    cout << "maximum XOR value : "
         << maxXOR(mat, N);
    return 0;
}


Java
// Java program to Find maximum XOR value in
// matrix either row / column wise
class GFG {
     
    // maximum number of row and column
    static final int MAX = 1000;
     
    // function return the maximum xor value
    // that is either row or column wise
    static int maxXOR(int mat[][], int N)
    {
         
        // for row xor and column xor
        int r_xor, c_xor;
        int max_xor = 0;
     
        // traverse matrix
        for (int i = 0 ; i < N ; i++)
        {
            r_xor = 0; c_xor = 0;
             
            for (int j = 0 ; j < N ; j++)
            {
                 
                // xor row element
                r_xor = r_xor^mat[i][j];
     
                // for each column : j is act as row & i
                // act as column xor column element
                c_xor = c_xor^mat[j][i];
            }
     
            // update maximum between r_xor , c_xor
            if (max_xor < Math.max(r_xor, c_xor))
                max_xor = Math.max(r_xor, c_xor);
        }
     
        // return maximum xor value
        return max_xor;
    }
     
    //driver code
    public static void main (String[] args)
    {
         
        int N = 3;
     
        int mat[][] = { {1, 5, 4},
                        {3, 7, 2},
                        {5, 9, 10}};
     
        System.out.print("maximum XOR value : "
            + maxXOR(mat, N));
    }
}
 
// This code is contributed by Anant Agarwal.


Python3
# Python3 program to Find maximum
# XOR value in matrix either row / column wise
 
# maximum number of row and column
MAX = 1000
  
# Function return the maximum
# xor value that is either row
# or column wise
def maxXOR(mat, N):
 
    # For row xor and column xor
    max_xor = 0
  
    # Traverse matrix
    for i in range(N):
     
        r_xor = 0
        c_xor = 0
        for j in range(N):
         
            # xor row element
            r_xor = r_xor ^ mat[i][j]
  
            # for each column : j is act as row & i
            # act as column xor column element
            c_xor = c_xor ^ mat[j][i]
         
  
        # update maximum between r_xor , c_xor
        if (max_xor < max(r_xor, c_xor)):
            max_xor =  max(r_xor, c_xor)
  
    # return maximum xor value
    return max_xor
  
# Driver Code
N = 3
  
mat= [[1 , 5, 4],
      [3 , 7, 2 ],
      [5 , 9, 10]]
  
print("maximum XOR value : ",
              maxXOR(mat, N))
               
# This code is contributed by Anant Agarwal.


C#
// C# program to Find maximum XOR value in
// matrix either row / column wise
using System;
 
class GFG
{
     
    // maximum number of row and column
 
     
    // function return the maximum xor value
    // that is either row or column wise
    static int maxXOR(int [,]mat, int N)
    {
         
        // for row xor and column xor
        int r_xor, c_xor;
        int max_xor = 0;
     
        // traverse matrix
        for (int i = 0 ; i < N ; i++)
        {
            r_xor = 0; c_xor = 0;
             
            for (int j = 0 ; j < N ; j++)
            {
                 
                // xor row element
                r_xor = r_xor^mat[i, j];
     
                // for each column : j is act as row & i
                // act as column xor column element
                c_xor = c_xor^mat[j, i];
            }
     
            // update maximum between r_xor , c_xor
            if (max_xor < Math.Max(r_xor, c_xor))
                max_xor = Math.Max(r_xor, c_xor);
        }
     
        // return maximum xor value
        return max_xor;
    }
     
    // Driver code
    public static void Main ()
    {
         
        int N = 3;
     
        int [,]mat = { {1, 5, 4},
                        {3, 7, 2},
                        {5, 9, 10}};
     
        Console.Write("maximum XOR value : "
            + maxXOR(mat, N));
    }
}
 
// This code is contributed by nitin mittal.


PHP


Javascript


输出 :

maximum XOR value  : 12