Wednesday, July 3, 2024

Maximum XOR value in matrix

Given a square matrix (N X N), the task is to find the maximum XOR value of a complete row or a complete column.

Examples : 

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 

A simple solution of this problem is we can traverse the matrix twice and calculate maximum xor value row-wise & column wise ,and at last return the maximum between (xor_row , xor_column).
A efficient solution is we can traverse matrix only one time and calculate max XOR value . 

  1. Start traverse the matrix and calculate XOR at each index row and column wise. We can compute both values by using indexes in reverse way. This is possible because matrix is a square matrix.
  2. Store the maximum of both.

Below is the implementation : 

C++




// C++ program to Find maximum XOR value in
// matrix either row / column wise
#include<iostream>
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
import java.io.*;
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




<?php
// PHP program to Find
// maximum XOR value in
// matrix either row or
// column wise
 
// maximum number of
// row and column
$MAX = 1000;
 
// function return the maximum
// xor value that is either
// row or column wise
function maxXOR($mat, $N)
{
     
    // for row xor and
    // column xor
    $r_xor; $c_xor;
    $max_xor = 0;
 
    // traverse matrix
    for ($i = 0 ; $i < $N ; $i++)
    {
        $r_xor = 0; $c_xor = 0;
        for ($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
    $N = 3;
    $mat = array(array(1, 5, 4),
                 array(3, 7, 2),
                 array(5, 9, 10));
 
    echo "maximum XOR value : "
        , maxXOR($mat, $N);
 
// This code is contributed by anuj_67.
?>


Javascript




<script>
 
// Javascript program to Find
// maximum XOR value in
// matrix either row / column wise
 
// maximum number of row and column
const MAX = 1000;
 
// function return the maximum
// xor value that is
// either row or column wise
function maxXOR(mat, N)
{
    // for row xor and column xor
    let r_xor, c_xor;
    let max_xor = 0;
 
    // traverse matrix
    for (let i = 0 ; i < N ; i++)
    {
        r_xor = 0, c_xor = 0;
        for (let 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
    let N = 3;
 
    let mat = [[1 , 5, 4],
                      [3 , 7, 2 ],
                      [5 , 9, 10]];
 
    document.write("maximum XOR value : "
         + maxXOR(mat, N));
 
</script>


Output

maximum XOR value : 12

Time complexity : O(N*N) 
space complexity : O(1)

This article is contributed by Nishant_Singh(Pintu). If you like neveropen and would like to contribute, you can also write an article using write.neveropen.co.za or mail your article to review-team@neveropen.co.za. See your article appearing on the neveropen main page and help other Geeks. 

Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

Shaida Kate Naidoo
am passionate about learning the latest technologies available to developers in either a Front End or Back End capacity. I enjoy creating applications that are well designed and responsive, in addition to being user friendly. I thrive in fast paced environments. With a diverse educational and work experience background, I excel at collaborating with teams both local and international. A versatile developer with interests in Software Development and Software Engineering. I consider myself to be adaptable and a self motivated learner. I am interested in new programming technologies, and continuous self improvement.
RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments